Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b545e4f4 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Simon Horman
Browse files

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: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarSimon Horman <horms+renesas@verge.net.au>
parent 520402bb
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -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