uart: pl011: Improve LCRH register access decision
authorJun Nie <jun.nie@linaro.org>
Fri, 31 Jul 2015 07:49:18 +0000 (15:49 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Aug 2015 05:07:26 +0000 (22:07 -0700)
Improve LCRH register access decision as ARM PL011 lcrh
register serve as both TX and RX, while other SOC may
implement TX and RX function with separated register.

Signed-off-by: Jun Nie <jun.nie@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/amba-pl011.c

index e1f3bd5afad6d0c78eaa840fcae2034a6099a0d0..017443d092c151fde4b781721ee171bb945e87ce 100644 (file)
@@ -249,6 +249,11 @@ struct uart_amba_port {
 #endif
 };
 
+static bool is_implemented(struct uart_amba_port *uap, unsigned int reg)
+{
+       return uap->reg_lut[reg] != (u16)~0;
+}
+
 static unsigned int pl011_readw(struct uart_amba_port *uap, int index)
 {
        WARN_ON(index > REG_NR);
@@ -1649,7 +1654,7 @@ static int pl011_hwinit(struct uart_port *port)
 static void pl011_write_lcr_h(struct uart_amba_port *uap, unsigned int lcr_h)
 {
        pl011_writew(uap, lcr_h, uap->lcrh_rx);
-       if (uap->lcrh_rx != uap->lcrh_tx) {
+       if (is_implemented(uap, REG_ST_LCRH_RX)) {
                int i;
                /*
                 * Wait 10 PCLKs before writing LCRH_TX register,
@@ -1784,7 +1789,7 @@ static void pl011_disable_uart(struct uart_amba_port *uap)
         * disable break condition and fifos
         */
        pl011_shutdown_channel(uap, uap->lcrh_rx);
-       if (uap->lcrh_rx != uap->lcrh_tx)
+       if (is_implemented(uap, REG_ST_LCRH_RX))
                pl011_shutdown_channel(uap, uap->lcrh_tx);
 }