diff options
-rw-r--r-- | drivers/parport/parport_serial.c | 30 |
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 | ||
65 | static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *card, int autoirq, int autodma) | 66 | static 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, |