* [PATCH] serial: Detect XR16C2852 UARTs correctly
@ 2008-12-30 13:39 Matthias Fuchs
2009-02-09 7:35 ` Matthias Fuchs
0 siblings, 1 reply; 2+ messages in thread
From: Matthias Fuchs @ 2008-12-30 13:39 UTC (permalink / raw)
To: linux-serial
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@ma-fu.de>
---
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;
}
/*
--
1.5.6.3
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] serial: Detect XR16C2852 UARTs correctly
2008-12-30 13:39 [PATCH] serial: Detect XR16C2852 UARTs correctly Matthias Fuchs
@ 2009-02-09 7:35 ` Matthias Fuchs
0 siblings, 0 replies; 2+ messages in thread
From: Matthias Fuchs @ 2009-02-09 7:35 UTC (permalink / raw)
To: linux-serial
> 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@ma-fu.de>
> ---
> 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
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-02-09 7:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-30 13:39 [PATCH] serial: Detect XR16C2852 UARTs correctly Matthias Fuchs
2009-02-09 7:35 ` Matthias Fuchs
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox