All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Howells <dhowells@redhat.com>
To: Russell King <rmk@arm.linux.org.uk>
Cc: linux-kernel@vger.kernel.org
Subject: 16552 UART detection
Date: Wed, 10 Mar 2004 14:29:35 +0000	[thread overview]
Message-ID: <20321.1078928975@redhat.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 466 bytes --]


Hi Russell,

Would something like the following be a reasonable way of detecting a NatSemi
PC16552 UART?:

	if type == 16650A
	then
		set LCR.DLAB to 1
		if EFR bits 7-3 are 0
		then
			set EFR to 0xff
			if EFR == 0x07
			then
				set type to 16552
				set EFR to 0
			fi
		else
			restore EFR to previous value
		fi
	fi

This needs to be inserted before the test for the StarTech ST16650.

I've implemented by the attached patch against a 2.4.18 kernel.

David



[-- Attachment #2: serial-16652.patch --]
[-- Type: application/octet-stream, Size: 1633 bytes --]

Index: drivers/char/serial.c
===================================================================
RCS file: /home/cvs/linux-am33-2.4.18/drivers/char/serial.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 serial.c
--- drivers/char/serial.c	8 May 2002 12:07:55 -0000	1.1.1.1
+++ drivers/char/serial.c	10 Mar 2004 13:48:32 -0000
@@ -312,6 +312,7 @@
 	{ "XR16850", 128, UART_CLEAR_FIFO | UART_USE_FIFO |
 		  UART_STARTECH },
 	{ "RSA", 2048, UART_CLEAR_FIFO | UART_USE_FIFO }, 
+	{ "16552", 16, UART_CLEAR_FIFO | UART_USE_FIFO }, 
 	{ 0, 0}
 };
 
@@ -3739,6 +3740,19 @@
 		case 3:
 			state->type = PORT_16550A;
 			break;
+	}
+	if (state->type == PORT_16550A) {
+		/* check for half of an NS 16552 */
+		serial_outp(info, UART_LCR, UART_LCR_DLAB);
+		scratch = serial_in(info, UART_EFR);
+		if ((scratch & ~7) == 0) {
+			serial_outp(info, UART_EFR, 0xff);
+			if (serial_in(info, UART_EFR) == 7) {
+				state->type = PORT_16552;
+				scratch = 0;
+			}
+			serial_outp(info, UART_EFR, scratch);
+		}
 	}
 	if (state->type == PORT_16550A) {
 		/* Check for Startech UART's */
Index: include/linux/serial.h
===================================================================
RCS file: /home/cvs/linux-am33-2.4.18/include/linux/serial.h,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 serial.h
--- include/linux/serial.h	8 May 2002 12:11:50 -0000	1.1.1.1
+++ include/linux/serial.h	10 Mar 2004 13:48:10 -0000
@@ -75,7 +75,8 @@
 #define PORT_16654	11
 #define PORT_16850	12
 #define PORT_RSA	13	/* RSA-DV II/S card */
-#define PORT_MAX	13
+#define PORT_16552	14
+#define PORT_MAX	14
 
 #define SERIAL_IO_PORT	0
 #define SERIAL_IO_HUB6	1

                 reply	other threads:[~2004-03-10 14:30 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20321.1078928975@redhat.com \
    --to=dhowells@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rmk@arm.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.