diff options
| -rw-r--r-- | drivers/tty/serial/8250/8250_port.c | 38 | 
1 files changed, 20 insertions, 18 deletions
| diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index 3a8747ec672b..1311b00f8194 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -336,27 +336,29 @@ static void default_serial_dl_write(struct uart_8250_port *up, int value)  #ifdef CONFIG_SERIAL_8250_RT288X +#define UART_REG_UNMAPPED	-1 +  /* Au1x00/RT288x UART hardware has a weird register layout */  static const s8 au_io_in_map[8] = { -	 0,	/* UART_RX  */ -	 2,	/* UART_IER */ -	 3,	/* UART_IIR */ -	 5,	/* UART_LCR */ -	 6,	/* UART_MCR */ -	 7,	/* UART_LSR */ -	 8,	/* UART_MSR */ -	-1,	/* UART_SCR (unmapped) */ +	[UART_RX]	= 0, +	[UART_IER]	= 2, +	[UART_IIR]	= 3, +	[UART_LCR]	= 5, +	[UART_MCR]	= 6, +	[UART_LSR]	= 7, +	[UART_MSR]	= 8, +	[UART_SCR]	= UART_REG_UNMAPPED,  };  static const s8 au_io_out_map[8] = { -	 1,	/* UART_TX  */ -	 2,	/* UART_IER */ -	 4,	/* UART_FCR */ -	 5,	/* UART_LCR */ -	 6,	/* UART_MCR */ -	-1,	/* UART_LSR (unmapped) */ -	-1,	/* UART_MSR (unmapped) */ -	-1,	/* UART_SCR (unmapped) */ +	[UART_TX]	= 1, +	[UART_IER]	= 2, +	[UART_FCR]	= 4, +	[UART_LCR]	= 5, +	[UART_MCR]	= 6, +	[UART_LSR]	= UART_REG_UNMAPPED, +	[UART_MSR]	= UART_REG_UNMAPPED, +	[UART_SCR]	= UART_REG_UNMAPPED,  };  unsigned int au_serial_in(struct uart_port *p, int offset) @@ -364,7 +366,7 @@ unsigned int au_serial_in(struct uart_port *p, int offset)  	if (offset >= ARRAY_SIZE(au_io_in_map))  		return UINT_MAX;  	offset = au_io_in_map[offset]; -	if (offset < 0) +	if (offset == UART_REG_UNMAPPED)  		return UINT_MAX;  	return __raw_readl(p->membase + (offset << p->regshift));  } @@ -374,7 +376,7 @@ void au_serial_out(struct uart_port *p, int offset, int value)  	if (offset >= ARRAY_SIZE(au_io_out_map))  		return;  	offset = au_io_out_map[offset]; -	if (offset < 0) +	if (offset == UART_REG_UNMAPPED)  		return;  	__raw_writel(value, p->membase + (offset << p->regshift));  } |