aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjorn Helgaas <bjorn.helgaas@hp.com>2005-10-24 17:11:57 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2005-10-24 17:11:57 -0400
commitadd7b58e7558dd2894f3c17ca8574099fcba5c15 (patch)
treec9f5b250f8b1df7476d6fb36e311dc0b4bf5c005
parentd5c5d8fe32a4b9b14363c6031061e98e26da59a2 (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.c25
-rw-r--r--include/linux/pci_ids.h1
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