diff options
author | Bjorn Helgaas <bjorn.helgaas@hp.com> | 2005-10-24 17:11:57 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2005-10-24 17:11:57 -0400 |
commit | add7b58e7558dd2894f3c17ca8574099fcba5c15 (patch) | |
tree | c9f5b250f8b1df7476d6fb36e311dc0b4bf5c005 | |
parent | d5c5d8fe32a4b9b14363c6031061e98e26da59a2 (diff) |
[SERIAL] support the Exsys EX-4055 4S four-port card
Tested by Wolfgang Denk with this device:
00:0f.0 Network controller: PLX Technology, Inc. PCI <-> IOBus Bridge (rev 01)
Subsystem: Exsys EX-4055 4S(16C550) RS-232
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin A routed to IRQ 10
Region 0: Memory at 80100000 (32-bit, non-prefetchable) [size=128]
Region 1: I/O ports at 7080 [size=128]
Region 2: I/O ports at 7400 [size=32]
00:0f.0 Class 0280: 10b5:9050 (rev 01)
Subsystem: d84d:4055
Results with this patch:
Serial: 8250/16550 driver $Revision: 1.90 $ 32 ports, IRQ sharing enabled
ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
PCI: Found IRQ 10 for device 0000:00:0f.0
ttyS4 at I/O 0x7400 (irq = 10) is a 16550A
ttyS5 at I/O 0x7408 (irq = 10) is a 16550A
ttyS6 at I/O 0x7410 (irq = 10) is a 16550A
ttyS7 at I/O 0x7418 (irq = 10) is a 16550A
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | drivers/serial/8250_pci.c | 25 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 1 |
2 files changed, 25 insertions, 1 deletions
diff --git a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c index 0e21f583690e..5da61ebbac88 100644 --- a/drivers/serial/8250_pci.c +++ b/drivers/serial/8250_pci.c | |||
@@ -226,8 +226,10 @@ static int __devinit pci_plx9050_init(struct pci_dev *dev) | |||
226 | } | 226 | } |
227 | 227 | ||
228 | irq_config = 0x41; | 228 | irq_config = 0x41; |
229 | if (dev->vendor == PCI_VENDOR_ID_PANACOM) | 229 | if (dev->vendor == PCI_VENDOR_ID_PANACOM || |
230 | dev->subsystem_vendor == PCI_SUBVENDOR_ID_EXSYS) { | ||
230 | irq_config = 0x43; | 231 | irq_config = 0x43; |
232 | } | ||
231 | if ((dev->vendor == PCI_VENDOR_ID_PLX) && | 233 | if ((dev->vendor == PCI_VENDOR_ID_PLX) && |
232 | (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) { | 234 | (dev->device == PCI_DEVICE_ID_PLX_ROMULUS)) { |
233 | /* | 235 | /* |
@@ -664,6 +666,15 @@ static struct pci_serial_quirk pci_serial_quirks[] = { | |||
664 | { | 666 | { |
665 | .vendor = PCI_VENDOR_ID_PLX, | 667 | .vendor = PCI_VENDOR_ID_PLX, |
666 | .device = PCI_DEVICE_ID_PLX_9050, | 668 | .device = PCI_DEVICE_ID_PLX_9050, |
669 | .subvendor = PCI_SUBVENDOR_ID_EXSYS, | ||
670 | .subdevice = PCI_SUBDEVICE_ID_EXSYS_4055, | ||
671 | .init = pci_plx9050_init, | ||
672 | .setup = pci_default_setup, | ||
673 | .exit = __devexit_p(pci_plx9050_exit), | ||
674 | }, | ||
675 | { | ||
676 | .vendor = PCI_VENDOR_ID_PLX, | ||
677 | .device = PCI_DEVICE_ID_PLX_9050, | ||
667 | .subvendor = PCI_SUBVENDOR_ID_KEYSPAN, | 678 | .subvendor = PCI_SUBVENDOR_ID_KEYSPAN, |
668 | .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2, | 679 | .subdevice = PCI_SUBDEVICE_ID_KEYSPAN_SX2, |
669 | .init = pci_plx9050_init, | 680 | .init = pci_plx9050_init, |
@@ -927,6 +938,7 @@ enum pci_board_num_t { | |||
927 | pbn_panacom, | 938 | pbn_panacom, |
928 | pbn_panacom2, | 939 | pbn_panacom2, |
929 | pbn_panacom4, | 940 | pbn_panacom4, |
941 | pbn_exsys_4055, | ||
930 | pbn_plx_romulus, | 942 | pbn_plx_romulus, |
931 | pbn_oxsemi, | 943 | pbn_oxsemi, |
932 | pbn_intel_i960, | 944 | pbn_intel_i960, |
@@ -1292,6 +1304,13 @@ static struct pciserial_board pci_boards[] __devinitdata = { | |||
1292 | .reg_shift = 7, | 1304 | .reg_shift = 7, |
1293 | }, | 1305 | }, |
1294 | 1306 | ||
1307 | [pbn_exsys_4055] = { | ||
1308 | .flags = FL_BASE2, | ||
1309 | .num_ports = 4, | ||
1310 | .base_baud = 115200, | ||
1311 | .uart_offset = 8, | ||
1312 | }, | ||
1313 | |||
1295 | /* I think this entry is broken - the first_offset looks wrong --rmk */ | 1314 | /* I think this entry is broken - the first_offset looks wrong --rmk */ |
1296 | [pbn_plx_romulus] = { | 1315 | [pbn_plx_romulus] = { |
1297 | .flags = FL_BASE2, | 1316 | .flags = FL_BASE2, |
@@ -1853,6 +1872,10 @@ static struct pci_device_id serial_pci_tbl[] = { | |||
1853 | PCI_SUBVENDOR_ID_CHASE_PCIRAS, | 1872 | PCI_SUBVENDOR_ID_CHASE_PCIRAS, |
1854 | PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, | 1873 | PCI_SUBDEVICE_ID_CHASE_PCIRAS8, 0, 0, |
1855 | pbn_b2_8_460800 }, | 1874 | pbn_b2_8_460800 }, |
1875 | { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, | ||
1876 | PCI_SUBVENDOR_ID_EXSYS, | ||
1877 | PCI_SUBDEVICE_ID_EXSYS_4055, 0, 0, | ||
1878 | pbn_exsys_4055 }, | ||
1856 | /* | 1879 | /* |
1857 | * Megawolf Romulus PCI Serial Card, from Mike Hudson | 1880 | * Megawolf Romulus PCI Serial Card, from Mike Hudson |
1858 | * (Exoray@isys.ca) | 1881 | * (Exoray@isys.ca) |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index f74ed9462475..ca0691c319ab 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -2696,6 +2696,7 @@ | |||
2696 | 2696 | ||
2697 | #define PCI_SUBVENDOR_ID_EXSYS 0xd84d | 2697 | #define PCI_SUBVENDOR_ID_EXSYS 0xd84d |
2698 | #define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 | 2698 | #define PCI_SUBDEVICE_ID_EXSYS_4014 0x4014 |
2699 | #define PCI_SUBDEVICE_ID_EXSYS_4055 0x4055 | ||
2699 | 2700 | ||
2700 | #define PCI_VENDOR_ID_TIGERJET 0xe159 | 2701 | #define PCI_VENDOR_ID_TIGERJET 0xe159 |
2701 | #define PCI_DEVICE_ID_TIGERJET_300 0x0001 | 2702 | #define PCI_DEVICE_ID_TIGERJET_300 0x0001 |