diff options
-rw-r--r-- | Documentation/video4linux/CARDLIST.cx88 | 1 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 22 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-dvb.c | 35 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88.h | 1 |
4 files changed, 59 insertions, 0 deletions
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 index 3d02b1f27d28..34b6e59f2968 100644 --- a/Documentation/video4linux/CARDLIST.cx88 +++ b/Documentation/video4linux/CARDLIST.cx88 | |||
@@ -42,3 +42,4 @@ | |||
42 | 41 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) [0070:9800,0070:9802] | 42 | 41 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) [0070:9800,0070:9802] |
43 | 42 -> digitalnow DNTV Live! DVB-T Pro [1822:0025] | 43 | 42 -> digitalnow DNTV Live! DVB-T Pro [1822:0025] |
44 | 43 -> KWorld/VStream XPert DVB-T with cx22702 [17de:08a1] | 44 | 43 -> KWorld/VStream XPert DVB-T with cx22702 [17de:08a1] |
45 | 44 -> DViCO FusionHDTV DVB-T Dual Digital [18ac:db50] | ||
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 | }; |
1036 | const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); | 1053 | const 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 | }; |
1228 | const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); | 1249 | const 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 | ||
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: |
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 | ||
190 | enum cx88_itype { | 191 | enum cx88_itype { |
191 | CX88_VMUX_COMPOSITE1 = 1, | 192 | CX88_VMUX_COMPOSITE1 = 1, |