diff options
author | Thomas Hoehn <thomas.hoehn@avocent.com> | 2007-02-10 04:46:05 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-11 13:51:33 -0500 |
commit | 482120084d843d4cbb7ff3eb84510a1471130ce0 (patch) | |
tree | 22943ce8e09319530a1acf84a397a7b1f6dbea6f /drivers | |
parent | a21217daae8ce6e841e33d4a2bb24026723cb21d (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.c | 8 | ||||
-rw-r--r-- | drivers/serial/8250_pci.c | 16 |
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 | */ |