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)"



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