Re: [PATCH] serial: Detect XR16C2852 UARTs correctly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> Without this patch Exar XR16C2852 UARTs are detected
> as Motorola 8xxx DUARTs (16550A compatible).
> 
> By checking the fifo size it is possible to
> continue probing for the correct UART type.
> 
> Signed-off-by: Matthias Fuchs <mfuchs@xxxxxxxx>
> ---
>  drivers/serial/8250.c |   22 +++++++++++++++++++---
>  1 files changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
> index 303272a..ec27086 100644
> --- a/drivers/serial/8250.c
> +++ b/drivers/serial/8250.c
> @@ -782,7 +782,7 @@ static void autoconfig_has_efr(struct uart_8250_port *up)
>  	 * reading back DLL and DLM.  The chip type depends on the DLM
>  	 * value read back:
>  	 *  0x10 - XR16C850 and the DLL contains the chip revision.
> -	 *  0x12 - XR16C2850.
> +	 *  0x12 - XR16C2850 + XR16C2852.
>  	 *  0x14 - XR16C854.
>  	 */
>  	id1 = autoconfig_read_divisor_id(up);
> @@ -869,11 +869,27 @@ static void autoconfig_16550a(struct uart_8250_port *up)
>  			DEBUG_AUTOCONF("EFRv1 ");
>  			up->port.type = PORT_16650;
>  			up->capabilities |= UART_CAP_EFR | UART_CAP_SLEEP;
> +			serial_outp(up, UART_EFR, 0);
> +			return;
>  		} else {
> -			DEBUG_AUTOCONF("Motorola 8xxx DUART ");
> +			int sf = size_fifo(up);
> +			DEBUG_AUTOCONF("sf=%d ", sf);
> +			/*
> +			 * This fifo size check is needed to detect
> +			 * Exar XR16C2852 UARTs later on.
> +			 * These devices have an AFR register at
> +			 * UART_EFR's address with LCR_DLAB set.
> +			 * Because of thier 128 byte fifo we can
> +			 * skip this point of return and let
> +			 * autoconfig_has_efr() detect them later.
> +			 */
> +			if (sf != 128) {
> +				DEBUG_AUTOCONF("Motorola 8xxx DUART ");
> +				serial_outp(up, UART_EFR, 0);
> +				return;
> +			}
>  		}
>  		serial_outp(up, UART_EFR, 0);
> -		return;
>  	}
>  
>  	/*
Did any body go over my above patch from December?

Matthias
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux