diff options
| author | Greg Kroah-Hartman <[email protected]> | 2022-01-30 15:00:39 +0100 | 
|---|---|---|
| committer | Greg Kroah-Hartman <[email protected]> | 2022-01-30 15:00:39 +0100 | 
| commit | 7ab004dbcbee38b8a70798835d3ffcd97a985a5e (patch) | |
| tree | 0caa6cb97801736046823ca785a5ba36bf684ac6 /drivers/tty/serial/serial_core.c | |
| parent | 710f8af199ee9d72dd87083edd55c5ee250ee6f4 (diff) | |
| parent | 26291c54e111ff6ba87a164d85d4a4e134b7315c (diff) | |
Merge tag 'v5.17-rc2' into char-misc-next
We need the char/misc fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Diffstat (limited to 'drivers/tty/serial/serial_core.c')
| -rw-r--r-- | drivers/tty/serial/serial_core.c | 34 | 
1 files changed, 12 insertions, 22 deletions
| diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c index dc40c4155356..0db90be4c3bc 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -144,6 +144,11 @@ uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear)  	unsigned long flags;  	unsigned int old; +	if (port->rs485.flags & SER_RS485_ENABLED) { +		set &= ~TIOCM_RTS; +		clear &= ~TIOCM_RTS; +	} +  	spin_lock_irqsave(&port->lock, flags);  	old = port->mctrl;  	port->mctrl = (old & ~clear) | set; @@ -157,23 +162,10 @@ uart_update_mctrl(struct uart_port *port, unsigned int set, unsigned int clear)  static void uart_port_dtr_rts(struct uart_port *uport, int raise)  { -	int rs485_on = uport->rs485_config && -		(uport->rs485.flags & SER_RS485_ENABLED); -	int RTS_after_send = !!(uport->rs485.flags & SER_RS485_RTS_AFTER_SEND); - -	if (raise) { -		if (rs485_on && RTS_after_send) { -			uart_set_mctrl(uport, TIOCM_DTR); -			uart_clear_mctrl(uport, TIOCM_RTS); -		} else { -			uart_set_mctrl(uport, TIOCM_DTR | TIOCM_RTS); -		} -	} else { -		unsigned int clear = TIOCM_DTR; - -		clear |= (!rs485_on || RTS_after_send) ? TIOCM_RTS : 0; -		uart_clear_mctrl(uport, clear); -	} +	if (raise) +		uart_set_mctrl(uport, TIOCM_DTR | TIOCM_RTS); +	else +		uart_clear_mctrl(uport, TIOCM_DTR | TIOCM_RTS);  }  /* @@ -1075,11 +1067,6 @@ uart_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)  		goto out;  	if (!tty_io_error(tty)) { -		if (uport->rs485.flags & SER_RS485_ENABLED) { -			set &= ~TIOCM_RTS; -			clear &= ~TIOCM_RTS; -		} -  		uart_update_mctrl(uport, set, clear);  		ret = 0;  	} @@ -2390,6 +2377,9 @@ uart_configure_port(struct uart_driver *drv, struct uart_state *state,  		 */  		spin_lock_irqsave(&port->lock, flags);  		port->mctrl &= TIOCM_DTR; +		if (port->rs485.flags & SER_RS485_ENABLED && +		    !(port->rs485.flags & SER_RS485_RTS_AFTER_SEND)) +			port->mctrl |= TIOCM_RTS;  		port->ops->set_mctrl(port, port->mctrl);  		spin_unlock_irqrestore(&port->lock, flags); |