| From a7731cf682c4d2cac37ded614ec428dba109269d Mon Sep 17 00:00:00 2001 |
| From: Geert Uytterhoeven <geert+renesas@glider.be> |
| Date: Tue, 28 Mar 2017 11:13:45 +0200 |
| Subject: [PATCH 127/286] serial: sh-sci: Fix late enablement of AUTORTS |
| |
| When changing hardware control flow for a UART with dedicated RTS/CTS |
| pins, the new AUTORTS state is not immediately reflected in the |
| hardware, but only when RTS is raised. However, the serial core does |
| not call .set_mctrl() after .set_termios(), hence AUTORTS may only |
| become effective when the port is closed, and reopened later. |
| Note that this problem does not happen when manually using stty to |
| change CRTSCTS, as AUTORTS will work fine on next open. |
| |
| To fix this, call .set_mctrl() from .set_termios() when dedicated |
| RTS/CTS pins are present, to refresh the AUTORTS or RTS state. |
| This is similar to what other drivers supporting AUTORTS do (e.g. |
| omap-serial). |
| |
| Reported-by: Baumann, Christoph (C.) <cbaumann@visteon.com> |
| Fixes: 33f50ffc253854cf ("serial: sh-sci: Fix support for hardware-assisted RTS/CTS") |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| (cherry picked from commit 5f76895e4c712b1b5af450cf344389b8c53ac2c2) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/tty/serial/sh-sci.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/drivers/tty/serial/sh-sci.c |
| +++ b/drivers/tty/serial/sh-sci.c |
| @@ -2385,6 +2385,10 @@ done: |
| |
| serial_port_out(port, SCFCR, ctrl); |
| } |
| + if (port->flags & UPF_HARD_FLOW) { |
| + /* Refresh (Auto) RTS */ |
| + sci_set_mctrl(port, port->mctrl); |
| + } |
| |
| scr_val |= SCSCR_RE | SCSCR_TE | |
| (s->cfg->scscr & ~(SCSCR_CKE1 | SCSCR_CKE0)); |