MLK-13798 tty: serial: imx: Only poke at suspend wakeup bits in noirq phase
authorLeonard Crestez <leonard.crestez@nxp.com>
Thu, 26 Jan 2017 11:39:02 +0000 (13:39 +0200)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 19:58:07 +0000 (14:58 -0500)
This prevents unwanted interrupts coming in early suspend.

Loosely based on 81e8e7d91d81351d9fea4ad7c289b122706640fd from imx_4.1.y:

MLK-11382 tty: serial: imx: disable irq after suspend

Disable rx irq after suspend to avoid interrupt coming in early
resume.

Signed-off-by: Fugang Duan <B38611@freescale.com>
Signed-off-by: Leonard Crestez <leonard.crestez@nxp.com>
drivers/tty/serial/imx.c

index 80f2ad2..7860e98 100644 (file)
@@ -2271,6 +2271,9 @@ static int imx_serial_port_suspend_noirq(struct device *dev)
        if (ret)
                return ret;
 
+       /* enable wakeup from i.MX UART */
+       serial_imx_enable_wakeup(sport, true);
+
        serial_imx_save_context(sport);
 
        clk_disable(sport->clk_ipg);
@@ -2294,6 +2297,9 @@ static int imx_serial_port_resume_noirq(struct device *dev)
 
        serial_imx_restore_context(sport);
 
+       /* disable wakeup from i.MX UART */
+       serial_imx_enable_wakeup(sport, false);
+
        clk_disable(sport->clk_ipg);
 
        return 0;
@@ -2304,9 +2310,6 @@ static int imx_serial_port_suspend(struct device *dev)
        struct platform_device *pdev = to_platform_device(dev);
        struct imx_port *sport = platform_get_drvdata(pdev);
 
-       /* enable wakeup from i.MX UART */
-       serial_imx_enable_wakeup(sport, true);
-
        uart_suspend_port(&imx_reg, &sport->port);
 
        /* Needed to enable clock in suspend_noirq */
@@ -2318,9 +2321,6 @@ static int imx_serial_port_resume(struct device *dev)
        struct platform_device *pdev = to_platform_device(dev);
        struct imx_port *sport = platform_get_drvdata(pdev);
 
-       /* disable wakeup from i.MX UART */
-       serial_imx_enable_wakeup(sport, false);
-
        uart_resume_port(&imx_reg, &sport->port);
 
        clk_unprepare(sport->clk_ipg);