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>
This commit is contained in:
parent
520402bbc6
commit
b545e4f406
1 changed files with 26 additions and 24 deletions
|
@ -2133,30 +2133,38 @@ static int sci_init_single(struct platform_device *dev,
|
||||||
sci_port->irqs[i] = p->irqs[i] ? p->irqs[i] : -ENXIO;
|
sci_port->irqs[i] = p->irqs[i] ? p->irqs[i] : -ENXIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (p->type) {
|
|
||||||
case PORT_SCIFB:
|
|
||||||
port->fifosize = 256;
|
|
||||||
break;
|
|
||||||
case PORT_HSCIF:
|
|
||||||
port->fifosize = 128;
|
|
||||||
break;
|
|
||||||
case PORT_SCIFA:
|
|
||||||
port->fifosize = 64;
|
|
||||||
break;
|
|
||||||
case PORT_SCIF:
|
|
||||||
port->fifosize = 16;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
port->fifosize = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p->regtype == SCIx_PROBE_REGTYPE) {
|
if (p->regtype == SCIx_PROBE_REGTYPE) {
|
||||||
ret = sci_probe_regmap(p);
|
ret = sci_probe_regmap(p);
|
||||||
if (unlikely(ret))
|
if (unlikely(ret))
|
||||||
return 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 (!early) {
|
if (!early) {
|
||||||
sci_port->iclk = clk_get(&dev->dev, "sci_ick");
|
sci_port->iclk = clk_get(&dev->dev, "sci_ick");
|
||||||
if (IS_ERR(sci_port->iclk)) {
|
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
|
* Establish sensible defaults for the overrun detection, unless
|
||||||
* the part has explicitly disabled support for it.
|
* 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
|
* Make the error mask inclusive of overrun detection, if
|
||||||
|
|
Loading…
Reference in a new issue