Commit 9719acce authored by Peter Hurley's avatar Peter Hurley Committed by Greg Kroah-Hartman

serial: 8250_omap: Use UPSTAT_AUTORTS for RTS handling

Commit 88838d3112702 ("serial: omap_8250: Fix RTS handling") fixed
RTS pin control when in autoRTS mode.

New support added in "serial: core: Rework hw-assisted flow control support"
enables a much simpler approach; rather than masking out autoRTS
whenever writing the EFR register, use the UPSTAT_* mode to determine if
autoRTS should be enabled when raising RTS (in omap8250_set_mctrl()).
Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 391f93f2
...@@ -120,10 +120,11 @@ static void omap8250_set_mctrl(struct uart_port *port, unsigned int mctrl) ...@@ -120,10 +120,11 @@ static void omap8250_set_mctrl(struct uart_port *port, unsigned int mctrl)
*/ */
lcr = serial_in(up, UART_LCR); lcr = serial_in(up, UART_LCR);
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
if (mctrl & TIOCM_RTS) if ((mctrl & TIOCM_RTS) && (port->status & UPSTAT_AUTORTS))
serial_out(up, UART_EFR, priv->efr); priv->efr |= UART_EFR_RTS;
else else
serial_out(up, UART_EFR, priv->efr & ~UART_EFR_RTS); priv->efr &= ~UART_EFR_RTS;
serial_out(up, UART_EFR, priv->efr);
serial_out(up, UART_LCR, lcr); serial_out(up, UART_LCR, lcr);
} }
...@@ -272,10 +273,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up) ...@@ -272,10 +273,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up)
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
serial_dl_write(up, priv->quot); serial_dl_write(up, priv->quot);
if (up->port.mctrl & TIOCM_RTS) serial_out(up, UART_EFR, priv->efr);
serial_out(up, UART_EFR, priv->efr);
else
serial_out(up, UART_EFR, priv->efr & ~UART_EFR_RTS);
/* Configure flow control */ /* Configure flow control */
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
...@@ -424,9 +422,9 @@ static void omap_8250_set_termios(struct uart_port *port, ...@@ -424,9 +422,9 @@ static void omap_8250_set_termios(struct uart_port *port,
up->port.status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS | UPSTAT_AUTOXOFF); up->port.status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS | UPSTAT_AUTOXOFF);
if (termios->c_cflag & CRTSCTS && up->port.flags & UPF_HARD_FLOW) { if (termios->c_cflag & CRTSCTS && up->port.flags & UPF_HARD_FLOW) {
/* Enable AUTORTS and AUTOCTS */ /* Enable AUTOCTS (autoRTS is enabled when RTS is raised) */
up->port.status |= UPSTAT_AUTOCTS | UPSTAT_AUTORTS; up->port.status |= UPSTAT_AUTOCTS | UPSTAT_AUTORTS;
priv->efr |= UART_EFR_CTS | UART_EFR_RTS; priv->efr |= UART_EFR_CTS;
} else if (up->port.flags & UPF_SOFT_FLOW) { } else if (up->port.flags & UPF_SOFT_FLOW) {
/* /*
* IXON Flag: * IXON Flag:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment