serial: sirf: add uart receive's some error counter and mark
authorQipan Li <Qipan.Li@csr.com>
Thu, 14 May 2015 06:45:24 +0000 (06:45 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 24 May 2015 19:50:41 +0000 (12:50 -0700)
add overrun error's flag mark and parity's counter, we can show the
statistic from procfs node.

BTW, let the indentation of stick bits configuration look better.

Signed-off-by: Qipan Li <Qipan.Li@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/sirfsoc_uart.c

index ffeb7663bd6e863809f458a94c573ce7b7ed3e8e..a5007216338d0229470407ee774f3f389d966955 100644 (file)
@@ -606,14 +606,18 @@ static irqreturn_t sirfsoc_uart_isr(int irq, void *dev_id)
                        if (uart_handle_break(port))
                                goto recv_char;
                }
-               if (intr_status & uint_st->sirfsoc_rx_oflow)
+               if (intr_status & uint_st->sirfsoc_rx_oflow) {
                        port->icount.overrun++;
+                       flag = TTY_OVERRUN;
+               }
                if (intr_status & uint_st->sirfsoc_frm_err) {
                        port->icount.frame++;
                        flag = TTY_FRAME;
                }
-               if (intr_status & uint_st->sirfsoc_parity_err)
+               if (intr_status & uint_st->sirfsoc_parity_err) {
+                       port->icount.parity++;
                        flag = TTY_PARITY;
+               }
                wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_RESET);
                wr_regl(port, ureg->sirfsoc_rx_fifo_op, 0);
                wr_regl(port, ureg->sirfsoc_rx_fifo_op, SIRFUART_FIFO_START);
@@ -932,10 +936,11 @@ static void sirfsoc_uart_set_termios(struct uart_port *port,
                                        config_reg |= SIRFUART_STICK_BIT_MARK;
                                else
                                        config_reg |= SIRFUART_STICK_BIT_SPACE;
-                       } else if (termios->c_cflag & PARODD) {
-                               config_reg |= SIRFUART_STICK_BIT_ODD;
                        } else {
-                               config_reg |= SIRFUART_STICK_BIT_EVEN;
+                               if (termios->c_cflag & PARODD)
+                                       config_reg |= SIRFUART_STICK_BIT_ODD;
+                               else
+                                       config_reg |= SIRFUART_STICK_BIT_EVEN;
                        }
                }
        } else {