serial: imx: fix throttle/unthrottle callbacks for hardware assisted flow control
authorFugang Duan <B38611@freescale.com>
Fri, 19 Sep 2014 07:26:40 +0000 (15:26 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 29 Sep 2014 01:26:38 +0000 (21:26 -0400)
when the 'CTSC' bit is negated. 'CTS' has no function when 'CTSC' is asserted.
0: The CTS pin is high (inactive)
1: The CTS pin is low (active)

For throttle, it needs to clear 'CTS' and 'CTSC' bits.
For unthrottle, it needs to enable 'CTS' and 'CTSC' bits.

The patch just fix the issue.

Signed-off-by: Fugang Duan <B38611@freescale.com>
Signed-off-by: Huang Shijie <shijie8@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c

index be13eb39fbf4faf0ddc48f86ea3cf1327770a458..c7683d747c18e12440c83ddd2fbead9e3d523a10 100644 (file)
@@ -817,11 +817,9 @@ static void imx_set_mctrl(struct uart_port *port, unsigned int mctrl)
        struct imx_port *sport = (struct imx_port *)port;
        unsigned long temp;
 
-       temp = readl(sport->port.membase + UCR2) & ~UCR2_CTS;
-
+       temp = readl(sport->port.membase + UCR2) & ~(UCR2_CTS | UCR2_CTSC);
        if (mctrl & TIOCM_RTS)
-               if (!sport->dma_is_enabled)
-                       temp |= UCR2_CTS;
+               temp |= UCR2_CTS | UCR2_CTSC;
 
        writel(temp, sport->port.membase + UCR2);