]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
serial: imx: set_termios(): clarify RTS/CTS bits calculation
authorSergey Organov <sorganov@gmail.com>
Wed, 26 Jun 2019 14:11:29 +0000 (17:11 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Jul 2019 17:35:41 +0000 (19:35 +0200)
Avoid repeating the same code for rs485 twice.

Make it obvious we clear CRTSCTS bit in termios->c_cflag whenever
sport->have_rtscts is false.

Make it obvious we clear UCR2_IRTS whenever CRTSCTS is set.

Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de>
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Sergey Organov <sorganov@gmail.com>
Link: https://lore.kernel.org/r/1561558293-7683-4-git-send-email-sorganov@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/imx.c

index df2186cac615198d372090a49cf91812adbc7b4a..1cb891b4eaa0305c13fbfc2f660f6e3ceb889d50 100644 (file)
@@ -1566,35 +1566,25 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios,
        if ((termios->c_cflag & CSIZE) == CS8)
                ucr2 |= UCR2_WS;
 
-       if (termios->c_cflag & CRTSCTS) {
-               if (sport->have_rtscts) {
-                       ucr2 &= ~UCR2_IRTS;
-
-                       if (port->rs485.flags & SER_RS485_ENABLED) {
-                               /*
-                                * RTS is mandatory for rs485 operation, so keep
-                                * it under manual control and keep transmitter
-                                * disabled.
-                                */
-                               if (port->rs485.flags &
-                                   SER_RS485_RTS_AFTER_SEND)
-                                       imx_uart_rts_active(sport, &ucr2);
-                               else
-                                       imx_uart_rts_inactive(sport, &ucr2);
-                       } else {
-                               imx_uart_rts_auto(sport, &ucr2);
-                       }
-               } else {
-                       termios->c_cflag &= ~CRTSCTS;
-               }
-       } else if (port->rs485.flags & SER_RS485_ENABLED) {
-               /* disable transmitter */
+       if (!sport->have_rtscts)
+               termios->c_cflag &= ~CRTSCTS;
+
+       if (port->rs485.flags & SER_RS485_ENABLED) {
+               /*
+                * RTS is mandatory for rs485 operation, so keep
+                * it under manual control and keep transmitter
+                * disabled.
+                */
                if (port->rs485.flags & SER_RS485_RTS_AFTER_SEND)
                        imx_uart_rts_active(sport, &ucr2);
                else
                        imx_uart_rts_inactive(sport, &ucr2);
-       }
 
+       } else if (termios->c_cflag & CRTSCTS)
+               imx_uart_rts_auto(sport, &ucr2);
+
+       if (termios->c_cflag & CRTSCTS)
+               ucr2 &= ~UCR2_IRTS;
 
        if (termios->c_cflag & CSTOPB)
                ucr2 |= UCR2_STPB;