Commit ddf89e75 authored by Sergey Organov's avatar Sergey Organov Committed by Greg Kroah-Hartman
Browse files

serial: imx: set_termios(): clarify RTS/CTS bits calculation



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: default avatarSascha Hauer <s.hauer@pengutronix.de>
Tested-by: default avatarSascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: default avatarSergey Organov <sorganov@gmail.com>
Link: https://lore.kernel.org/r/1561558293-7683-4-git-send-email-sorganov@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 41ffa48e
Loading
Loading
Loading
Loading
+14 −24
Original line number Diff line number Diff line
@@ -1566,9 +1566,8 @@ 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 (!sport->have_rtscts)
		termios->c_cflag &= ~CRTSCTS;

	if (port->rs485.flags & SER_RS485_ENABLED) {
		/*
@@ -1576,25 +1575,16 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios,
		 * 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 (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;