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);
}