summaryrefslogtreecommitdiff
path: root/drivers/tty/serial
diff options
context:
space:
mode:
authorFugang Duan <fugang.duan@nxp.com>2018-03-06 17:41:14 +0800
committerLeonard Crestez <leonard.crestez@nxp.com>2018-08-24 12:41:33 +0300
commitbf186e726d390788df0c5fd5e448da78dedc896c (patch)
treed7096029b64edcef2e5be385ed3fc0f71668b6c3 /drivers/tty/serial
parent829533c75408cdcf00af780d4e1468459d7a6162 (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.c8
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);