Commit 0e0351e3 authored by Vadim Catana's avatar Vadim Catana Committed by Mauro Carvalho Chehab

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: default avatarVadim Catana <skystar@moldova.cc>
Acked-by: default avatarJohannes Stezenbach <js@linuxtv.org>
Signed-off-by: default avatarMichael Krufky <mkrufky@m1k.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@brturbo.com.br>
parent fb56cb65
...@@ -37,3 +37,4 @@ ...@@ -37,3 +37,4 @@
36 -> AVerTV 303 (M126) [1461:000a] 36 -> AVerTV 303 (M126) [1461:000a]
37 -> Hauppauge Nova-S-Plus DVB-S [0070:9201,0070:9202] 37 -> Hauppauge Nova-S-Plus DVB-S [0070:9201,0070:9202]
38 -> Hauppauge Nova-SE2 DVB-S [0070:9200] 38 -> Hauppauge Nova-SE2 DVB-S [0070:9200]
39 -> KWorld DVB-S 100 [17de:08b2]
...@@ -928,6 +928,24 @@ struct cx88_board cx88_boards[] = { ...@@ -928,6 +928,24 @@ struct cx88_board cx88_boards[] = {
}}, }},
.dvb = 1, .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); const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
...@@ -1087,6 +1105,10 @@ struct cx88_subid cx88_subids[] = { ...@@ -1087,6 +1105,10 @@ struct cx88_subid cx88_subids[] = {
.subvendor = 0x0070, .subvendor = 0x0070,
.subdevice = 0x9202, .subdevice = 0x9202,
.card = CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1, .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); const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);
...@@ -1260,6 +1282,10 @@ void cx88_card_setup(struct cx88_core *core) ...@@ -1260,6 +1282,10 @@ void cx88_card_setup(struct cx88_core *core)
if (0 == core->i2c_rc) if (0 == core->i2c_rc)
hauppauge_eeprom(core,eeprom); hauppauge_eeprom(core,eeprom);
break; 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_T1:
case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS:
/* GPIO0:0 is hooked to mt352 reset pin */ /* GPIO0:0 is hooked to mt352 reset pin */
......
...@@ -326,10 +326,29 @@ static int cx24123_set_ts_param(struct dvb_frontend* fe, ...@@ -326,10 +326,29 @@ static int cx24123_set_ts_param(struct dvb_frontend* fe,
return 0; 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 = { static struct cx24123_config hauppauge_novas_config = {
.demod_address = 0x55, .demod_address = 0x55,
.use_isl6421 = 1,
.set_ts_params = cx24123_set_ts_param, .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 #endif
static int dvb_register(struct cx8802_dev *dev) static int dvb_register(struct cx8802_dev *dev)
...@@ -445,6 +464,10 @@ static int dvb_register(struct cx8802_dev *dev) ...@@ -445,6 +464,10 @@ static int dvb_register(struct cx8802_dev *dev)
dev->dvb.frontend = cx24123_attach(&hauppauge_novas_config, dev->dvb.frontend = cx24123_attach(&hauppauge_novas_config,
&dev->core->i2c_adap); &dev->core->i2c_adap);
break; break;
case CX88_BOARD_KWORLD_DVBS_100:
dev->dvb.frontend = cx24123_attach(&kworld_dvbs_100_config,
&dev->core->i2c_adap);
break;
#endif #endif
default: default:
printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n", 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[]; ...@@ -181,6 +181,7 @@ extern struct sram_channel cx88_sram_channels[];
#define CX88_BOARD_AVERTV_303 36 #define CX88_BOARD_AVERTV_303 36
#define CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1 37 #define CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1 37
#define CX88_BOARD_HAUPPAUGE_NOVASE2_S1 38 #define CX88_BOARD_HAUPPAUGE_NOVASE2_S1 38
#define CX88_BOARD_KWORLD_DVBS_100 39
enum cx88_itype { enum cx88_itype {
CX88_VMUX_COMPOSITE1 = 1, 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