serial: max310x: Properly set flags in AutoCTS mode
Commit 391f93f2ec9f ("serial: core: Rework hw-assisted flow control support") has changed the way the AutoCTS mode is handled. According to that change, serial drivers which enable H/W AutoCTS mode must set UPSTAT_AUTORTS, UPSTAT_AUTOCTS and UPSTAT_AUTOXOFF to prevent the serial core from inadvertently disabling RX or TX. This patch adds proper handling of UPSTAT_AUTORTS, UPSTAT_AUTOCTS and UPSTAT_AUTOXOFF flags. Signed-off-by: Christoph Vogtländer <c.vogtlaender@sigma-surface-science.com> Link: https://lore.kernel.org/r/20190904121141.4570-1-c.vogtlaender@sigma-surface-science.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8966110c56
commit
5a8c296f53
@ -955,15 +955,23 @@ static void max310x_set_termios(struct uart_port *port,
|
|||||||
/* Configure flow control */
|
/* Configure flow control */
|
||||||
max310x_port_write(port, MAX310X_XON1_REG, termios->c_cc[VSTART]);
|
max310x_port_write(port, MAX310X_XON1_REG, termios->c_cc[VSTART]);
|
||||||
max310x_port_write(port, MAX310X_XOFF1_REG, termios->c_cc[VSTOP]);
|
max310x_port_write(port, MAX310X_XOFF1_REG, termios->c_cc[VSTOP]);
|
||||||
if (termios->c_cflag & CRTSCTS)
|
|
||||||
|
port->status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS | UPSTAT_AUTOXOFF);
|
||||||
|
|
||||||
|
if (termios->c_cflag & CRTSCTS) {
|
||||||
|
/* Enable AUTORTS and AUTOCTS */
|
||||||
|
port->status |= UPSTAT_AUTOCTS | UPSTAT_AUTORTS;
|
||||||
flow |= MAX310X_FLOWCTRL_AUTOCTS_BIT |
|
flow |= MAX310X_FLOWCTRL_AUTOCTS_BIT |
|
||||||
MAX310X_FLOWCTRL_AUTORTS_BIT;
|
MAX310X_FLOWCTRL_AUTORTS_BIT;
|
||||||
|
}
|
||||||
if (termios->c_iflag & IXON)
|
if (termios->c_iflag & IXON)
|
||||||
flow |= MAX310X_FLOWCTRL_SWFLOW3_BIT |
|
flow |= MAX310X_FLOWCTRL_SWFLOW3_BIT |
|
||||||
MAX310X_FLOWCTRL_SWFLOWEN_BIT;
|
MAX310X_FLOWCTRL_SWFLOWEN_BIT;
|
||||||
if (termios->c_iflag & IXOFF)
|
if (termios->c_iflag & IXOFF) {
|
||||||
|
port->status |= UPSTAT_AUTOXOFF;
|
||||||
flow |= MAX310X_FLOWCTRL_SWFLOW1_BIT |
|
flow |= MAX310X_FLOWCTRL_SWFLOW1_BIT |
|
||||||
MAX310X_FLOWCTRL_SWFLOWEN_BIT;
|
MAX310X_FLOWCTRL_SWFLOWEN_BIT;
|
||||||
|
}
|
||||||
max310x_port_write(port, MAX310X_FLOWCTRL_REG, flow);
|
max310x_port_write(port, MAX310X_FLOWCTRL_REG, flow);
|
||||||
|
|
||||||
/* Get baud rate generator configuration */
|
/* Get baud rate generator configuration */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user