On Wed, Jun 26, 2019 at 05:11:29PM +0300, Sergey Organov wrote: > 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@xxxxxxxxxxxxxx> > Tested-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> > Signed-off-by: Sergey Organov <sorganov@xxxxxxxxx> > --- > drivers/tty/serial/imx.c | 36 +++++++++++++----------------------- > 1 file changed, 13 insertions(+), 23 deletions(-) > > diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c > index 87802fd..17e2322 100644 > --- a/drivers/tty/serial/imx.c > +++ b/drivers/tty/serial/imx.c > @@ -1567,35 +1567,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 (!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 { > - 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_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); Here a set of braces is needed even if the body has only a single line. > + > + if (termios->c_cflag & CRTSCTS) > + ucr2 &= ~UCR2_IRTS; > > if (termios->c_cflag & CSTOPB) > ucr2 |= UCR2_STPB; Is this patch intended to not change semantic? I wonder if it hides a fix because if imx_uart_set_termios() was called with termios->c_cflag & CRTSCTS and !sport->have_rtscts the rs485 block was not reached. Now it is. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | http://www.pengutronix.de/ |