]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/tty/serial/imx.c
Merge tag 'sound-4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[karo-tx-linux.git] / drivers / tty / serial / imx.c
index 33fcc84e756b2d89a47d9f0bcaf976db9580ff03..e3e152cbc75e71d7bc4e966f8a4ec3a1884c2b95 100644 (file)
@@ -336,15 +336,15 @@ static void imx_port_ucrs_restore(struct uart_port *port,
 
 static void imx_port_rts_active(struct imx_port *sport, unsigned long *ucr2)
 {
-       *ucr2 &= ~UCR2_CTSC;
-       *ucr2 |= UCR2_CTS;
+       *ucr2 &= ~(UCR2_CTSC | UCR2_CTS);
 
        mctrl_gpio_set(sport->gpios, sport->port.mctrl | TIOCM_RTS);
 }
 
 static void imx_port_rts_inactive(struct imx_port *sport, unsigned long *ucr2)
 {
-       *ucr2 &= ~(UCR2_CTSC | UCR2_CTS);
+       *ucr2 &= ~UCR2_CTSC;
+       *ucr2 |= UCR2_CTS;
 
        mctrl_gpio_set(sport->gpios, sport->port.mctrl & ~TIOCM_RTS);
 }
@@ -377,9 +377,9 @@ static void imx_stop_tx(struct uart_port *port)
            readl(port->membase + USR2) & USR2_TXDC) {
                temp = readl(port->membase + UCR2);
                if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
-                       imx_port_rts_inactive(sport, &temp);
-               else
                        imx_port_rts_active(sport, &temp);
+               else
+                       imx_port_rts_inactive(sport, &temp);
                temp |= UCR2_RXEN;
                writel(temp, port->membase + UCR2);
 
@@ -585,9 +585,9 @@ static void imx_start_tx(struct uart_port *port)
        if (port->rs485.flags & SER_RS485_ENABLED) {
                temp = readl(port->membase + UCR2);
                if (port->rs485.flags & SER_RS485_RTS_ON_SEND)
-                       imx_port_rts_inactive(sport, &temp);
-               else
                        imx_port_rts_active(sport, &temp);
+               else
+                       imx_port_rts_inactive(sport, &temp);
                if (!(port->rs485.flags & SER_RS485_RX_DURING_TX))
                        temp &= ~UCR2_RXEN;
                writel(temp, port->membase + UCR2);
@@ -1477,9 +1477,9 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
                                 */
                                if (port->rs485.flags &
                                    SER_RS485_RTS_AFTER_SEND)
-                                       imx_port_rts_inactive(sport, &ucr2);
-                               else
                                        imx_port_rts_active(sport, &ucr2);
+                               else
+                                       imx_port_rts_inactive(sport, &ucr2);
                        } else {
                                imx_port_rts_auto(sport, &ucr2);
                        }
@@ -1489,9 +1489,9 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
        } else if (port->rs485.flags & SER_RS485_ENABLED) {
                /* disable transmitter */
                if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
-                       imx_port_rts_inactive(sport, &ucr2);
-               else
                        imx_port_rts_active(sport, &ucr2);
+               else
+                       imx_port_rts_inactive(sport, &ucr2);
        }
 
 
@@ -1733,9 +1733,9 @@ static int imx_rs485_config(struct uart_port *port,
                /* disable transmitter */
                temp = readl(sport->port.membase + UCR2);
                if (rs485conf->flags & SER_RS485_RTS_AFTER_SEND)
-                       imx_port_rts_inactive(sport, &temp);
-               else
                        imx_port_rts_active(sport, &temp);
+               else
+                       imx_port_rts_inactive(sport, &temp);
                writel(temp, sport->port.membase + UCR2);
        }