serial: 8250_omap: refactor mdr1 update
authorSekhar Nori <nsekhar@ti.com>
Tue, 14 Jul 2015 08:02:05 +0000 (13:32 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Jul 2015 22:24:11 +0000 (15:24 -0700)
The silicon errata[1] workaround implemented in a follow-on
patch, "serial: 8250_omap: workaround errata on disabling
UART after using DMA", requires MDR1 register programming.

Extract MDR1 register update into helper function,
omap8250_update_mdr1() to help with that.

[1] Advisory 21 in http://www.ti.com/lit/er/sprz408b/sprz408b.pdf

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_omap.c

index 20c5b9c4c288ffb23926a51de058c22ca84d1b76..d9c96b993a84f97abb4b9afaab263eafa0c34ca7 100644 (file)
@@ -232,6 +232,15 @@ static void omap8250_update_scr(struct uart_8250_port *up,
        serial_out(up, UART_OMAP_SCR, priv->scr);
 }
 
+static void omap8250_update_mdr1(struct uart_8250_port *up,
+                                struct omap8250_priv *priv)
+{
+       if (priv->habit & UART_ERRATA_i202_MDR1_ACCESS)
+               omap_8250_mdr1_errataset(up, priv);
+       else
+               serial_out(up, UART_OMAP_MDR1, priv->mdr1);
+}
+
 static void omap8250_restore_regs(struct uart_8250_port *up)
 {
        struct omap8250_priv *priv = up->port.private_data;
@@ -282,11 +291,9 @@ static void omap8250_restore_regs(struct uart_8250_port *up)
        serial_out(up, UART_XOFF1, priv->xoff);
 
        serial_out(up, UART_LCR, up->lcr);
-       /* need mode A for FCR */
-       if (priv->habit & UART_ERRATA_i202_MDR1_ACCESS)
-               omap_8250_mdr1_errataset(up, priv);
-       else
-               serial_out(up, UART_OMAP_MDR1, priv->mdr1);
+
+       omap8250_update_mdr1(up, priv);
+
        up->port.ops->set_mctrl(&up->port, up->port.mctrl);
 }