diff options
Diffstat (limited to 'drivers/media/video/cx88/cx88-dvb.c')
-rw-r--r-- | drivers/media/video/cx88/cx88-dvb.c | 35 |
1 files changed, 35 insertions, 0 deletions
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 | ||
135 | static 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 | |||
135 | static int dntv_live_dvbt_demod_init(struct dvb_frontend* fe) | 156 | static 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 | ||
204 | static 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 |
184 | static int philips_fmd1216_pll_init(struct dvb_frontend *fe) | 211 | static 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: |