aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/parport/parport_serial.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c
index 032db815b0f9..f3492110b1ad 100644
--- a/drivers/parport/parport_serial.c
+++ b/drivers/parport/parport_serial.c
@@ -30,6 +30,7 @@ enum parport_pc_pci_cards {
30 titan_210l, 30 titan_210l,
31 netmos_9xx5_combo, 31 netmos_9xx5_combo,
32 netmos_9855, 32 netmos_9855,
33 netmos_9855_2p,
33 avlab_1s1p, 34 avlab_1s1p,
34 avlab_1s2p, 35 avlab_1s2p,
35 avlab_2s1p, 36 avlab_2s1p,
@@ -62,7 +63,7 @@ struct parport_pc_pci {
62 struct parport_pc_pci *card, int failed); 63 struct parport_pc_pci *card, int failed);
63}; 64};
64 65
65static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *card, int autoirq, int autodma) 66static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *par, int autoirq, int autodma)
66{ 67{
67 /* the rule described below doesn't hold for this device */ 68 /* the rule described below doesn't hold for this device */
68 if (dev->device == PCI_DEVICE_ID_NETMOS_9835 && 69 if (dev->device == PCI_DEVICE_ID_NETMOS_9835 &&
@@ -74,9 +75,17 @@ static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc
74 * and serial ports. The form is 0x00PS, where <P> is the number of 75 * and serial ports. The form is 0x00PS, where <P> is the number of
75 * parallel ports and <S> is the number of serial ports. 76 * parallel ports and <S> is the number of serial ports.
76 */ 77 */
77 card->numports = (dev->subsystem_device & 0xf0) >> 4; 78 par->numports = (dev->subsystem_device & 0xf0) >> 4;
78 if (card->numports > ARRAY_SIZE(card->addr)) 79 if (par->numports > ARRAY_SIZE(par->addr))
79 card->numports = ARRAY_SIZE(card->addr); 80 par->numports = ARRAY_SIZE(par->addr);
81 /*
82 * This function is currently only called for cards with up to
83 * one parallel port.
84 * Parallel port BAR is either before or after serial ports BARS;
85 * hence, lo should be either 0 or equal to the number of serial ports.
86 */
87 if (par->addr[0].lo != 0)
88 par->addr[0].lo = dev->subsystem_device & 0xf;
80 return 0; 89 return 0;
81} 90}
82 91
@@ -84,7 +93,8 @@ static struct parport_pc_pci cards[] __devinitdata = {
84 /* titan_110l */ { 1, { { 3, -1 }, } }, 93 /* titan_110l */ { 1, { { 3, -1 }, } },
85 /* titan_210l */ { 1, { { 3, -1 }, } }, 94 /* titan_210l */ { 1, { { 3, -1 }, } },
86 /* netmos_9xx5_combo */ { 1, { { 2, -1 }, }, netmos_parallel_init }, 95 /* netmos_9xx5_combo */ { 1, { { 2, -1 }, }, netmos_parallel_init },
87 /* netmos_9855 */ { 1, { { 2, -1 }, }, netmos_parallel_init }, 96 /* netmos_9855 */ { 1, { { 0, -1 }, }, netmos_parallel_init },
97 /* netmos_9855_2p */ { 2, { { 0, -1 }, { 2, -1 }, } },
88 /* avlab_1s1p */ { 1, { { 1, 2}, } }, 98 /* avlab_1s1p */ { 1, { { 1, 2}, } },
89 /* avlab_1s2p */ { 2, { { 1, 2}, { 3, 4 },} }, 99 /* avlab_1s2p */ { 2, { { 1, 2}, { 3, 4 },} },
90 /* avlab_2s1p */ { 1, { { 2, 3}, } }, 100 /* avlab_2s1p */ { 1, { { 2, 3}, } },
@@ -110,6 +120,10 @@ static struct pci_device_id parport_serial_pci_tbl[] = {
110 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9845, 120 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9845,
111 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9xx5_combo }, 121 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9xx5_combo },
112 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855, 122 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855,
123 0x1000, 0x0020, 0, 0, netmos_9855_2p },
124 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855,
125 0x1000, 0x0022, 0, 0, netmos_9855_2p },
126 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855,
113 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9855 }, 127 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9855 },
114 /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/ 128 /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
115 { PCI_VENDOR_ID_AFAVLAB, 0x2110, 129 { PCI_VENDOR_ID_AFAVLAB, 0x2110,
@@ -192,6 +206,12 @@ static struct pciserial_board pci_parport_serial_boards[] __devinitdata = {
192 .uart_offset = 8, 206 .uart_offset = 8,
193 }, 207 },
194 [netmos_9855] = { 208 [netmos_9855] = {
209 .flags = FL_BASE2 | FL_BASE_BARS,
210 .num_ports = 1,
211 .base_baud = 115200,
212 .uart_offset = 8,
213 },
214 [netmos_9855_2p] = {
195 .flags = FL_BASE4 | FL_BASE_BARS, 215 .flags = FL_BASE4 | FL_BASE_BARS,
196 .num_ports = 1, 216 .num_ports = 1,
197 .base_baud = 115200, 217 .base_baud = 115200,