|
@@ -1976,6 +1976,47 @@ static const struct cx88_board cx88_boards[] = {
|
|
.tuner_addr = ADDR_UNSET,
|
|
.tuner_addr = ADDR_UNSET,
|
|
.radio_addr = ADDR_UNSET,
|
|
.radio_addr = ADDR_UNSET,
|
|
},
|
|
},
|
|
|
|
+ [CX88_BOARD_WINFAST_DTV1800H] = {
|
|
|
|
+ .name = "Leadtek WinFast DTV1800 Hybrid",
|
|
|
|
+ .tuner_type = TUNER_XC2028,
|
|
|
|
+ .radio_type = TUNER_XC2028,
|
|
|
|
+ .tuner_addr = 0x61,
|
|
|
|
+ .radio_addr = 0x61,
|
|
|
|
+ /*
|
|
|
|
+ * GPIO setting
|
|
|
|
+ *
|
|
|
|
+ * 2: mute (0=off,1=on)
|
|
|
|
+ * 12: tuner reset pin
|
|
|
|
+ * 13: audio source (0=tuner audio,1=line in)
|
|
|
|
+ * 14: FM (0=on,1=off ???)
|
|
|
|
+ */
|
|
|
|
+ .input = {{
|
|
|
|
+ .type = CX88_VMUX_TELEVISION,
|
|
|
|
+ .vmux = 0,
|
|
|
|
+ .gpio0 = 0x0400, /* pin 2 = 0 */
|
|
|
|
+ .gpio1 = 0x6040, /* pin 13 = 0, pin 14 = 1 */
|
|
|
|
+ .gpio2 = 0x0000,
|
|
|
|
+ }, {
|
|
|
|
+ .type = CX88_VMUX_COMPOSITE1,
|
|
|
|
+ .vmux = 1,
|
|
|
|
+ .gpio0 = 0x0400, /* pin 2 = 0 */
|
|
|
|
+ .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */
|
|
|
|
+ .gpio2 = 0x0000,
|
|
|
|
+ }, {
|
|
|
|
+ .type = CX88_VMUX_SVIDEO,
|
|
|
|
+ .vmux = 2,
|
|
|
|
+ .gpio0 = 0x0400, /* pin 2 = 0 */
|
|
|
|
+ .gpio1 = 0x6060, /* pin 13 = 1, pin 14 = 1 */
|
|
|
|
+ .gpio2 = 0x0000,
|
|
|
|
+ } },
|
|
|
|
+ .radio = {
|
|
|
|
+ .type = CX88_RADIO,
|
|
|
|
+ .gpio0 = 0x0400, /* pin 2 = 0 */
|
|
|
|
+ .gpio1 = 0x6000, /* pin 13 = 0, pin 14 = 0 */
|
|
|
|
+ .gpio2 = 0x0000,
|
|
|
|
+ },
|
|
|
|
+ .mpeg = CX88_MPEG_DVB,
|
|
|
|
+ },
|
|
};
|
|
};
|
|
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
/* ------------------------------------------------------------------ */
|
|
@@ -2393,6 +2434,10 @@ static const struct cx88_subid cx88_subids[] = {
|
|
.subvendor = 0x0070,
|
|
.subvendor = 0x0070,
|
|
.subdevice = 0x9290,
|
|
.subdevice = 0x9290,
|
|
.card = CX88_BOARD_HAUPPAUGE_IRONLY,
|
|
.card = CX88_BOARD_HAUPPAUGE_IRONLY,
|
|
|
|
+ }, {
|
|
|
|
+ .subvendor = 0x107d,
|
|
|
|
+ .subdevice = 0x6654,
|
|
|
|
+ .card = CX88_BOARD_WINFAST_DTV1800H,
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|
|
@@ -2591,6 +2636,23 @@ static int cx88_xc3028_geniatech_tuner_callback(struct cx88_core *core,
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int cx88_xc3028_winfast1800h_callback(struct cx88_core *core,
|
|
|
|
+ int command, int arg)
|
|
|
|
+{
|
|
|
|
+ switch (command) {
|
|
|
|
+ case XC2028_TUNER_RESET:
|
|
|
|
+ /* GPIO 12 (xc3028 tuner reset) */
|
|
|
|
+ cx_set(MO_GP1_IO, 0x1010);
|
|
|
|
+ mdelay(50);
|
|
|
|
+ cx_clear(MO_GP1_IO, 0x10);
|
|
|
|
+ mdelay(50);
|
|
|
|
+ cx_set(MO_GP1_IO, 0x10);
|
|
|
|
+ mdelay(50);
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+ return -EINVAL;
|
|
|
|
+}
|
|
|
|
+
|
|
/* ------------------------------------------------------------------- */
|
|
/* ------------------------------------------------------------------- */
|
|
/* some Divco specific stuff */
|
|
/* some Divco specific stuff */
|
|
static int cx88_pv_8000gt_callback(struct cx88_core *core,
|
|
static int cx88_pv_8000gt_callback(struct cx88_core *core,
|
|
@@ -2663,6 +2725,8 @@ 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_DTV1800H:
|
|
|
|
+ return cx88_xc3028_winfast1800h_callback(core, command, arg);
|
|
}
|
|
}
|
|
|
|
|
|
switch (command) {
|
|
switch (command) {
|
|
@@ -2849,6 +2913,16 @@ static void cx88_card_setup_pre_i2c(struct cx88_core *core)
|
|
cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */
|
|
cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */
|
|
udelay(1000);
|
|
udelay(1000);
|
|
break;
|
|
break;
|
|
|
|
+
|
|
|
|
+ case CX88_BOARD_WINFAST_DTV1800H:
|
|
|
|
+ /* GPIO 12 (xc3028 tuner reset) */
|
|
|
|
+ cx_set(MO_GP1_IO, 0x1010);
|
|
|
|
+ mdelay(50);
|
|
|
|
+ cx_clear(MO_GP1_IO, 0x10);
|
|
|
|
+ mdelay(50);
|
|
|
|
+ cx_set(MO_GP1_IO, 0x10);
|
|
|
|
+ mdelay(50);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2869,6 +2943,7 @@ void cx88_setup_xc3028(struct cx88_core *core, struct xc2028_ctrl *ctl)
|
|
core->i2c_algo.udelay = 16;
|
|
core->i2c_algo.udelay = 16;
|
|
break;
|
|
break;
|
|
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
|
|
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
|
|
|
|
+ case CX88_BOARD_WINFAST_DTV1800H:
|
|
ctl->demod = XC3028_FE_ZARLINK456;
|
|
ctl->demod = XC3028_FE_ZARLINK456;
|
|
break;
|
|
break;
|
|
case CX88_BOARD_KWORLD_ATSC_120:
|
|
case CX88_BOARD_KWORLD_ATSC_120:
|