serial: max310x: turn off transmitter before activating AutoCTS or auto transmitter flow control
As documented in the data-sheet, the transmitter must be disabled before activating AutoCTS or auto transmitter flow control. Accordingly, the transmitter must be enabled after AutoCTS or auto transmitter flow control gets deactivated. Signed-off-by: Christoph Vogtländer <c.vogtlaender@sigma-surface-science.com> Link: https://lore.kernel.org/r/20190904121746.4641-1-c.vogtlaender@sigma-surface-science.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5a8c296f53
commit
7d4f881ff1
@ -956,6 +956,15 @@ static void max310x_set_termios(struct uart_port *port,
|
||||
max310x_port_write(port, MAX310X_XON1_REG, termios->c_cc[VSTART]);
|
||||
max310x_port_write(port, MAX310X_XOFF1_REG, termios->c_cc[VSTOP]);
|
||||
|
||||
/* Disable transmitter before enabling AutoCTS or auto transmitter
|
||||
* flow control
|
||||
*/
|
||||
if (termios->c_cflag & CRTSCTS || termios->c_iflag & IXOFF) {
|
||||
max310x_port_update(port, MAX310X_MODE1_REG,
|
||||
MAX310X_MODE1_TXDIS_BIT,
|
||||
MAX310X_MODE1_TXDIS_BIT);
|
||||
}
|
||||
|
||||
port->status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS | UPSTAT_AUTOXOFF);
|
||||
|
||||
if (termios->c_cflag & CRTSCTS) {
|
||||
@ -974,6 +983,15 @@ static void max310x_set_termios(struct uart_port *port,
|
||||
}
|
||||
max310x_port_write(port, MAX310X_FLOWCTRL_REG, flow);
|
||||
|
||||
/* Enable transmitter after disabling AutoCTS and auto transmitter
|
||||
* flow control
|
||||
*/
|
||||
if (!(termios->c_cflag & CRTSCTS) && !(termios->c_iflag & IXOFF)) {
|
||||
max310x_port_update(port, MAX310X_MODE1_REG,
|
||||
MAX310X_MODE1_TXDIS_BIT,
|
||||
0);
|
||||
}
|
||||
|
||||
/* Get baud rate generator configuration */
|
||||
baud = uart_get_baud_rate(port, termios, old,
|
||||
port->uartclk / 16 / 0xffff,
|
||||
|
Loading…
Reference in New Issue
Block a user