MLK-10274 tty: serial: clear AWAKE bit after resume back
authorAndy Duan <fugang.duan@nxp.com>
Tue, 21 Mar 2017 09:14:39 +0000 (17:14 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 20:21:38 +0000 (15:21 -0500)
When uart port (non-console port) in dma mode and use uart as remote wakeup
source, after resume back, the AWAKE bit is not cleared most of interrupts
are disabled. And then let system suspend state, system resume back immediately
without any wake up action. So we need to clear the AWAKE bit after resume
back in DMA mode.

Merge comments: it is necessary to clear AWAKE or RTSD bit.

Signed-off-by: Fugang Duan <B38611@freescale.com>
(merge patch from commit: d4b6b6b20eb2c5cca47292f89ab588b15d3be0a9)

drivers/tty/serial/imx.c

index 0d7048d..06ca338 100644 (file)
@@ -2288,6 +2288,7 @@ static int imx_serial_port_resume_noirq(struct device *dev)
 {
        struct platform_device *pdev = to_platform_device(dev);
        struct imx_port *sport = platform_get_drvdata(pdev);
+       unsigned int val;
        int ret;
 
        pinctrl_pm_select_default_state(dev);
@@ -2300,6 +2301,9 @@ static int imx_serial_port_resume_noirq(struct device *dev)
 
        /* disable wakeup from i.MX UART */
        serial_imx_enable_wakeup(sport, false);
+       val = readl(sport->port.membase + USR1);
+       if (val & (USR1_AWAKE | USR1_RTSD))
+               writel(USR1_AWAKE | USR1_RTSD, sport->port.membase + USR1);
 
        clk_disable(sport->clk_ipg);