Hi Vishal,
follow up our IRC conversation I provide patch for review for Suspend / Resume crashes
1. Select "Assume MMC/SD cards are non-removable (DANGEROUS)" "MMC embedded SDIO device support (EXPERIMENTAL)" "Enable paranoid SD card initialization (EXPERIMENTAL)"
[X]
2. Use patch below
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c index 639b092..1ba2160 100644 --- a/drivers/tty/serial/samsung.c +++ b/drivers/tty/serial/samsung.c @@ -1330,10 +1330,18 @@ static int s3c24xx_serial_remove(struct platform_device *dev)
/* UART power management code */ #ifdef CONFIG_PM_SLEEP +static atomic_t suspend_resume = {0}; static int s3c24xx_serial_suspend(struct device *dev) { - struct uart_port *port = s3c24xx_dev_to_port(dev); - + struct uart_port *port; + if (atomic_read(&suspend_resume) > 0) { + printk("%s : Already suspended\n", __func__); + return 0; + } else { + printk("%s : Suspend\n", __func__); + atomic_set(&suspend_resume, 1); + } + port = s3c24xx_dev_to_port(dev); if (port) uart_suspend_port(&s3c24xx_uart_drv, port);
@@ -1342,9 +1350,18 @@ static int s3c24xx_serial_suspend(struct device *dev)
static int s3c24xx_serial_resume(struct device *dev) { - struct uart_port *port = s3c24xx_dev_to_port(dev); - struct s3c24xx_uart_port *ourport = to_ourport(port); + struct uart_port *port; + struct s3c24xx_uart_port *ourport;
+ if (atomic_read(&suspend_resume) == 0) { + printk("%s : Already resumed\n", __func__); + return 0; + } else { + printk("%s : Resume\n", __func__); + atomic_set(&suspend_resume, 0); + } + port = s3c24xx_dev_to_port(dev); + ourport = to_ourport(port); if (port) { clk_prepare_enable(ourport->clk); s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port)); @@ -1801,7 +1818,6 @@ static int __init s3c24xx_serial_modinit(void) pr_err("Failed to register Samsung UART driver\n"); return ret; } - return platform_driver_register(&samsung_serial_driver); }
Genisim Tsilker Platform Development Cel: (408) 966-6285 Cel: (650) 336-4806 Linkedin: http://www.linkedin.com/in/genisimtsilker