|
@@ -1524,33 +1524,45 @@ static const struct cx88_board cx88_boards[] = {
|
|
},
|
|
},
|
|
.mpeg = CX88_MPEG_DVB,
|
|
.mpeg = CX88_MPEG_DVB,
|
|
},
|
|
},
|
|
|
|
+ /* Terry Wu <terrywu2009@gmail.com> */
|
|
|
|
+ /* TV Audio : set GPIO 2, 18, 19 value to 0, 1, 0 */
|
|
|
|
+ /* FM Audio : set GPIO 2, 18, 19 value to 0, 0, 0 */
|
|
|
|
+ /* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */
|
|
|
|
+ /* Mute Audio : set GPIO 2 value to 1 */
|
|
[CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = {
|
|
[CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = {
|
|
- .name = "Winfast TV2000 XP Global",
|
|
|
|
|
|
+ .name = "Leadtek TV2000 XP Global",
|
|
.tuner_type = TUNER_XC2028,
|
|
.tuner_type = TUNER_XC2028,
|
|
.tuner_addr = 0x61,
|
|
.tuner_addr = 0x61,
|
|
|
|
+ .radio_type = TUNER_XC2028,
|
|
|
|
+ .radio_addr = 0x61,
|
|
.input = { {
|
|
.input = { {
|
|
.type = CX88_VMUX_TELEVISION,
|
|
.type = CX88_VMUX_TELEVISION,
|
|
.vmux = 0,
|
|
.vmux = 0,
|
|
- .gpio0 = 0x0400, /* pin 2:mute = 0 (off?) */
|
|
|
|
|
|
+ .gpio0 = 0x0400, /* pin 2 = 0 */
|
|
.gpio1 = 0x0000,
|
|
.gpio1 = 0x0000,
|
|
- .gpio2 = 0x0800, /* pin 19:audio = 0 (tv) */
|
|
|
|
-
|
|
|
|
|
|
+ .gpio2 = 0x0C04, /* pin 18 = 1, pin 19 = 0 */
|
|
|
|
+ .gpio3 = 0x0000,
|
|
}, {
|
|
}, {
|
|
.type = CX88_VMUX_COMPOSITE1,
|
|
.type = CX88_VMUX_COMPOSITE1,
|
|
.vmux = 1,
|
|
.vmux = 1,
|
|
- .gpio0 = 0x0400, /* probably? or 0x0404 to turn mute on */
|
|
|
|
|
|
+ .gpio0 = 0x0400, /* pin 2 = 0 */
|
|
.gpio1 = 0x0000,
|
|
.gpio1 = 0x0000,
|
|
- .gpio2 = 0x0808, /* pin 19:audio = 1 (line) */
|
|
|
|
-
|
|
|
|
|
|
+ .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */
|
|
|
|
+ .gpio3 = 0x0000,
|
|
}, {
|
|
}, {
|
|
.type = CX88_VMUX_SVIDEO,
|
|
.type = CX88_VMUX_SVIDEO,
|
|
.vmux = 2,
|
|
.vmux = 2,
|
|
|
|
+ .gpio0 = 0x0400, /* pin 2 = 0 */
|
|
|
|
+ .gpio1 = 0x0000,
|
|
|
|
+ .gpio2 = 0x0C0C, /* pin 18 = 1, pin 19 = 1 */
|
|
|
|
+ .gpio3 = 0x0000,
|
|
} },
|
|
} },
|
|
.radio = {
|
|
.radio = {
|
|
.type = CX88_RADIO,
|
|
.type = CX88_RADIO,
|
|
- .gpio0 = 0x004ff,
|
|
|
|
- .gpio1 = 0x010ff,
|
|
|
|
- .gpio2 = 0x0ff,
|
|
|
|
|
|
+ .gpio0 = 0x0400, /* pin 2 = 0 */
|
|
|
|
+ .gpio1 = 0x0000,
|
|
|
|
+ .gpio2 = 0x0C00, /* pin 18 = 0, pin 19 = 0 */
|
|
|
|
+ .gpio3 = 0x0000,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
[CX88_BOARD_POWERCOLOR_REAL_ANGEL] = {
|
|
[CX88_BOARD_POWERCOLOR_REAL_ANGEL] = {
|
|
@@ -2438,6 +2450,41 @@ static const struct cx88_subid cx88_subids[] = {
|
|
.subvendor = 0x107d,
|
|
.subvendor = 0x107d,
|
|
.subdevice = 0x6654,
|
|
.subdevice = 0x6654,
|
|
.card = CX88_BOARD_WINFAST_DTV1800H,
|
|
.card = CX88_BOARD_WINFAST_DTV1800H,
|
|
|
|
+ }, {
|
|
|
|
+ /* PVR2000 PAL Model [107d:6630] */
|
|
|
|
+ .subvendor = 0x107d,
|
|
|
|
+ .subdevice = 0x6630,
|
|
|
|
+ .card = CX88_BOARD_LEADTEK_PVR2000,
|
|
|
|
+ }, {
|
|
|
|
+ /* PVR2000 PAL Model [107d:6638] */
|
|
|
|
+ .subvendor = 0x107d,
|
|
|
|
+ .subdevice = 0x6638,
|
|
|
|
+ .card = CX88_BOARD_LEADTEK_PVR2000,
|
|
|
|
+ }, {
|
|
|
|
+ /* PVR2000 NTSC Model [107d:6631] */
|
|
|
|
+ .subvendor = 0x107d,
|
|
|
|
+ .subdevice = 0x6631,
|
|
|
|
+ .card = CX88_BOARD_LEADTEK_PVR2000,
|
|
|
|
+ }, {
|
|
|
|
+ /* PVR2000 NTSC Model [107d:6637] */
|
|
|
|
+ .subvendor = 0x107d,
|
|
|
|
+ .subdevice = 0x6637,
|
|
|
|
+ .card = CX88_BOARD_LEADTEK_PVR2000,
|
|
|
|
+ }, {
|
|
|
|
+ /* PVR2000 NTSC Model [107d:663d] */
|
|
|
|
+ .subvendor = 0x107d,
|
|
|
|
+ .subdevice = 0x663d,
|
|
|
|
+ .card = CX88_BOARD_LEADTEK_PVR2000,
|
|
|
|
+ }, {
|
|
|
|
+ /* DV2000 NTSC Model [107d:6621] */
|
|
|
|
+ .subvendor = 0x107d,
|
|
|
|
+ .subdevice = 0x6621,
|
|
|
|
+ .card = CX88_BOARD_WINFAST_DV2000,
|
|
|
|
+ }, {
|
|
|
|
+ /* TV2000 XP Global [107d:6618] */
|
|
|
|
+ .subvendor = 0x107d,
|
|
|
|
+ .subdevice = 0x6618,
|
|
|
|
+ .card = CX88_BOARD_WINFAST_TV2000_XP_GLOBAL,
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|
|
@@ -2446,12 +2493,6 @@ static const struct cx88_subid cx88_subids[] = {
|
|
|
|
|
|
static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data)
|
|
static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data)
|
|
{
|
|
{
|
|
- /* This is just for the "Winfast 2000XP Expert" board ATM; I don't have data on
|
|
|
|
- * any others.
|
|
|
|
- *
|
|
|
|
- * Byte 0 is 1 on the NTSC board.
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
if (eeprom_data[4] != 0x7d ||
|
|
if (eeprom_data[4] != 0x7d ||
|
|
eeprom_data[5] != 0x10 ||
|
|
eeprom_data[5] != 0x10 ||
|
|
eeprom_data[7] != 0x66) {
|
|
eeprom_data[7] != 0x66) {
|
|
@@ -2459,8 +2500,19 @@ static void leadtek_eeprom(struct cx88_core *core, u8 *eeprom_data)
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- core->board.tuner_type = (eeprom_data[6] == 0x13) ?
|
|
|
|
- TUNER_PHILIPS_FM1236_MK3 : TUNER_PHILIPS_FM1216ME_MK3;
|
|
|
|
|
|
+ /* Terry Wu <terrywu2009@gmail.com> */
|
|
|
|
+ switch (eeprom_data[6]) {
|
|
|
|
+ case 0x13: /* SSID 6613 for TV2000 XP Expert NTSC Model */
|
|
|
|
+ case 0x21: /* SSID 6621 for DV2000 NTSC Model */
|
|
|
|
+ case 0x31: /* SSID 6631 for PVR2000 NTSC Model */
|
|
|
|
+ case 0x37: /* SSID 6637 for PVR2000 NTSC Model */
|
|
|
|
+ case 0x3d: /* SSID 6637 for PVR2000 NTSC Model */
|
|
|
|
+ core->board.tuner_type = TUNER_PHILIPS_FM1236_MK3;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ core->board.tuner_type = TUNER_PHILIPS_FM1216ME_MK3;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
|
|
info_printk(core, "Leadtek Winfast 2000XP Expert config: "
|
|
info_printk(core, "Leadtek Winfast 2000XP Expert config: "
|
|
"tuner=%d, eeprom[0]=0x%02x\n",
|
|
"tuner=%d, eeprom[0]=0x%02x\n",
|
|
@@ -2713,7 +2765,6 @@ static int cx88_xc2028_tuner_callback(struct cx88_core *core,
|
|
{
|
|
{
|
|
/* Board-specific callbacks */
|
|
/* Board-specific callbacks */
|
|
switch (core->boardnr) {
|
|
switch (core->boardnr) {
|
|
- case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
|
|
|
|
case CX88_BOARD_POWERCOLOR_REAL_ANGEL:
|
|
case CX88_BOARD_POWERCOLOR_REAL_ANGEL:
|
|
case CX88_BOARD_GENIATECH_X8000_MT:
|
|
case CX88_BOARD_GENIATECH_X8000_MT:
|
|
case CX88_BOARD_KWORLD_ATSC_120:
|
|
case CX88_BOARD_KWORLD_ATSC_120:
|
|
@@ -2725,6 +2776,7 @@ static int cx88_xc2028_tuner_callback(struct cx88_core *core,
|
|
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
|
|
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
|
|
case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
|
|
case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
|
|
return cx88_dvico_xc2028_callback(core, command, arg);
|
|
return cx88_dvico_xc2028_callback(core, command, arg);
|
|
|
|
+ case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
|
|
case CX88_BOARD_WINFAST_DTV1800H:
|
|
case CX88_BOARD_WINFAST_DTV1800H:
|
|
return cx88_xc3028_winfast1800h_callback(core, command, arg);
|
|
return cx88_xc3028_winfast1800h_callback(core, command, arg);
|
|
}
|
|
}
|
|
@@ -2914,6 +2966,7 @@ static void cx88_card_setup_pre_i2c(struct cx88_core *core)
|
|
udelay(1000);
|
|
udelay(1000);
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
|
|
case CX88_BOARD_WINFAST_DTV1800H:
|
|
case CX88_BOARD_WINFAST_DTV1800H:
|
|
/* GPIO 12 (xc3028 tuner reset) */
|
|
/* GPIO 12 (xc3028 tuner reset) */
|
|
cx_set(MO_GP1_IO, 0x1010);
|
|
cx_set(MO_GP1_IO, 0x1010);
|
|
@@ -2950,6 +3003,7 @@ void cx88_setup_xc3028(struct cx88_core *core, struct xc2028_ctrl *ctl)
|
|
case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
|
|
case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
|
|
ctl->demod = XC3028_FE_OREN538;
|
|
ctl->demod = XC3028_FE_OREN538;
|
|
break;
|
|
break;
|
|
|
|
+ case CX88_BOARD_WINFAST_TV2000_XP_GLOBAL:
|
|
case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME:
|
|
case CX88_BOARD_PROLINK_PV_GLOBAL_XTREME:
|
|
case CX88_BOARD_PROLINK_PV_8000GT:
|
|
case CX88_BOARD_PROLINK_PV_8000GT:
|
|
/*
|
|
/*
|
|
@@ -2993,6 +3047,8 @@ static void cx88_card_setup(struct cx88_core *core)
|
|
if (0 == core->i2c_rc)
|
|
if (0 == core->i2c_rc)
|
|
gdi_eeprom(core, eeprom);
|
|
gdi_eeprom(core, eeprom);
|
|
break;
|
|
break;
|
|
|
|
+ case CX88_BOARD_LEADTEK_PVR2000:
|
|
|
|
+ case CX88_BOARD_WINFAST_DV2000:
|
|
case CX88_BOARD_WINFAST2000XP_EXPERT:
|
|
case CX88_BOARD_WINFAST2000XP_EXPERT:
|
|
if (0 == core->i2c_rc)
|
|
if (0 == core->i2c_rc)
|
|
leadtek_eeprom(core, eeprom);
|
|
leadtek_eeprom(core, eeprom);
|