Commit 14422f9dd8515bfbe6fdbde37eadf59e2980f104
1 parent
d888a4c76c
Exists in
master
and in
4 other branches
V4L/DVB (12010): cx88: Properly support Leadtek TV2000 XP Global
Fix Leadtek TV2000 XP Global entries and add missing PCI ID's. Thanks to Terry Wu <terrywu2009@gmail.com> for pointing us for the proper settings. Cc: Terry Wu <terrywu2009@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Showing 2 changed files with 78 additions and 22 deletions Side-by-side Diff
Documentation/video4linux/CARDLIST.cx88
... | ... | @@ -6,8 +6,8 @@ |
6 | 6 | 5 -> Leadtek Winfast 2000XP Expert [107d:6611,107d:6613] |
7 | 7 | 6 -> AverTV Studio 303 (M126) [1461:000b] |
8 | 8 | 7 -> MSI TV-@nywhere Master [1462:8606] |
9 | - 8 -> Leadtek Winfast DV2000 [107d:6620] | |
10 | - 9 -> Leadtek PVR 2000 [107d:663b,107d:663c,107d:6632] | |
9 | + 8 -> Leadtek Winfast DV2000 [107d:6620,107d:6621] | |
10 | + 9 -> Leadtek PVR 2000 [107d:663b,107d:663c,107d:6632,107d:6630,107d:6638,107d:6631,107d:6637,107d:663d] | |
11 | 11 | 10 -> IODATA GV-VCP3/PCI [10fc:d003] |
12 | 12 | 11 -> Prolink PlayTV PVR |
13 | 13 | 12 -> ASUS PVR-416 [1043:4823,1461:c111] |
... | ... | @@ -59,7 +59,7 @@ |
59 | 59 | 58 -> Pinnacle PCTV HD 800i [11bd:0051] |
60 | 60 | 59 -> DViCO FusionHDTV 5 PCI nano [18ac:d530] |
61 | 61 | 60 -> Pinnacle Hybrid PCTV [12ab:1788] |
62 | - 61 -> Winfast TV2000 XP Global [107d:6f18] | |
62 | + 61 -> Leadtek TV2000 XP Global [107d:6f18,107d:6618] | |
63 | 63 | 62 -> PowerColor RA330 [14f1:ea3d] |
64 | 64 | 63 -> Geniatech X8000-MT DVBT [14f1:8852] |
65 | 65 | 64 -> DViCO FusionHDTV DVB-T PRO [18ac:db30] |
drivers/media/video/cx88/cx88-cards.c
... | ... | @@ -1524,33 +1524,45 @@ |
1524 | 1524 | }, |
1525 | 1525 | .mpeg = CX88_MPEG_DVB, |
1526 | 1526 | }, |
1527 | + /* Terry Wu <terrywu2009@gmail.com> */ | |
1528 | + /* TV Audio : set GPIO 2, 18, 19 value to 0, 1, 0 */ | |
1529 | + /* FM Audio : set GPIO 2, 18, 19 value to 0, 0, 0 */ | |
1530 | + /* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */ | |
1531 | + /* Mute Audio : set GPIO 2 value to 1 */ | |
1527 | 1532 | [CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = { |
1528 | - .name = "Winfast TV2000 XP Global", | |
1533 | + .name = "Leadtek TV2000 XP Global", | |
1529 | 1534 | .tuner_type = TUNER_XC2028, |
1530 | 1535 | .tuner_addr = 0x61, |
1536 | + .radio_type = TUNER_XC2028, | |
1537 | + .radio_addr = 0x61, | |
1531 | 1538 | .input = { { |
1532 | 1539 | .type = CX88_VMUX_TELEVISION, |
1533 | 1540 | .vmux = 0, |
1534 | - .gpio0 = 0x0400, /* pin 2:mute = 0 (off?) */ | |
1541 | + .gpio0 = 0x0400, /* pin 2 = 0 */ | |
1535 | 1542 | .gpio1 = 0x0000, |
1536 | - .gpio2 = 0x0800, /* pin 19:audio = 0 (tv) */ | |
1537 | - | |
1543 | + .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */ | |
1544 | + .gpio3 = 0x0000, | |
1538 | 1545 | }, { |
1539 | 1546 | .type = CX88_VMUX_COMPOSITE1, |
1540 | 1547 | .vmux = 1, |
1541 | - .gpio0 = 0x0400, /* probably? or 0x0404 to turn mute on */ | |
1548 | + .gpio0 = 0x0400, /* pin 2 = 0 */ | |
1542 | 1549 | .gpio1 = 0x0000, |
1543 | - .gpio2 = 0x0808, /* pin 19:audio = 1 (line) */ | |
1544 | - | |
1550 | + .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ | |
1551 | + .gpio3 = 0x0000, | |
1545 | 1552 | }, { |
1546 | 1553 | .type = CX88_VMUX_SVIDEO, |
1547 | 1554 | .vmux = 2, |
1555 | + .gpio0 = 0x0400, /* pin 2 = 0 */ | |
1556 | + .gpio1 = 0x0000, | |
1557 | + .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */ | |
1558 | + .gpio3 = 0x0000, | |
1548 | 1559 | } }, |
1549 | 1560 | .radio = { |
1550 | 1561 | .type = CX88_RADIO, |
1551 | - .gpio0 = 0x004ff, | |
1552 | - .gpio1 = 0x010ff, | |
1553 | - .gpio2 = 0x0ff, | |
1562 | + .gpio0 = 0x0400, /* pin 2 = 0 */ | |
1563 | + .gpio1 = 0x0000, | |
1564 | + .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */ | |
1565 | + .gpio3 = 0x0000, | |
1554 | 1566 | }, |
1555 | 1567 | }, |
1556 | 1568 | [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = { |
... | ... | @@ -2438,6 +2450,41 @@ |
2438 | 2450 | .subvendor = 0x107d, |
2439 | 2451 | .subdevice = 0x6654, |
2440 | 2452 | .card = CX88_BOARD_WINFAST_DTV1800H, |
2453 | + }, { | |
2454 | + /* PVR2000 PAL Model [107d:6630] */ | |
2455 | + .subvendor = 0x107d, | |
2456 | + .subdevice = 0x6630, | |
2457 | + .card = CX88_BOARD_LEADTEK_PVR2000, | |
2458 | + }, { | |
2459 | + /* PVR2000 PAL Model [107d:6638] */ | |
2460 | + .subvendor = 0x107d, | |
2461 | + .subdevice = 0x6638, | |
2462 | + .card = CX88_BOARD_LEADTEK_PVR2000, | |
2463 | + }, { | |
2464 | + /* PVR2000 NTSC Model [107d:6631] */ | |
2465 | + .subvendor = 0x107d, | |
2466 | + .subdevice = 0x6631, | |
2467 | + .card = CX88_BOARD_LEADTEK_PVR2000, | |
2468 | + }, { | |
2469 | + /* PVR2000 NTSC Model [107d:6637] */ | |
2470 | + .subvendor = 0x107d, | |
2471 | + .subdevice = 0x6637, | |
2472 | + .card = CX88_BOARD_LEADTEK_PVR2000, | |
2473 | + }, { | |
2474 | + /* PVR2000 NTSC Model [107d:663d] */ | |
2475 | + .subvendor = 0x107d, | |
2476 | + .subdevice = 0x663d, | |
2477 | + .card = CX88_BOARD_LEADTEK_PVR2000, | |
2478 | + }, { | |
2479 | + /* DV2000 NTSC Model [107d:6621] */ | |
2480 | + .subvendor = 0x107d, | |
2481 | + .subdevice = 0x6621, | |
2482 | + .card = CX88_BOARD_WINFAST_DV2000, | |
2483 | + }, { | |
2484 | + /* TV2000 XP Global [107d:6618] */ | |
2485 | + .subvendor = 0x107d, | |
2486 | + .subdevice = 0x6618, | |
2487 | + .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL, | |
2441 | 2488 | }, |
2442 | 2489 | }; |
2443 | 2490 | |
... | ... | @@ -2446,12 +2493,6 @@ |
2446 | 2493 | |
2447 | 2494 | static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data) |
2448 | 2495 | { |
2449 | - /* This is just for the "Winfast 2000XP Expert" board ATM; I don't have data on | |
2450 | - * any others. | |
2451 | - * | |
2452 | - * Byte 0 is 1 on the NTSC board. | |
2453 | - */ | |
2454 | - | |
2455 | 2496 | if (eeprom_data[4] != 0x7d || |
2456 | 2497 | eeprom_data[5] != 0x10 || |
2457 | 2498 | eeprom_data[7] != 0x66) { |
... | ... | @@ -2459,8 +2500,19 @@ |
2459 | 2500 | return; |
2460 | 2501 | } |
2461 | 2502 | |
2462 | - core->board.tuner_type = (eeprom_data[6] == 0x13) ? | |
2463 | - TUNER_PHILIPS_FM1236_MK3 : TUNER_PHILIPS_FM1216ME_MK3; | |
2503 | + /* Terry Wu <terrywu2009@gmail.com> */ | |
2504 | + switch (eeprom_data[6]) { | |
2505 | + case 0x13: /* SSID 6613 for TV2000 XP Expert NTSC Model */ | |
2506 | + case 0x21: /* SSID 6621 for DV2000 NTSC Model */ | |
2507 | + case 0x31: /* SSID 6631 for PVR2000 NTSC Model */ | |
2508 | + case 0x37: /* SSID 6637 for PVR2000 NTSC Model */ | |
2509 | + case 0x3d: /* SSID 6637 for PVR2000 NTSC Model */ | |
2510 | + core->board.tuner_type = TUNER_PHILIPS_FM1236_MK3; | |
2511 | + break; | |
2512 | + default: | |
2513 | + core->board.tuner_type = TUNER_PHILIPS_FM1216ME_MK3; | |
2514 | + break; | |
2515 | + } | |
2464 | 2516 | |
2465 | 2517 | info_printk(core, "Leadtek Winfast 2000XP Expert config: " |
2466 | 2518 | "tuner=%d, eeprom[0]=0x%02x\n", |
... | ... | @@ -2713,7 +2765,6 @@ |
2713 | 2765 | { |
2714 | 2766 | /* Board-specific callbacks */ |
2715 | 2767 | switch (core->boardnr) { |
2716 | - case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: | |
2717 | 2768 | case CX88_BOARD_POWERCOLOR_REAL_ANGEL: |
2718 | 2769 | case CX88_BOARD_GENIATECH_X8000_MT: |
2719 | 2770 | case CX88_BOARD_KWORLD_ATSC_120: |
... | ... | @@ -2725,6 +2776,7 @@ |
2725 | 2776 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: |
2726 | 2777 | case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: |
2727 | 2778 | return cx88_dvico_xc2028_callback(core, command, arg); |
2779 | + case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: | |
2728 | 2780 | case CX88_BOARD_WINFAST_DTV1800H: |
2729 | 2781 | return cx88_xc3028_winfast1800h_callback(core, command, arg); |
2730 | 2782 | } |
... | ... | @@ -2914,6 +2966,7 @@ |
2914 | 2966 | udelay(1000); |
2915 | 2967 | break; |
2916 | 2968 | |
2969 | + case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: | |
2917 | 2970 | case CX88_BOARD_WINFAST_DTV1800H: |
2918 | 2971 | /* GPIO 12 (xc3028 tuner reset) */ |
2919 | 2972 | cx_set(MO_GP1_IO, 0x1010); |
... | ... | @@ -2950,6 +3003,7 @@ |
2950 | 3003 | case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: |
2951 | 3004 | ctl->demod = XC3028_FE_OREN538; |
2952 | 3005 | break; |
3006 | + case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL: | |
2953 | 3007 | case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME: |
2954 | 3008 | case CX88_BOARD_PROLINK_PV_8000GT: |
2955 | 3009 | /* |
... | ... | @@ -2993,6 +3047,8 @@ |
2993 | 3047 | if (0 == core->i2c_rc) |
2994 | 3048 | gdi_eeprom(core, eeprom); |
2995 | 3049 | break; |
3050 | + case CX88_BOARD_LEADTEK_PVR2000: | |
3051 | + case CX88_BOARD_WINFAST_DV2000: | |
2996 | 3052 | case CX88_BOARD_WINFAST2000XP_EXPERT: |
2997 | 3053 | if (0 == core->i2c_rc) |
2998 | 3054 | leadtek_eeprom(core, eeprom); |