serial: imx: Only wakeup via RTSDEN bit if the system has RTS/CTS
authorFabio Estevam <fabio.estevam@nxp.com>
Thu, 4 Jan 2018 17:58:34 +0000 (15:58 -0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 3 Feb 2018 16:39:23 +0000 (17:39 +0100)
commit 38b1f0fb42f772b8c9aac53593883a18ff5eb9d7 upstream.

The wakeup mechanism via RTSDEN bit relies on the system using the RTS/CTS
lines, so only allow such wakeup method when the system actually has
RTS/CTS support.

Fixes: bc85734b126f ("serial: imx: allow waking up on RTSD")
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Martin Kaiser <martin@kaiser.cx>
Acked-by: Fugang Duan <fugang.duan@nxp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c

index 3657d745e90f0c96ed83359f88fd009518ce77f2..521500c575c825cec28d2282aabfbabb213f6ddd 100644 (file)
@@ -2275,12 +2275,14 @@ static void serial_imx_enable_wakeup(struct imx_port *sport, bool on)
                val &= ~UCR3_AWAKEN;
        writel(val, sport->port.membase + UCR3);
 
-       val = readl(sport->port.membase + UCR1);
-       if (on)
-               val |= UCR1_RTSDEN;
-       else
-               val &= ~UCR1_RTSDEN;
-       writel(val, sport->port.membase + UCR1);
+       if (sport->have_rtscts) {
+               val = readl(sport->port.membase + UCR1);
+               if (on)
+                       val |= UCR1_RTSDEN;
+               else
+                       val &= ~UCR1_RTSDEN;
+               writel(val, sport->port.membase + UCR1);
+       }
 }
 
 static int imx_serial_port_suspend_noirq(struct device *dev)