]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
serial: 8250: factor out serial8250_{set,clear}_THRI() helpers
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 17 Jun 2019 13:53:20 +0000 (16:53 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 18 Jun 2019 07:36:55 +0000 (09:36 +0200)
Factor out similar code pieces that set or clear UART_IER_THRI bit to
serial8250_{set,clear}_THRI() helpers.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250.h
drivers/tty/serial/8250/8250_dma.c
drivers/tty/serial/8250/8250_omap.c
drivers/tty/serial/8250/8250_port.c

index ebfb0bd5bef59d679c36cd0a2562145a11509f1a..93756ea540d637e9a2a184477bd030c0a2b0381c 100644 (file)
@@ -128,6 +128,24 @@ static inline void serial_dl_write(struct uart_8250_port *up, int value)
        up->dl_write(up, value);
 }
 
+static inline bool serial8250_set_THRI(struct uart_8250_port *up)
+{
+       if (up->ier & UART_IER_THRI)
+               return false;
+       up->ier |= UART_IER_THRI;
+       serial_out(up, UART_IER, up->ier);
+       return true;
+}
+
+static inline bool serial8250_clear_THRI(struct uart_8250_port *up)
+{
+       if (!(up->ier & UART_IER_THRI))
+               return false;
+       up->ier &= ~UART_IER_THRI;
+       serial_out(up, UART_IER, up->ier);
+       return true;
+}
+
 struct uart_8250_port *serial8250_get_port(int line);
 
 void serial8250_rpm_get(struct uart_8250_port *p);
index bfa1a857f3ffab6bd039e532c68fcf85c1afb0d4..890fa7ddaa7f36650a1b69a8554e5567fd674f84 100644 (file)
@@ -34,10 +34,8 @@ static void __dma_tx_complete(void *param)
                uart_write_wakeup(&p->port);
 
        ret = serial8250_tx_dma(p);
-       if (ret) {
-               p->ier |= UART_IER_THRI;
-               serial_port_out(&p->port, UART_IER, p->ier);
-       }
+       if (ret)
+               serial8250_set_THRI(p);
 
        spin_unlock_irqrestore(&p->port.lock, flags);
 }
@@ -100,10 +98,7 @@ int serial8250_tx_dma(struct uart_8250_port *p)
        dma_async_issue_pending(dma->txchan);
        if (dma->tx_err) {
                dma->tx_err = 0;
-               if (p->ier & UART_IER_THRI) {
-                       p->ier &= ~UART_IER_THRI;
-                       serial_out(p, UART_IER, p->ier);
-               }
+               serial8250_clear_THRI(p);
        }
        return 0;
 err:
index 0a8316632d751563ef12fe6b74c69a0570286f97..ed25cfc3be13129ae7810e48e6e480c53a34927b 100644 (file)
@@ -923,15 +923,13 @@ static void omap_8250_dma_tx_complete(void *param)
                ret = omap_8250_tx_dma(p);
                if (ret)
                        en_thri = true;
-
        } else if (p->capabilities & UART_CAP_RPM) {
                en_thri = true;
        }
 
        if (en_thri) {
                dma->tx_err = 1;
-               p->ier |= UART_IER_THRI;
-               serial_port_out(&p->port, UART_IER, p->ier);
+               serial8250_set_THRI(p);
        }
 
        spin_unlock_irqrestore(&p->port.lock, flags);
@@ -959,10 +957,7 @@ static int omap_8250_tx_dma(struct uart_8250_port *p)
                        ret = -EBUSY;
                        goto err;
                }
-               if (p->ier & UART_IER_THRI) {
-                       p->ier &= ~UART_IER_THRI;
-                       serial_out(p, UART_IER, p->ier);
-               }
+               serial8250_clear_THRI(p);
                return 0;
        }
 
@@ -1020,10 +1015,7 @@ static int omap_8250_tx_dma(struct uart_8250_port *p)
        if (dma->tx_err)
                dma->tx_err = 0;
 
-       if (p->ier & UART_IER_THRI) {
-               p->ier &= ~UART_IER_THRI;
-               serial_out(p, UART_IER, p->ier);
-       }
+       serial8250_clear_THRI(p);
        if (skip_byte)
                serial_out(p, UART_TX, xmit->buf[xmit->tail]);
        return 0;
index fdb6fd0843863a9497daab3b39523133eb001dfd..e0d66891d8dfb06bd72ed28beec979b60852504b 100644 (file)
@@ -1502,11 +1502,8 @@ static void __stop_tx_rs485(struct uart_8250_port *p)
 
 static inline void __do_stop_tx(struct uart_8250_port *p)
 {
-       if (p->ier & UART_IER_THRI) {
-               p->ier &= ~UART_IER_THRI;
-               serial_out(p, UART_IER, p->ier);
+       if (serial8250_clear_THRI(p))
                serial8250_rpm_put_tx(p);
-       }
 }
 
 static inline void __stop_tx(struct uart_8250_port *p)
@@ -1555,10 +1552,7 @@ static inline void __start_tx(struct uart_port *port)
        if (up->dma && !up->dma->tx_dma(up))
                return;
 
-       if (!(up->ier & UART_IER_THRI)) {
-               up->ier |= UART_IER_THRI;
-               serial_port_out(port, UART_IER, up->ier);
-
+       if (serial8250_set_THRI(up)) {
                if (up->bugs & UART_BUG_TXEN) {
                        unsigned char lsr;