Commit 14422f9dd8515bfbe6fdbde37eadf59e2980f104

Authored by Mauro Carvalho Chehab
1 parent d888a4c76c

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);