diff options
-rw-r--r-- | drivers/parport/parport_pc.c | 54 | ||||
-rw-r--r-- | drivers/parport/parport_serial.c | 163 | ||||
-rw-r--r-- | drivers/tty/serial/8250_pci.c | 23 |
3 files changed, 186 insertions, 54 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 342a3de6c674..e9c32274df3f 100644 --- a/drivers/parport/parport_serial.c +++ b/drivers/parport/parport_serial.c | |||
@@ -44,6 +44,24 @@ enum parport_pc_pci_cards { | |||
44 | siig_2p1s_20x, | 44 | siig_2p1s_20x, |
45 | siig_1s1p_20x, | 45 | siig_1s1p_20x, |
46 | 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, | ||
47 | }; | 65 | }; |
48 | 66 | ||
49 | /* each element directly indexed from enum list, above */ | 67 | /* each element directly indexed from enum list, above */ |
@@ -109,6 +127,24 @@ static struct parport_pc_pci cards[] __devinitdata = { | |||
109 | /* siig_2p1s_20x */ { 2, { { 1, 2 }, { 3, 4 }, } }, | 127 | /* siig_2p1s_20x */ { 2, { { 1, 2 }, { 3, 4 }, } }, |
110 | /* siig_1s1p_20x */ { 1, { { 1, 2 }, } }, | 128 | /* siig_1s1p_20x */ { 1, { { 1, 2 }, } }, |
111 | /* 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 }, } }, | ||
112 | }; | 148 | }; |
113 | 149 | ||
114 | static struct pci_device_id parport_serial_pci_tbl[] = { | 150 | static struct pci_device_id parport_serial_pci_tbl[] = { |
@@ -188,6 +224,25 @@ static struct pci_device_id parport_serial_pci_tbl[] = { | |||
188 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x }, | 224 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, siig_2s1p_20x }, |
189 | { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_850, | 225 | { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_850, |
190 | 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 }, | ||
191 | 246 | ||
192 | { 0, } /* terminate list */ | 247 | { 0, } /* terminate list */ |
193 | }; | 248 | }; |
@@ -297,6 +352,114 @@ static struct pciserial_board pci_parport_serial_boards[] __devinitdata = { | |||
297 | .base_baud = 921600, | 352 | .base_baud = 921600, |
298 | .uart_offset = 8, | 353 | .uart_offset = 8, |
299 | }, | 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 | }, | ||
300 | }; | 463 | }; |
301 | 464 | ||
302 | struct parport_serial_private { | 465 | struct parport_serial_private { |
diff --git a/drivers/tty/serial/8250_pci.c b/drivers/tty/serial/8250_pci.c index 9b119fe9257f..e1d4668f86ae 100644 --- a/drivers/tty/serial/8250_pci.c +++ b/drivers/tty/serial/8250_pci.c | |||
@@ -575,6 +575,28 @@ static const struct timedia_struct { | |||
575 | { 8, timedia_eight_port } | 575 | { 8, timedia_eight_port } |
576 | }; | 576 | }; |
577 | 577 | ||
578 | /* | ||
579 | * There are nearly 70 different Timedia/SUNIX PCI serial devices. Instead of | ||
580 | * listing them individually, this driver merely grabs them all with | ||
581 | * PCI_ANY_ID. Some of these devices, however, also feature a parallel port, | ||
582 | * and should be left free to be claimed by parport_serial instead. | ||
583 | */ | ||
584 | static int pci_timedia_probe(struct pci_dev *dev) | ||
585 | { | ||
586 | /* | ||
587 | * Check the third digit of the subdevice ID | ||
588 | * (0,2,3,5,6: serial only -- 7,8,9: serial + parallel) | ||
589 | */ | ||
590 | if ((dev->subsystem_device & 0x00f0) >= 0x70) { | ||
591 | dev_info(&dev->dev, | ||
592 | "ignoring Timedia subdevice %04x for parport_serial\n", | ||
593 | dev->subsystem_device); | ||
594 | return -ENODEV; | ||
595 | } | ||
596 | |||
597 | return 0; | ||
598 | } | ||
599 | |||
578 | static int pci_timedia_init(struct pci_dev *dev) | 600 | static int pci_timedia_init(struct pci_dev *dev) |
579 | { | 601 | { |
580 | const unsigned short *ids; | 602 | const unsigned short *ids; |
@@ -1463,6 +1485,7 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = { | |||
1463 | .device = PCI_DEVICE_ID_TIMEDIA_1889, | 1485 | .device = PCI_DEVICE_ID_TIMEDIA_1889, |
1464 | .subvendor = PCI_VENDOR_ID_TIMEDIA, | 1486 | .subvendor = PCI_VENDOR_ID_TIMEDIA, |
1465 | .subdevice = PCI_ANY_ID, | 1487 | .subdevice = PCI_ANY_ID, |
1488 | .probe = pci_timedia_probe, | ||
1466 | .init = pci_timedia_init, | 1489 | .init = pci_timedia_init, |
1467 | .setup = pci_timedia_setup, | 1490 | .setup = pci_timedia_setup, |
1468 | }, | 1491 | }, |