Commit b3fb91d2 authored by Chris Pascoe's avatar Chris Pascoe Committed by Mauro Carvalho Chehab

V4L/DVB (7258): Support DVB-T tuning on the DViCO FusionHDTV DVB-T Pro

Add support for tuning DVB-T channels on DViCO's FusionHDTV DVB-T Pro board.

The IR remote and analog tuner are not supported at this time.

Some changes made by Mauro Chehab to allow merging it with some other xc3028
patches.
Signed-off-by: default avatarChris Pascoe <c.pascoe@itee.uq.edu.au>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 9507901e
......@@ -62,3 +62,4 @@
61 -> Winfast TV2000 XP Global [107d:6f18]
62 -> PowerColor Real Angel 330 [14f1:ea3d]
63 -> Geniatech X8000-MT DVBT [14f1:8852]
64 -> DViCO FusionHDTV DVB-T PRO [18ac:db30]
......@@ -1543,7 +1543,24 @@ static const struct cx88_board cx88_boards[] = {
.gpio3 = 0x00000000,
},
.mpeg = CX88_MPEG_DVB,
}
},
[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = {
.name = "DViCO FusionHDTV DVB-T PRO",
.tuner_type = TUNER_ABSENT, /* XXX: Has XC3028 */
.radio_type = UNSET,
.tuner_addr = ADDR_UNSET,
.radio_addr = ADDR_UNSET,
.input = { {
.type = CX88_VMUX_COMPOSITE1,
.vmux = 1,
.gpio0 = 0x000067df,
}, {
.type = CX88_VMUX_SVIDEO,
.vmux = 2,
.gpio0 = 0x000067df,
} },
.mpeg = CX88_MPEG_DVB,
},
};
/* ------------------------------------------------------------------ */
......@@ -1748,7 +1765,11 @@ static const struct cx88_subid cx88_subids[] = {
.subdevice = 0xdb11,
.card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS,
/* Re-branded DViCO: UltraView DVB-T Plus */
},{
}, {
.subvendor = 0x18ac,
.subdevice = 0xdb30,
.card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO,
}, {
.subvendor = 0x17de,
.subdevice = 0x0840,
.card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT,
......@@ -2009,6 +2030,28 @@ static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data)
CX88_RADIO : 0;
}
/* ------------------------------------------------------------------- */
/* some Divco specific stuff */
static int cx88_dvico_xc2028_callback(void *ptr, int command, int arg)
{
struct cx88_core *core = ptr;
switch (command) {
case XC2028_TUNER_RESET:
cx_set(MO_GP0_IO, 0x0200);
cx_clear(MO_GP0_IO, 0x02);
mdelay(100);
cx_set(MO_GP0_IO, 0x02);
mdelay(100);
break;
default:
return -EINVAL;
}
return 0;
}
/* ----------------------------------------------------------------------- */
/* some Geniatech specific stuff */
......@@ -2098,6 +2141,8 @@ static int cx88_xc2028_tuner_callback(void *priv, int command, int arg)
case CX88_BOARD_POWERCOLOR_REAL_ANGEL:
case CX88_BOARD_GENIATECH_X8000_MT:
return cx88_xc3028_geniatech_tuner_callback(priv, command, arg);
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
return cx88_dvico_xc2028_callback(priv, command, arg);
}
switch (command) {
......@@ -2267,6 +2312,7 @@ static void cx88_card_setup(struct cx88_core *core)
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS:
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID:
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
/* GPIO0:0 is hooked to mt352 reset pin */
cx_set(MO_GP0_IO, 0x00000101);
cx_clear(MO_GP0_IO, 0x00000001);
......@@ -2338,9 +2384,18 @@ static void cx88_card_setup(struct cx88_core *core)
ctl.fname = XC2028_DEFAULT_FIRMWARE;
ctl.max_len = 64;
/* FIXME: Those should be device-dependent */
ctl.demod = XC3028_FE_OREN538;
ctl.mts = 1;
switch (core->boardnr) {
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
ctl.scode_table = XC3028_FE_ZARLINK456;
break;
case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
ctl.demod = XC3028_FE_OREN538;
break;
default:
ctl.demod = XC3028_FE_OREN538;
ctl.mts = 1;
}
xc2028_cfg.tuner = TUNER_XC2028;
xc2028_cfg.priv = &ctl;
......
......@@ -237,6 +237,19 @@ static struct zl10353_config dvico_fusionhdtv_hybrid = {
.no_tuner = 1,
};
static struct zl10353_config dvico_fusionhdtv_xc3028 = {
.demod_address = 0x0f,
.if2 = 45600,
.no_tuner = 1,
};
static struct mt352_config dvico_fusionhdtv_mt352_xc3028 = {
.demod_address = 0x0f,
.if2 = 4560,
.no_tuner = 1,
.demod_init = dvico_fusionhdtv_demod_init,
};
static struct zl10353_config dvico_fusionhdtv_plus_v1_1 = {
.demod_address = 0x0f,
};
......@@ -567,6 +580,16 @@ static int dvb_register(struct cx8802_dev *dev)
DVB_PLL_THOMSON_FE6600);
}
break;
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO:
dev->dvb.frontend = dvb_attach(zl10353_attach,
&dvico_fusionhdtv_xc3028,
&dev->core->i2c_adap);
if (dev->dvb.frontend == NULL)
dev->dvb.frontend = dvb_attach(mt352_attach,
&dvico_fusionhdtv_mt352_xc3028,
&dev->core->i2c_adap);
attach_xc3028 = 1;
break;
case CX88_BOARD_PCHDTV_HD3000:
dev->dvb.frontend = dvb_attach(or51132_attach, &pchdtv_hd3000,
&dev->core->i2c_adap);
......
......@@ -216,6 +216,7 @@ extern struct sram_channel cx88_sram_channels[];
#define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL 61
#define CX88_BOARD_POWERCOLOR_REAL_ANGEL 62
#define CX88_BOARD_GENIATECH_X8000_MT 63
#define CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO 64
enum cx88_itype {
CX88_VMUX_COMPOSITE1 = 1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment