aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorThomas Hoehn <thomas.hoehn@avocent.com>2007-02-10 04:46:05 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-11 13:51:33 -0500
commit482120084d843d4cbb7ff3eb84510a1471130ce0 (patch)
tree22943ce8e09319530a1acf84a397a7b1f6dbea6f /drivers
parenta21217daae8ce6e841e33d4a2bb24026723cb21d (diff)
[PATCH] Perle multimodem card (PCI-RAS) detection
Get the Perle quad-modem PCI card (PCI-RAS4) detected by serial driver. It may also get the PCI-RAS8 running, but can't guarantee as I didn't had one for testing. Signed-off-by: Thomas Hoehn <thomas.hoehn@avocent.com> Cc: Russell King <rmk@arm.linux.org.uk> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/serial/8250.c8
-rw-r--r--drivers/serial/8250_pci.c16
2 files changed, 22 insertions, 2 deletions
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
index 5261f0af8b10..2964ca9df5a0 100644
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -920,12 +920,16 @@ static void autoconfig(struct uart_8250_port *up, unsigned int probeflags)
920#ifdef __i386__ 920#ifdef __i386__
921 outb(0xff, 0x080); 921 outb(0xff, 0x080);
922#endif 922#endif
923 scratch2 = serial_inp(up, UART_IER); 923 /*
924 * Mask out IER[7:4] bits for test as some UARTs (e.g. TL
925 * 16C754B) allow only to modify them if an EFR bit is set.
926 */
927 scratch2 = serial_inp(up, UART_IER) & 0x0f;
924 serial_outp(up, UART_IER, 0x0F); 928 serial_outp(up, UART_IER, 0x0F);
925#ifdef __i386__ 929#ifdef __i386__
926 outb(0, 0x080); 930 outb(0, 0x080);
927#endif 931#endif
928 scratch3 = serial_inp(up, UART_IER); 932 scratch3 = serial_inp(up, UART_IER) & 0x0f;
929 serial_outp(up, UART_IER, scratch); 933 serial_outp(up, UART_IER, scratch);
930 if (scratch2 != 0 || scratch3 != 0x0F) { 934 if (scratch2 != 0 || scratch3 != 0x0F) {
931 /* 935 /*
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
index 52e2e64c6649..5dfaa0926cfd 100644
--- a/drivers/serial/8250_pci.c
+++ b/drivers/serial/8250_pci.c
@@ -679,6 +679,13 @@ static struct pci_serial_quirk pci_serial_quirks[] = {
679 */ 679 */
680 { 680 {
681 .vendor = PCI_VENDOR_ID_PLX, 681 .vendor = PCI_VENDOR_ID_PLX,
682 .device = PCI_DEVICE_ID_PLX_9030,
683 .subvendor = PCI_SUBVENDOR_ID_PERLE,
684 .subdevice = PCI_ANY_ID,
685 .setup = pci_default_setup,
686 },
687 {
688 .vendor = PCI_VENDOR_ID_PLX,
682 .device = PCI_DEVICE_ID_PLX_9050, 689 .device = PCI_DEVICE_ID_PLX_9050,
683 .subvendor = PCI_SUBVENDOR_ID_EXSYS, 690 .subvendor = PCI_SUBVENDOR_ID_EXSYS,
684 .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055, 691 .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055,
@@ -2379,6 +2386,15 @@ static struct pci_device_id serial_pci_tbl[] = {
2379 pbn_b2_2_115200 }, 2386 pbn_b2_2_115200 },
2380 2387
2381 /* 2388 /*
2389 * Perle PCI-RAS cards
2390 */
2391 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2392 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS4,
2393 0, 0, pbn_b2_4_921600 },
2394 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
2395 PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS8,
2396 0, 0, pbn_b2_8_921600 },
2397 /*
2382 * These entries match devices with class COMMUNICATION_SERIAL, 2398 * These entries match devices with class COMMUNICATION_SERIAL,
2383 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL 2399 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
2384 */ 2400 */