V4L (1007): Add support for KWorld DVB-S 100
- Add support for KWorld DVB-S 100, based on the same chips as Hauppauge Nova-S Plus (CX23883/CX24123/CX24109), without the Intersil ISL6421, which is used for LNB control. - LNB voltage and tone are controled by LNBDC and LNBTone bits from register 0x29 of the CX24123 demodulator. - The MO_GP0_IO register from CX23883 is used to turn LNB power on and off. Signed-off-by: Vadim Catana <skystar@moldova.cc> Acked-by: Johannes Stezenbach <js@linuxtv.org> Signed-off-by: Michael Krufky <mkrufky@m1k.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
This commit is contained in:
parent
fb56cb65e4
commit
0e0351e370
|
@ -37,3 +37,4 @@
|
|||
36 -> AVerTV 303 (M126) [1461:000a]
|
||||
37 -> Hauppauge Nova-S-Plus DVB-S [0070:9201,0070:9202]
|
||||
38 -> Hauppauge Nova-SE2 DVB-S [0070:9200]
|
||||
39 -> KWorld DVB-S 100 [17de:08b2]
|
||||
|
|
|
@ -928,6 +928,24 @@ struct cx88_board cx88_boards[] = {
|
|||
}},
|
||||
.dvb = 1,
|
||||
},
|
||||
[CX88_BOARD_KWORLD_DVBS_100] = {
|
||||
.name = "KWorld DVB-S 100",
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.radio_type = UNSET,
|
||||
.tuner_addr = ADDR_UNSET,
|
||||
.radio_addr = ADDR_UNSET,
|
||||
.input = {{
|
||||
.type = CX88_VMUX_DVB,
|
||||
.vmux = 0,
|
||||
},{
|
||||
.type = CX88_VMUX_COMPOSITE1,
|
||||
.vmux = 1,
|
||||
},{
|
||||
.type = CX88_VMUX_SVIDEO,
|
||||
.vmux = 2,
|
||||
}},
|
||||
.dvb = 1,
|
||||
},
|
||||
};
|
||||
const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
|
||||
|
||||
|
@ -1087,6 +1105,10 @@ struct cx88_subid cx88_subids[] = {
|
|||
.subvendor = 0x0070,
|
||||
.subdevice = 0x9202,
|
||||
.card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1,
|
||||
},{
|
||||
.subvendor = 0x17de,
|
||||
.subdevice = 0x08b2,
|
||||
.card = CX88_BOARD_KWORLD_DVBS_100,
|
||||
},
|
||||
};
|
||||
const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);
|
||||
|
@ -1260,6 +1282,10 @@ void cx88_card_setup(struct cx88_core *core)
|
|||
if (0 == core->i2c_rc)
|
||||
hauppauge_eeprom(core,eeprom);
|
||||
break;
|
||||
case CX88_BOARD_KWORLD_DVBS_100:
|
||||
cx_write(MO_GP0_IO, 0x000007f8);
|
||||
cx_write(MO_GP1_IO, 0x00000001);
|
||||
break;
|
||||
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:
|
||||
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS:
|
||||
/* GPIO0:0 is hooked to mt352 reset pin */
|
||||
|
|
|
@ -326,9 +326,28 @@ static int cx24123_set_ts_param(struct dvb_frontend* fe,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void cx24123_enable_lnb_voltage(struct dvb_frontend* fe, int on)
|
||||
{
|
||||
struct cx8802_dev *dev= fe->dvb->priv;
|
||||
struct cx88_core *core = dev->core;
|
||||
|
||||
if (on)
|
||||
cx_write(MO_GP0_IO, 0x000006f9);
|
||||
else
|
||||
cx_write(MO_GP0_IO, 0x000006fB);
|
||||
}
|
||||
|
||||
static struct cx24123_config hauppauge_novas_config = {
|
||||
.demod_address = 0x55,
|
||||
.set_ts_params = cx24123_set_ts_param,
|
||||
.demod_address = 0x55,
|
||||
.use_isl6421 = 1,
|
||||
.set_ts_params = cx24123_set_ts_param,
|
||||
};
|
||||
|
||||
static struct cx24123_config kworld_dvbs_100_config = {
|
||||
.demod_address = 0x15,
|
||||
.use_isl6421 = 0,
|
||||
.set_ts_params = cx24123_set_ts_param,
|
||||
.enable_lnb_voltage = cx24123_enable_lnb_voltage,
|
||||
};
|
||||
#endif
|
||||
|
||||
|
@ -445,6 +464,10 @@ static int dvb_register(struct cx8802_dev *dev)
|
|||
dev->dvb.frontend = cx24123_attach(&hauppauge_novas_config,
|
||||
&dev->core->i2c_adap);
|
||||
break;
|
||||
case CX88_BOARD_KWORLD_DVBS_100:
|
||||
dev->dvb.frontend = cx24123_attach(&kworld_dvbs_100_config,
|
||||
&dev->core->i2c_adap);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n",
|
||||
|
|
|
@ -181,6 +181,7 @@ extern struct sram_channel cx88_sram_channels[];
|
|||
#define CX88_BOARD_AVERTV_303 36
|
||||
#define CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1 37
|
||||
#define CX88_BOARD_HAUPPAUGE_NOVASE2_S1 38
|
||||
#define CX88_BOARD_KWORLD_DVBS_100 39
|
||||
|
||||
enum cx88_itype {
|
||||
CX88_VMUX_COMPOSITE1 = 1,
|
||||
|
|
Loading…
Reference in a new issue