aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/parport
diff options
context:
space:
mode:
authorFrédéric Brière <fbriere@fbriere.net>2011-05-29 15:08:04 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-06-07 12:35:57 -0400
commitb9b24558f7d36c550b5cf0b550a8926f8c03cdbd (patch)
tree35bf3afc3ff13a8f09e1d45af7d25dd19ad2e53c /drivers/parport
parent5bf8f501e05930364b345ed8710c5b1a13207134 (diff)
parport/serial: add support for Timedia/SUNIX cards to parport_serial
Timedia/SUNIX PCI cards with both serial and parallel ports are currently supported by 8250_pci and parport_pc individually. Moving that support into parport_serial allows using both types of ports at the same time. This was successfully tested with a SUNIX 4079T. Signed-off-by: Frédéric Brière <fbriere@fbriere.net> Acked-by: Alan Cox <alan@linux.intel.com> Cc: linux-serial@vger.kernel.org Cc: linux-parport@lists.infradead.org Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/parport')
-rw-r--r--drivers/parport/parport_pc.c54
-rw-r--r--drivers/parport/parport_serial.c163
2 files changed, 163 insertions, 54 deletions
diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
index f330338c2f2..d1cdb9449f8 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 342a3de6c67..e9c32274df3 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
114static struct pci_device_id parport_serial_pci_tbl[] = { 150static 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
302struct parport_serial_private { 465struct parport_serial_private {