diff options
author | Fugang Duan <fugang.duan@nxp.com> | 2018-03-06 17:41:14 +0800 |
---|---|---|
committer | Leonard Crestez <leonard.crestez@nxp.com> | 2018-08-24 12:41:33 +0300 |
commit | bf186e726d390788df0c5fd5e448da78dedc896c (patch) | |
tree | d7096029b64edcef2e5be385ed3fc0f71668b6c3 /drivers/tty/serial | |
parent | 829533c75408cdcf00af780d4e1468459d7a6162 (diff) |
MLK-17739 tty: serial: imx: clear wakeup flag before enable wakeup interrupt
It is better to clear wakeup flag in status register before enable
wakeup interrupt bits, which can avoid system suspend fail during
devices no irq suspend stage.
Reviewed-by: Gao Pan <pandy.gao@nxp.com>
Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Diffstat (limited to 'drivers/tty/serial')
-rw-r--r-- | drivers/tty/serial/imx.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 348a3f169070..b6e390e56f28 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -2315,6 +2315,10 @@ static void serial_imx_enable_wakeup(struct imx_port *sport, bool on) { unsigned int val; + val = readl(sport->port.membase + USR1); + if (val & (USR1_AWAKE | USR1_RTSD)) + writel(USR1_AWAKE | USR1_RTSD, sport->port.membase + USR1); + val = readl(sport->port.membase + UCR3); if (on) val |= UCR3_AWAKEN; @@ -2336,7 +2340,6 @@ static int imx_serial_port_suspend_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; ret = clk_enable(sport->clk_ipg); @@ -2371,9 +2374,6 @@ 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); |