aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/cx88/cx88-cards.c22
-rw-r--r--drivers/media/video/cx88/cx88-dvb.c35
-rw-r--r--drivers/media/video/cx88/cx88.h1
3 files changed, 58 insertions, 0 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index ae2fdf62c8ba..a5b939622f82 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -1031,6 +1031,23 @@ struct cx88_board cx88_boards[] = {
1031 }}, 1031 }},
1032 .dvb = 1, 1032 .dvb = 1,
1033 }, 1033 },
1034 [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = {
1035 .name = "DViCO FusionHDTV DVB-T Dual Digital",
1036 .tuner_type = TUNER_ABSENT, /* No analog tuner */
1037 .radio_type = UNSET,
1038 .tuner_addr = ADDR_UNSET,
1039 .radio_addr = ADDR_UNSET,
1040 .input = {{
1041 .type = CX88_VMUX_COMPOSITE1,
1042 .vmux = 1,
1043 .gpio0 = 0x000027df,
1044 },{
1045 .type = CX88_VMUX_SVIDEO,
1046 .vmux = 2,
1047 .gpio0 = 0x000027df,
1048 }},
1049 .dvb = 1,
1050 },
1034 1051
1035}; 1052};
1036const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); 1053const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
@@ -1223,6 +1240,10 @@ struct cx88_subid cx88_subids[] = {
1223 .subvendor = 0x17de, 1240 .subvendor = 0x17de,
1224 .subdevice = 0x08a1, 1241 .subdevice = 0x08a1,
1225 .card = CX88_BOARD_KWORLD_DVB_T_CX22702, 1242 .card = CX88_BOARD_KWORLD_DVB_T_CX22702,
1243 },{
1244 .subvendor = 0x18ac,
1245 .subdevice = 0xdb50,
1246 .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL,
1226 } 1247 }
1227}; 1248};
1228const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); 1249const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);
@@ -1405,6 +1426,7 @@ void cx88_card_setup(struct cx88_core *core)
1405 break; 1426 break;
1406 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: 1427 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:
1407 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: 1428 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS:
1429 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL:
1408 /* GPIO0:0 is hooked to mt352 reset pin */ 1430 /* GPIO0:0 is hooked to mt352 reset pin */
1409 cx_set(MO_GP0_IO, 0x00000101); 1431 cx_set(MO_GP0_IO, 0x00000101);
1410 cx_clear(MO_GP0_IO, 0x00000001); 1432 cx_clear(MO_GP0_IO, 0x00000001);
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index dad8a0d564fb..8a5997bf4ccd 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -132,6 +132,27 @@ static int generic_mt352_demod_init(struct dvb_frontend* fe)
132 return 0; 132 return 0;
133} 133}
134 134
135static int dvico_dual_demod_init(struct dvb_frontend *fe)
136{
137 static u8 clock_config [] = { CLOCK_CTL, 0x38, 0x38 };
138 static u8 reset [] = { RESET, 0x80 };
139 static u8 adc_ctl_1_cfg [] = { ADC_CTL_1, 0x40 };
140 static u8 agc_cfg [] = { AGC_TARGET, 0x28, 0x20 };
141 static u8 gpp_ctl_cfg [] = { GPP_CTL, 0x33 };
142 static u8 capt_range_cfg[] = { CAPT_RANGE, 0x32 };
143
144 mt352_write(fe, clock_config, sizeof(clock_config));
145 udelay(200);
146 mt352_write(fe, reset, sizeof(reset));
147 mt352_write(fe, adc_ctl_1_cfg, sizeof(adc_ctl_1_cfg));
148
149 mt352_write(fe, agc_cfg, sizeof(agc_cfg));
150 mt352_write(fe, gpp_ctl_cfg, sizeof(gpp_ctl_cfg));
151 mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg));
152
153 return 0;
154}
155
135static int dntv_live_dvbt_demod_init(struct dvb_frontend* fe) 156static int dntv_live_dvbt_demod_init(struct dvb_frontend* fe)
136{ 157{
137 static u8 clock_config [] = { 0x89, 0x38, 0x39 }; 158 static u8 clock_config [] = { 0x89, 0x38, 0x39 };
@@ -180,6 +201,12 @@ static struct mt352_config dntv_live_dvbt_config = {
180 .pll_set = mt352_pll_set, 201 .pll_set = mt352_pll_set,
181}; 202};
182 203
204static struct mt352_config dvico_fusionhdtv_dual = {
205 .demod_address = 0x0F,
206 .demod_init = dvico_dual_demod_init,
207 .pll_set = mt352_pll_set,
208};
209
183#ifdef HAVE_VP3054_I2C 210#ifdef HAVE_VP3054_I2C
184static int philips_fmd1216_pll_init(struct dvb_frontend *fe) 211static int philips_fmd1216_pll_init(struct dvb_frontend *fe)
185{ 212{
@@ -481,6 +508,14 @@ static int dvb_register(struct cx8802_dev *dev)
481 printk("%s: built without vp3054 support\n", dev->core->name); 508 printk("%s: built without vp3054 support\n", dev->core->name);
482#endif 509#endif
483 break; 510 break;
511 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL:
512 /* The tin box says DEE1601, but it seems to be DTT7579
513 * compatible, with a slightly different MT352 AGC gain. */
514 dev->core->pll_addr = 0x61;
515 dev->core->pll_desc = &dvb_pll_thomson_dtt7579;
516 dev->dvb.frontend = mt352_attach(&dvico_fusionhdtv_dual,
517 &dev->core->i2c_adap);
518 break;
484#endif 519#endif
485#ifdef HAVE_OR51132 520#ifdef HAVE_OR51132
486 case CX88_BOARD_PCHDTV_HD3000: 521 case CX88_BOARD_PCHDTV_HD3000:
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
index 120e5049a46f..e9fd55b57fa6 100644
--- a/drivers/media/video/cx88/cx88.h
+++ b/drivers/media/video/cx88/cx88.h
@@ -186,6 +186,7 @@ extern struct sram_channel cx88_sram_channels[];
186#define CX88_BOARD_HAUPPAUGE_HVR1100LP 41 186#define CX88_BOARD_HAUPPAUGE_HVR1100LP 41
187#define CX88_BOARD_DNTV_LIVE_DVB_T_PRO 42 187#define CX88_BOARD_DNTV_LIVE_DVB_T_PRO 42
188#define CX88_BOARD_KWORLD_DVB_T_CX22702 43 188#define CX88_BOARD_KWORLD_DVB_T_CX22702 43
189#define CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL 44
189 190
190enum cx88_itype { 191enum cx88_itype {
191 CX88_VMUX_COMPOSITE1 = 1, 192 CX88_VMUX_COMPOSITE1 = 1,