diff options
author | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2013-12-06 10:59:19 +0100 |
---|---|---|
committer | Simon Horman <horms+renesas@verge.net.au> | 2013-12-24 11:17:52 +0900 |
commit | b545e4f40613be708ad660517f10c87423a09e8d (patch) | |
tree | a44ccfea3239a47d05178a18622ec207cd69e65e | |
parent | 520402bbc6fe328ae28e08bfc87a2b1eb7f10b2c (diff) | |
download | blackbird-op-linux-b545e4f40613be708ad660517f10c87423a09e8d.tar.gz blackbird-op-linux-b545e4f40613be708ad660517f10c87423a09e8d.zip |
serial: sh-sci: Compute overrun_bit without using baud rate algo
The overrun bit index is a property of the hardware. It's currently
computed based on a different and unrelated hardware property, the baud
rate calculation algorithm. Compute it using hardware identification
information only.
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
-rw-r--r-- | drivers/tty/serial/sh-sci.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c index 99a64fd16d46..d5239d5ff98b 100644 --- a/drivers/tty/serial/sh-sci.c +++ b/drivers/tty/serial/sh-sci.c @@ -2133,30 +2133,38 @@ static int sci_init_single(struct platform_device *dev, sci_port->irqs[i] = p->irqs[i] ? p->irqs[i] : -ENXIO; } + if (p->regtype == SCIx_PROBE_REGTYPE) { + ret = sci_probe_regmap(p); + if (unlikely(ret)) + return ret; + } + switch (p->type) { case PORT_SCIFB: port->fifosize = 256; + sci_port->overrun_bit = 9; break; case PORT_HSCIF: port->fifosize = 128; + sci_port->overrun_bit = 0; break; case PORT_SCIFA: port->fifosize = 64; + sci_port->overrun_bit = 9; break; case PORT_SCIF: port->fifosize = 16; + if (p->regtype == SCIx_SH7705_SCIF_REGTYPE) + sci_port->overrun_bit = 9; + else + sci_port->overrun_bit = 0; break; default: port->fifosize = 1; + sci_port->overrun_bit = 5; break; } - if (p->regtype == SCIx_PROBE_REGTYPE) { - ret = sci_probe_regmap(p); - if (unlikely(ret)) - return ret; - } - if (!early) { sci_port->iclk = clk_get(&dev->dev, "sci_ick"); if (IS_ERR(sci_port->iclk)) { @@ -2194,12 +2202,6 @@ static int sci_init_single(struct platform_device *dev, * Establish sensible defaults for the overrun detection, unless * the part has explicitly disabled support for it. */ - if (p->type == PORT_SCI) - sci_port->overrun_bit = 5; - else if (p->scbrr_algo_id == SCBRR_ALGO_4) - sci_port->overrun_bit = 9; - else - sci_port->overrun_bit = 0; /* * Make the error mask inclusive of overrun detection, if |