> 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