lkml.org 
[lkml]   [2017]   [Nov]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 095/139] serial: efm32: Fix parity management in 'efm32_uart_console_get_options()'
    Date
    From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

    commit be40597a1bc173bf9dadccdf5388b956f620ae8f upstream.

    UARTn_FRAME_PARITY_ODD is 0x0300
    UARTn_FRAME_PARITY_EVEN is 0x0200
    So if the UART is configured for EVEN parity, it would be reported as ODD.
    Fix it by correctly testing if the 2 bits are set.

    Fixes: 3afbd89c9639 ("serial/efm32: add new driver")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>
    ---
    drivers/tty/serial/efm32-uart.c | 11 ++++++++---
    1 file changed, 8 insertions(+), 3 deletions(-)

    diff --git a/drivers/tty/serial/efm32-uart.c b/drivers/tty/serial/efm32-uart.c
    index 7d199c8..c9635f1 100644
    --- a/drivers/tty/serial/efm32-uart.c
    +++ b/drivers/tty/serial/efm32-uart.c
    @@ -27,6 +27,7 @@
    #define UARTn_FRAME 0x04
    #define UARTn_FRAME_DATABITS__MASK 0x000f
    #define UARTn_FRAME_DATABITS(n) ((n) - 3)
    +#define UARTn_FRAME_PARITY__MASK 0x0300
    #define UARTn_FRAME_PARITY_NONE 0x0000
    #define UARTn_FRAME_PARITY_EVEN 0x0200
    #define UARTn_FRAME_PARITY_ODD 0x0300
    @@ -578,12 +579,16 @@ static void efm32_uart_console_get_options(struct efm32_uart_port *efm_port,
    16 * (4 + (clkdiv >> 6)));

    frame = efm32_uart_read32(efm_port, UARTn_FRAME);
    - if (frame & UARTn_FRAME_PARITY_ODD)
    + switch (frame & UARTn_FRAME_PARITY__MASK) {
    + case UARTn_FRAME_PARITY_ODD:
    *parity = 'o';
    - else if (frame & UARTn_FRAME_PARITY_EVEN)
    + break;
    + case UARTn_FRAME_PARITY_EVEN:
    *parity = 'e';
    - else
    + break;
    + default:
    *parity = 'n';
    + }

    *bits = (frame & UARTn_FRAME_DATABITS__MASK) -
    UARTn_FRAME_DATABITS(4) + 4;
    --
    2.8.0.rc2.1.gbe9624a
    \
     
     \ /
      Last update: 2017-11-01 22:50    [W:4.421 / U:1.448 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site