Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be40597a authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Greg Kroah-Hartman
Browse files

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



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>
parent aee5da78
Loading
Loading
Loading
Loading
+8 −3
Original line number Original line Diff line number Diff line
@@ -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
@@ -572,12 +573,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;