Commit 4d0d6098 authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Ben Hutchings

serial: efm32: Fix parity management in 'efm32_uart_console_get_options()'

commit be40597a 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: 3afbd89c ("serial/efm32: add new driver")
Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Acked-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent 87171037
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#define UARTn_FRAME 0x04 #define UARTn_FRAME 0x04
#define UARTn_FRAME_DATABITS__MASK 0x000f #define UARTn_FRAME_DATABITS__MASK 0x000f
#define UARTn_FRAME_DATABITS(n) ((n) - 3) #define UARTn_FRAME_DATABITS(n) ((n) - 3)
#define UARTn_FRAME_PARITY__MASK 0x0300
#define UARTn_FRAME_PARITY_NONE 0x0000 #define UARTn_FRAME_PARITY_NONE 0x0000
#define UARTn_FRAME_PARITY_EVEN 0x0200 #define UARTn_FRAME_PARITY_EVEN 0x0200
#define UARTn_FRAME_PARITY_ODD 0x0300 #define UARTn_FRAME_PARITY_ODD 0x0300
...@@ -578,12 +579,16 @@ static void efm32_uart_console_get_options(struct efm32_uart_port *efm_port, ...@@ -578,12 +579,16 @@ static void efm32_uart_console_get_options(struct efm32_uart_port *efm_port,
16 * (4 + (clkdiv >> 6))); 16 * (4 + (clkdiv >> 6)));
frame = efm32_uart_read32(efm_port, UARTn_FRAME); 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'; *parity = 'o';
else if (frame & UARTn_FRAME_PARITY_EVEN) break;
case UARTn_FRAME_PARITY_EVEN:
*parity = 'e'; *parity = 'e';
else break;
default:
*parity = 'n'; *parity = 'n';
}
*bits = (frame & UARTn_FRAME_DATABITS__MASK) - *bits = (frame & UARTn_FRAME_DATABITS__MASK) -
UARTn_FRAME_DATABITS(4) + 4; UARTn_FRAME_DATABITS(4) + 4;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment