aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/parport
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-07-26 02:09:27 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-07-26 02:09:27 -0400
commitd5ef642355bdd9b383ff5c18cbc6102a06eecbaf (patch)
treefcf78d33c1790c6c24efbfd0c3695f7874f053d7 /drivers/parport
parentf549953c15deab4c54708b39af86d4edecc6cddc (diff)
parentdef90f4239f094f3846c108c1c41a4cd55c33e8e (diff)
Merge branch 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6
* 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6: (26 commits) amba pl011: workaround for uart registers lockup n_gsm: fix the wrong FCS handling pch_uart: add missing comment about OKI ML7223 pch_uart: Add MSI support tty: fix "IRQ45: nobody cared" PTI feature to allow user to name and mark masterchannel request. 0 for o PTI Makefile bug. tty: serial: samsung.c remove legacy PM code. SERIAL: SC26xx: Fix link error. serial: mrst_max3110: initialize waitqueue earlier mrst_max3110: Change max missing message priority. tty: s5pv210: Add delay loop on fifo reset function for UART tty/serial: Fix XSCALE serial ports, e.g. ce4100 serial: bfin_5xx: fix off-by-one with resource size drivers/tty: use printk_ratelimited() instead of printk_ratelimit() tty: n_gsm: Added refcount usage to gsm_mux and gsm_dlci structs tty: n_gsm: Add raw-ip support tty: n_gsm: expose gsmtty device nodes at ldisc open time pch_phub: Fix register miss-setting issue serial: 8250, increase PASS_LIMIT ...
Diffstat (limited to 'drivers/parport')
-rw-r--r--drivers/parport/parport_pc.c54
-rw-r--r--drivers/parport/parport_serial.c229
2 files changed, 213 insertions, 70 deletions
diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
index f330338c2f22..d1cdb9449f84 100644
--- a/drivers/parport/parport_pc.c
+++ b/drivers/parport/parport_pc.c
@@ -2864,24 +2864,6 @@ enum parport_pc_pci_cards {
2864 lava_parallel_dual_b, 2864 lava_parallel_dual_b,
2865 boca_ioppar, 2865 boca_ioppar,
2866 plx_9050, 2866 plx_9050,
2867 timedia_4078a,
2868 timedia_4079h,
2869 timedia_4085h,
2870 timedia_4088a,
2871 timedia_4089a,
2872 timedia_4095a,
2873 timedia_4096a,
2874 timedia_4078u,
2875 timedia_4079a,
2876 timedia_4085u,
2877 timedia_4079r,
2878 timedia_4079s,
2879 timedia_4079d,
2880 timedia_4079e,
2881 timedia_4079f,
2882 timedia_9079a,
2883 timedia_9079b,
2884 timedia_9079c,
2885 timedia_4006a, 2867 timedia_4006a,
2886 timedia_4014, 2868 timedia_4014,
2887 timedia_4008a, 2869 timedia_4008a,
@@ -2940,24 +2922,6 @@ static struct parport_pc_pci {
2940 /* lava_parallel_dual_b */ { 1, { { 0, -1 }, } }, 2922 /* lava_parallel_dual_b */ { 1, { { 0, -1 }, } },
2941 /* boca_ioppar */ { 1, { { 0, -1 }, } }, 2923 /* boca_ioppar */ { 1, { { 0, -1 }, } },
2942 /* plx_9050 */ { 2, { { 4, -1 }, { 5, -1 }, } }, 2924 /* plx_9050 */ { 2, { { 4, -1 }, { 5, -1 }, } },
2943 /* timedia_4078a */ { 1, { { 2, -1 }, } },
2944 /* timedia_4079h */ { 1, { { 2, 3 }, } },
2945 /* timedia_4085h */ { 2, { { 2, -1 }, { 4, -1 }, } },
2946 /* timedia_4088a */ { 2, { { 2, 3 }, { 4, 5 }, } },
2947 /* timedia_4089a */ { 2, { { 2, 3 }, { 4, 5 }, } },
2948 /* timedia_4095a */ { 2, { { 2, 3 }, { 4, 5 }, } },
2949 /* timedia_4096a */ { 2, { { 2, 3 }, { 4, 5 }, } },
2950 /* timedia_4078u */ { 1, { { 2, -1 }, } },
2951 /* timedia_4079a */ { 1, { { 2, 3 }, } },
2952 /* timedia_4085u */ { 2, { { 2, -1 }, { 4, -1 }, } },
2953 /* timedia_4079r */ { 1, { { 2, 3 }, } },
2954 /* timedia_4079s */ { 1, { { 2, 3 }, } },
2955 /* timedia_4079d */ { 1, { { 2, 3 }, } },
2956 /* timedia_4079e */ { 1, { { 2, 3 }, } },
2957 /* timedia_4079f */ { 1, { { 2, 3 }, } },
2958 /* timedia_9079a */ { 1, { { 2, 3 }, } },
2959 /* timedia_9079b */ { 1, { { 2, 3 }, } },
2960 /* timedia_9079c */ { 1, { { 2, 3 }, } },
2961 /* timedia_4006a */ { 1, { { 0, -1 }, } }, 2925 /* timedia_4006a */ { 1, { { 0, -1 }, } },
2962 /* timedia_4014 */ { 2, { { 0, -1 }, { 2, -1 }, } }, 2926 /* timedia_4014 */ { 2, { { 0, -1 }, { 2, -1 }, } },
2963 /* timedia_4008a */ { 1, { { 0, 1 }, } }, 2927 /* timedia_4008a */ { 1, { { 0, 1 }, } },
@@ -3019,24 +2983,6 @@ static const struct pci_device_id parport_pc_pci_tbl[] = {
3019 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050, 2983 { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
3020 PCI_SUBVENDOR_ID_EXSYS, PCI_SUBDEVICE_ID_EXSYS_4014, 0, 0, plx_9050 }, 2984 PCI_SUBVENDOR_ID_EXSYS, PCI_SUBDEVICE_ID_EXSYS_4014, 0, 0, plx_9050 },
3021 /* PCI_VENDOR_ID_TIMEDIA/SUNIX has many differing cards ...*/ 2985 /* PCI_VENDOR_ID_TIMEDIA/SUNIX has many differing cards ...*/
3022 { 0x1409, 0x7168, 0x1409, 0x4078, 0, 0, timedia_4078a },
3023 { 0x1409, 0x7168, 0x1409, 0x4079, 0, 0, timedia_4079h },
3024 { 0x1409, 0x7168, 0x1409, 0x4085, 0, 0, timedia_4085h },
3025 { 0x1409, 0x7168, 0x1409, 0x4088, 0, 0, timedia_4088a },
3026 { 0x1409, 0x7168, 0x1409, 0x4089, 0, 0, timedia_4089a },
3027 { 0x1409, 0x7168, 0x1409, 0x4095, 0, 0, timedia_4095a },
3028 { 0x1409, 0x7168, 0x1409, 0x4096, 0, 0, timedia_4096a },
3029 { 0x1409, 0x7168, 0x1409, 0x5078, 0, 0, timedia_4078u },
3030 { 0x1409, 0x7168, 0x1409, 0x5079, 0, 0, timedia_4079a },
3031 { 0x1409, 0x7168, 0x1409, 0x5085, 0, 0, timedia_4085u },
3032 { 0x1409, 0x7168, 0x1409, 0x6079, 0, 0, timedia_4079r },
3033 { 0x1409, 0x7168, 0x1409, 0x7079, 0, 0, timedia_4079s },
3034 { 0x1409, 0x7168, 0x1409, 0x8079, 0, 0, timedia_4079d },
3035 { 0x1409, 0x7168, 0x1409, 0x9079, 0, 0, timedia_4079e },
3036 { 0x1409, 0x7168, 0x1409, 0xa079, 0, 0, timedia_4079f },
3037 { 0x1409, 0x7168, 0x1409, 0xb079, 0, 0, timedia_9079a },
3038 { 0x1409, 0x7168, 0x1409, 0xc079, 0, 0, timedia_9079b },
3039 { 0x1409, 0x7168, 0x1409, 0xd079, 0, 0, timedia_9079c },
3040 { 0x1409, 0x7268, 0x1409, 0x0101, 0, 0, timedia_4006a }, 2986 { 0x1409, 0x7268, 0x1409, 0x0101, 0, 0, timedia_4006a },
3041 { 0x1409, 0x7268, 0x1409, 0x0102, 0, 0, timedia_4014 }, 2987 { 0x1409, 0x7268, 0x1409, 0x0102, 0, 0, timedia_4014 },
3042 { 0x1409, 0x7268, 0x1409, 0x0103, 0, 0, timedia_4008a }, 2988 { 0x1409, 0x7268, 0x1409, 0x0103, 0, 0, timedia_4008a },
diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c
index f01e26440f11..e9c32274df3f 100644
--- a/drivers/parport/parport_serial.c
+++ b/drivers/parport/parport_serial.c
@@ -33,6 +33,9 @@ enum parport_pc_pci_cards {
33 netmos_9xx5_combo, 33 netmos_9xx5_combo,
34 netmos_9855, 34 netmos_9855,
35 netmos_9855_2p, 35 netmos_9855_2p,
36 netmos_9900,
37 netmos_9900_2p,
38 netmos_99xx_1p,
36 avlab_1s1p, 39 avlab_1s1p,
37 avlab_1s2p, 40 avlab_1s2p,
38 avlab_2s1p, 41 avlab_2s1p,
@@ -41,6 +44,24 @@ enum parport_pc_pci_cards {
41 siig_2p1s_20x, 44 siig_2p1s_20x,
42 siig_1s1p_20x, 45 siig_1s1p_20x,
43 siig_2s1p_20x, 46 siig_2s1p_20x,
47 timedia_4078a,
48 timedia_4079h,
49 timedia_4085h,
50 timedia_4088a,
51 timedia_4089a,
52 timedia_4095a,
53 timedia_4096a,
54 timedia_4078u,
55 timedia_4079a,
56 timedia_4085u,
57 timedia_4079r,
58 timedia_4079s,
59 timedia_4079d,
60 timedia_4079e,
61 timedia_4079f,
62 timedia_9079a,
63 timedia_9079b,
64 timedia_9079c,
44}; 65};
45 66
46/* each element directly indexed from enum list, above */ 67/* each element directly indexed from enum list, above */
@@ -72,22 +93,20 @@ static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc
72 dev->subsystem_vendor == PCI_VENDOR_ID_IBM && 93 dev->subsystem_vendor == PCI_VENDOR_ID_IBM &&
73 dev->subsystem_device == 0x0299) 94 dev->subsystem_device == 0x0299)
74 return -ENODEV; 95 return -ENODEV;
75 /* 96
76 * Netmos uses the subdevice ID to indicate the number of parallel 97 if (dev->device == PCI_DEVICE_ID_NETMOS_9912) {
77 * and serial ports. The form is 0x00PS, where <P> is the number of 98 par->numports = 1;
78 * parallel ports and <S> is the number of serial ports. 99 } else {
79 */ 100 /*
80 par->numports = (dev->subsystem_device & 0xf0) >> 4; 101 * Netmos uses the subdevice ID to indicate the number of parallel
81 if (par->numports > ARRAY_SIZE(par->addr)) 102 * and serial ports. The form is 0x00PS, where <P> is the number of
82 par->numports = ARRAY_SIZE(par->addr); 103 * parallel ports and <S> is the number of serial ports.
83 /* 104 */
84 * This function is currently only called for cards with up to 105 par->numports = (dev->subsystem_device & 0xf0) >> 4;
85 * one parallel port. 106 if (par->numports > ARRAY_SIZE(par->addr))
86 * Parallel port BAR is either before or after serial ports BARS; 107 par->numports = ARRAY_SIZE(par->addr);
87 * hence, lo should be either 0 or equal to the number of serial ports. 108 }
88 */ 109
89 if (par->addr[0].lo != 0)
90 par->addr[0].lo = dev->subsystem_device & 0xf;
91 return 0; 110 return 0;
92} 111}
93 112
@@ -97,6 +116,9 @@ static struct parport_pc_pci cards[] __devinitdata = {
97 /* netmos_9xx5_combo */ { 1, { { 2, -1 }, }, netmos_parallel_init }, 116 /* netmos_9xx5_combo */ { 1, { { 2, -1 }, }, netmos_parallel_init },
98 /* netmos_9855 */ { 1, { { 0, -1 }, }, netmos_parallel_init }, 117 /* netmos_9855 */ { 1, { { 0, -1 }, }, netmos_parallel_init },
99 /* netmos_9855_2p */ { 2, { { 0, -1 }, { 2, -1 }, } }, 118 /* netmos_9855_2p */ { 2, { { 0, -1 }, { 2, -1 }, } },
119 /* netmos_9900 */ {1, { { 3, 4 }, }, netmos_parallel_init },
120 /* netmos_9900_2p */ {2, { { 0, 1 }, { 3, 4 }, } },
121 /* netmos_99xx_1p */ {1, { { 0, 1 }, } },
100 /* avlab_1s1p */ { 1, { { 1, 2}, } }, 122 /* avlab_1s1p */ { 1, { { 1, 2}, } },
101 /* avlab_1s2p */ { 2, { { 1, 2}, { 3, 4 },} }, 123 /* avlab_1s2p */ { 2, { { 1, 2}, { 3, 4 },} },
102 /* avlab_2s1p */ { 1, { { 2, 3}, } }, 124 /* avlab_2s1p */ { 1, { { 2, 3}, } },
@@ -105,6 +127,24 @@ static struct parport_pc_pci cards[] __devinitdata = {
105 /* siig_2p1s_20x */ { 2, { { 1, 2 }, { 3, 4 }, } }, 127 /* siig_2p1s_20x */ { 2, { { 1, 2 }, { 3, 4 }, } },
106 /* siig_1s1p_20x */ { 1, { { 1, 2 }, } }, 128 /* siig_1s1p_20x */ { 1, { { 1, 2 }, } },
107 /* siig_2s1p_20x */ { 1, { { 2, 3 }, } }, 129 /* siig_2s1p_20x */ { 1, { { 2, 3 }, } },
130 /* timedia_4078a */ { 1, { { 2, -1 }, } },
131 /* timedia_4079h */ { 1, { { 2, 3 }, } },
132 /* timedia_4085h */ { 2, { { 2, -1 }, { 4, -1 }, } },
133 /* timedia_4088a */ { 2, { { 2, 3 }, { 4, 5 }, } },
134 /* timedia_4089a */ { 2, { { 2, 3 }, { 4, 5 }, } },
135 /* timedia_4095a */ { 2, { { 2, 3 }, { 4, 5 }, } },
136 /* timedia_4096a */ { 2, { { 2, 3 }, { 4, 5 }, } },
137 /* timedia_4078u */ { 1, { { 2, -1 }, } },
138 /* timedia_4079a */ { 1, { { 2, 3 }, } },
139 /* timedia_4085u */ { 2, { { 2, -1 }, { 4, -1 }, } },
140 /* timedia_4079r */ { 1, { { 2, 3 }, } },
141 /* timedia_4079s */ { 1, { { 2, 3 }, } },
142 /* timedia_4079d */ { 1, { { 2, 3 }, } },
143 /* timedia_4079e */ { 1, { { 2, 3 }, } },
144 /* timedia_4079f */ { 1, { { 2, 3 }, } },
145 /* timedia_9079a */ { 1, { { 2, 3 }, } },
146 /* timedia_9079b */ { 1, { { 2, 3 }, } },
147 /* timedia_9079c */ { 1, { { 2, 3 }, } },
108}; 148};
109 149
110static struct pci_device_id parport_serial_pci_tbl[] = { 150static struct pci_device_id parport_serial_pci_tbl[] = {
@@ -127,6 +167,14 @@ static struct pci_device_id parport_serial_pci_tbl[] = {
127 0x1000, 0x0022, 0, 0, netmos_9855_2p }, 167 0x1000, 0x0022, 0, 0, netmos_9855_2p },
128 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855, 168 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855,
129 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9855 }, 169 PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9855 },
170 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900,
171 0xA000, 0x3011, 0, 0, netmos_9900 },
172 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900,
173 0xA000, 0x3012, 0, 0, netmos_9900 },
174 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9900,
175 0xA000, 0x3020, 0, 0, netmos_9900_2p },
176 { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9912,
177 0xA000, 0x2000, 0, 0, netmos_99xx_1p },
130 /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/ 178 /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/
131 { PCI_VENDOR_ID_AFAVLAB, 0x2110, 179 { PCI_VENDOR_ID_AFAVLAB, 0x2110,
132 PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s1p }, 180 PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s1p },
@@ -176,6 +224,25 @@ static struct pci_device_id parport_serial_pci_tbl[] = {
176 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x }, 224 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x },
177 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_850, 225 { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_850,
178 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x }, 226 PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x },
227 /* PCI_VENDOR_ID_TIMEDIA/SUNIX has many differing cards ...*/
228 { 0x1409, 0x7168, 0x1409, 0x4078, 0, 0, timedia_4078a },
229 { 0x1409, 0x7168, 0x1409, 0x4079, 0, 0, timedia_4079h },
230 { 0x1409, 0x7168, 0x1409, 0x4085, 0, 0, timedia_4085h },
231 { 0x1409, 0x7168, 0x1409, 0x4088, 0, 0, timedia_4088a },
232 { 0x1409, 0x7168, 0x1409, 0x4089, 0, 0, timedia_4089a },
233 { 0x1409, 0x7168, 0x1409, 0x4095, 0, 0, timedia_4095a },
234 { 0x1409, 0x7168, 0x1409, 0x4096, 0, 0, timedia_4096a },
235 { 0x1409, 0x7168, 0x1409, 0x5078, 0, 0, timedia_4078u },
236 { 0x1409, 0x7168, 0x1409, 0x5079, 0, 0, timedia_4079a },
237 { 0x1409, 0x7168, 0x1409, 0x5085, 0, 0, timedia_4085u },
238 { 0x1409, 0x7168, 0x1409, 0x6079, 0, 0, timedia_4079r },
239 { 0x1409, 0x7168, 0x1409, 0x7079, 0, 0, timedia_4079s },
240 { 0x1409, 0x7168, 0x1409, 0x8079, 0, 0, timedia_4079d },
241 { 0x1409, 0x7168, 0x1409, 0x9079, 0, 0, timedia_4079e },
242 { 0x1409, 0x7168, 0x1409, 0xa079, 0, 0, timedia_4079f },
243 { 0x1409, 0x7168, 0x1409, 0xb079, 0, 0, timedia_9079a },
244 { 0x1409, 0x7168, 0x1409, 0xc079, 0, 0, timedia_9079b },
245 { 0x1409, 0x7168, 0x1409, 0xd079, 0, 0, timedia_9079c },
179 246
180 { 0, } /* terminate list */ 247 { 0, } /* terminate list */
181}; 248};
@@ -219,6 +286,24 @@ static struct pciserial_board pci_parport_serial_boards[] __devinitdata = {
219 .base_baud = 115200, 286 .base_baud = 115200,
220 .uart_offset = 8, 287 .uart_offset = 8,
221 }, 288 },
289 [netmos_9900] = { /* n/t */
290 .flags = FL_BASE0 | FL_BASE_BARS,
291 .num_ports = 1,
292 .base_baud = 115200,
293 .uart_offset = 8,
294 },
295 [netmos_9900_2p] = { /* parallel only */ /* n/t */
296 .flags = FL_BASE0,
297 .num_ports = 0,
298 .base_baud = 115200,
299 .uart_offset = 8,
300 },
301 [netmos_99xx_1p] = { /* parallel only */ /* n/t */
302 .flags = FL_BASE0,
303 .num_ports = 0,
304 .base_baud = 115200,
305 .uart_offset = 8,
306 },
222 [avlab_1s1p] = { /* n/t */ 307 [avlab_1s1p] = { /* n/t */
223 .flags = FL_BASE0 | FL_BASE_BARS, 308 .flags = FL_BASE0 | FL_BASE_BARS,
224 .num_ports = 1, 309 .num_ports = 1,
@@ -267,6 +352,114 @@ static struct pciserial_board pci_parport_serial_boards[] __devinitdata = {
267 .base_baud = 921600, 352 .base_baud = 921600,
268 .uart_offset = 8, 353 .uart_offset = 8,
269 }, 354 },
355 [timedia_4078a] = {
356 .flags = FL_BASE0|FL_BASE_BARS,
357 .num_ports = 1,
358 .base_baud = 921600,
359 .uart_offset = 8,
360 },
361 [timedia_4079h] = {
362 .flags = FL_BASE0|FL_BASE_BARS,
363 .num_ports = 1,
364 .base_baud = 921600,
365 .uart_offset = 8,
366 },
367 [timedia_4085h] = {
368 .flags = FL_BASE0|FL_BASE_BARS,
369 .num_ports = 1,
370 .base_baud = 921600,
371 .uart_offset = 8,
372 },
373 [timedia_4088a] = {
374 .flags = FL_BASE0|FL_BASE_BARS,
375 .num_ports = 1,
376 .base_baud = 921600,
377 .uart_offset = 8,
378 },
379 [timedia_4089a] = {
380 .flags = FL_BASE0|FL_BASE_BARS,
381 .num_ports = 1,
382 .base_baud = 921600,
383 .uart_offset = 8,
384 },
385 [timedia_4095a] = {
386 .flags = FL_BASE0|FL_BASE_BARS,
387 .num_ports = 1,
388 .base_baud = 921600,
389 .uart_offset = 8,
390 },
391 [timedia_4096a] = {
392 .flags = FL_BASE0|FL_BASE_BARS,
393 .num_ports = 1,
394 .base_baud = 921600,
395 .uart_offset = 8,
396 },
397 [timedia_4078u] = {
398 .flags = FL_BASE0|FL_BASE_BARS,
399 .num_ports = 1,
400 .base_baud = 921600,
401 .uart_offset = 8,
402 },
403 [timedia_4079a] = {
404 .flags = FL_BASE0|FL_BASE_BARS,
405 .num_ports = 1,
406 .base_baud = 921600,
407 .uart_offset = 8,
408 },
409 [timedia_4085u] = {
410 .flags = FL_BASE0|FL_BASE_BARS,
411 .num_ports = 1,
412 .base_baud = 921600,
413 .uart_offset = 8,
414 },
415 [timedia_4079r] = {
416 .flags = FL_BASE0|FL_BASE_BARS,
417 .num_ports = 1,
418 .base_baud = 921600,
419 .uart_offset = 8,
420 },
421 [timedia_4079s] = {
422 .flags = FL_BASE0|FL_BASE_BARS,
423 .num_ports = 1,
424 .base_baud = 921600,
425 .uart_offset = 8,
426 },
427 [timedia_4079d] = {
428 .flags = FL_BASE0|FL_BASE_BARS,
429 .num_ports = 1,
430 .base_baud = 921600,
431 .uart_offset = 8,
432 },
433 [timedia_4079e] = {
434 .flags = FL_BASE0|FL_BASE_BARS,
435 .num_ports = 1,
436 .base_baud = 921600,
437 .uart_offset = 8,
438 },
439 [timedia_4079f] = {
440 .flags = FL_BASE0|FL_BASE_BARS,
441 .num_ports = 1,
442 .base_baud = 921600,
443 .uart_offset = 8,
444 },
445 [timedia_9079a] = {
446 .flags = FL_BASE0|FL_BASE_BARS,
447 .num_ports = 1,
448 .base_baud = 921600,
449 .uart_offset = 8,
450 },
451 [timedia_9079b] = {
452 .flags = FL_BASE0|FL_BASE_BARS,
453 .num_ports = 1,
454 .base_baud = 921600,
455 .uart_offset = 8,
456 },
457 [timedia_9079c] = {
458 .flags = FL_BASE0|FL_BASE_BARS,
459 .num_ports = 1,
460 .base_baud = 921600,
461 .uart_offset = 8,
462 },
270}; 463};
271 464
272struct parport_serial_private { 465struct parport_serial_private {
@@ -285,6 +478,10 @@ static int __devinit serial_register (struct pci_dev *dev,
285 struct serial_private *serial; 478 struct serial_private *serial;
286 479
287 board = &pci_parport_serial_boards[id->driver_data]; 480 board = &pci_parport_serial_boards[id->driver_data];
481
482 if (board->num_ports == 0)
483 return 0;
484
288 serial = pciserial_init_ports(dev, board); 485 serial = pciserial_init_ports(dev, board);
289 486
290 if (IS_ERR(serial)) 487 if (IS_ERR(serial))