From 90afa5255f5c5ae67c869918e4c5f60b8580db70 Mon Sep 17 00:00:00 2001 From: Ulrich Hecht Date: Wed, 8 Feb 2017 18:31:14 +0100 Subject: serial: sh-sci: fix hardware RX trigger level setting 1. Do not set the RX trigger level for software timeout devices on reset; there is no timeout by default, and data will rot. 2. Do set the RX trigger level for hardware timeout devices when set via sysfs attribute. Fixes SCIFA-type serial consoles. Signed-off-by: Ulrich Hecht Tested-by: Geert Uytterhoeven Signed-off-by: Greg Kroah-Hartman --- drivers/tty/serial/sh-sci.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'drivers/tty') diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c index f95a56ca936e..9a47cc4f16a2 100644 --- a/drivers/tty/serial/sh-sci.c +++ b/drivers/tty/serial/sh-sci.c @@ -1076,8 +1076,11 @@ static ssize_t rx_trigger_store(struct device *dev, if (kstrtol(buf, 0, &r) == -EINVAL) return -EINVAL; + sci->rx_trigger = scif_set_rtrg(port, r); - scif_set_rtrg(port, 1); + if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) + scif_set_rtrg(port, 1); + return count; } @@ -2179,7 +2182,11 @@ static void sci_reset(struct uart_port *port) setup_timer(&s->rx_fifo_timer, rx_fifo_timer_fn, (unsigned long)s); } else { - scif_set_rtrg(port, s->rx_trigger); + if (port->type == PORT_SCIFA || + port->type == PORT_SCIFB) + scif_set_rtrg(port, 1); + else + scif_set_rtrg(port, s->rx_trigger); } } } -- cgit v1.2.3-59-g8ed1b