These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / tty / serial / samsung.c
index 1e0d9b8..d72cd73 100644 (file)
@@ -53,7 +53,6 @@
 #include "samsung.h"
 
 #if    defined(CONFIG_SERIAL_SAMSUNG_DEBUG) && \
-       defined(CONFIG_DEBUG_LL) &&             \
        !defined(MODULE)
 
 extern void printascii(const char *);
@@ -341,7 +340,7 @@ static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport)
                s3c24xx_serial_start_tx_dma(ourport, count);
 }
 
-void s3c24xx_serial_start_tx(struct uart_port *port)
+static void s3c24xx_serial_start_tx(struct uart_port *port)
 {
        struct s3c24xx_uart_port *ourport = to_ourport(port);
        struct circ_buf *xmit = &port->state->xmit;
@@ -386,32 +385,6 @@ static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport,
        }
 }
 
-static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport,
-                                    unsigned long ufstat);
-
-static void uart_rx_drain_fifo(struct s3c24xx_uart_port *ourport)
-{
-       struct uart_port *port = &ourport->port;
-       struct tty_port *tty = &port->state->port;
-       unsigned int ch, ufstat;
-       unsigned int count;
-
-       ufstat = rd_regl(port, S3C2410_UFSTAT);
-       count = s3c24xx_serial_rx_fifocnt(ourport, ufstat);
-
-       if (!count)
-               return;
-
-       while (count-- > 0) {
-               ch = rd_regb(port, S3C2410_URXH);
-
-               ourport->port.icount.rx++;
-               tty_insert_flip_char(tty, ch, TTY_NORMAL);
-       }
-
-       tty_flip_buffer_push(tty);
-}
-
 static void s3c24xx_serial_stop_rx(struct uart_port *port)
 {
        struct s3c24xx_uart_port *ourport = to_ourport(port);
@@ -574,7 +547,9 @@ static void enable_rx_pio(struct s3c24xx_uart_port *ourport)
        ourport->rx_mode = S3C24XX_RX_PIO;
 }
 
-static irqreturn_t s3c24xx_serial_rx_chars_dma(int irq, void *dev_id)
+static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport);
+
+static irqreturn_t s3c24xx_serial_rx_chars_dma(void *dev_id)
 {
        unsigned int utrstat, ufstat, received;
        struct s3c24xx_uart_port *ourport = dev_id;
@@ -607,7 +582,7 @@ static irqreturn_t s3c24xx_serial_rx_chars_dma(int irq, void *dev_id)
                enable_rx_pio(ourport);
        }
 
-       uart_rx_drain_fifo(ourport);
+       s3c24xx_serial_rx_drain_fifo(ourport);
 
        if (tty) {
                tty_flip_buffer_push(t);
@@ -622,16 +597,12 @@ finish:
        return IRQ_HANDLED;
 }
 
-static irqreturn_t s3c24xx_serial_rx_chars_pio(int irq, void *dev_id)
+static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport)
 {
-       struct s3c24xx_uart_port *ourport = dev_id;
        struct uart_port *port = &ourport->port;
        unsigned int ufcon, ch, flag, ufstat, uerstat;
-       unsigned long flags;
        int max_count = port->fifosize;
 
-       spin_lock_irqsave(&port->lock, flags);
-
        while (max_count-- > 0) {
                ufcon = rd_regl(port, S3C2410_UFCON);
                ufstat = rd_regl(port, S3C2410_UFSTAT);
@@ -655,9 +626,7 @@ static irqreturn_t s3c24xx_serial_rx_chars_pio(int irq, void *dev_id)
                                        ufcon |= S3C2410_UFCON_RESETRX;
                                        wr_regl(port, S3C2410_UFCON, ufcon);
                                        rx_enabled(port) = 1;
-                                       spin_unlock_irqrestore(&port->lock,
-                                                       flags);
-                                       goto out;
+                                       return;
                                }
                                continue;
                        }
@@ -677,7 +646,7 @@ static irqreturn_t s3c24xx_serial_rx_chars_pio(int irq, void *dev_id)
                                dbg("break!\n");
                                port->icount.brk++;
                                if (uart_handle_break(port))
-                                       goto ignore_char;
+                                       continue; /* Ignore character */
                        }
 
                        if (uerstat & S3C2410_UERSTAT_FRAME)
@@ -697,19 +666,25 @@ static irqreturn_t s3c24xx_serial_rx_chars_pio(int irq, void *dev_id)
                }
 
                if (uart_handle_sysrq_char(port, ch))
-                       goto ignore_char;
+                       continue; /* Ignore character */
 
                uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN,
                                 ch, flag);
-
-ignore_char:
-               continue;
        }
 
-       spin_unlock_irqrestore(&port->lock, flags);
        tty_flip_buffer_push(&port->state->port);
+}
+
+static irqreturn_t s3c24xx_serial_rx_chars_pio(void *dev_id)
+{
+       struct s3c24xx_uart_port *ourport = dev_id;
+       struct uart_port *port = &ourport->port;
+       unsigned long flags;
+
+       spin_lock_irqsave(&port->lock, flags);
+       s3c24xx_serial_rx_drain_fifo(ourport);
+       spin_unlock_irqrestore(&port->lock, flags);
 
-out:
        return IRQ_HANDLED;
 }
 
@@ -719,8 +694,8 @@ static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id)
        struct s3c24xx_uart_port *ourport = dev_id;
 
        if (ourport->dma && ourport->dma->rx_chan)
-               return s3c24xx_serial_rx_chars_dma(irq, dev_id);
-       return s3c24xx_serial_rx_chars_pio(irq, dev_id);
+               return s3c24xx_serial_rx_chars_dma(dev_id);
+       return s3c24xx_serial_rx_chars_pio(dev_id);
 }
 
 static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
@@ -2352,7 +2327,7 @@ static struct s3c24xx_serial_drv_data exynos5433_serial_drv_data = {
 #define EXYNOS5433_SERIAL_DRV_DATA (kernel_ulong_t)NULL
 #endif
 
-static struct platform_device_id s3c24xx_serial_driver_ids[] = {
+static const struct platform_device_id s3c24xx_serial_driver_ids[] = {
        {
                .name           = "s3c2410-uart",
                .driver_data    = S3C2410_SERIAL_DRV_DATA,