#Sign-off:Saqeb Akhter<br>#Changes: Fix set_voltage bug? , Geniatech Digistar support aka Digiwave 103g<br>diff -r 914c7104feef linux/drivers/media/dvb/frontends/cx24123.c<br>--- a/linux/drivers/media/dvb/frontends/cx24123.c Sun Jun 25 12:47:36 2006
<br>+++ b/linux/drivers/media/dvb/frontends/cx24123.c Sun Jun 25 15:06:26 2006<br>@@ -681,10 +681,10 @@<br> switch (voltage) {<br> case SEC_VOLTAGE_13:<br> dprintk("%s: setting voltage 13V\n", __FUNCTION__);
<br>- return cx24123_writereg(state, 0x29, val | 0x80);<br>+ return cx24123_writereg(state, 0x29, val & 0x7f);<br> case SEC_VOLTAGE_18:<br> dprintk("%s: setting voltage 18V\n", __FUNCTION__);
<br>- return cx24123_writereg(state, 0x29, val & 0x7f);<br>+ return cx24123_writereg(state, 0x29, val | 0x80);<br> default:<br> return -EINVAL;<br> };<br>diff -r 914c7104feef linux/drivers/media/video/cx88/cx88-
cards.c<br>--- a/linux/drivers/media/video/cx88/cx88-cards.c Sun Jun 25 12:47:36 2006<br>+++ b/linux/drivers/media/video/cx88/cx88-cards.c Sun Jun 25 15:06:26 2006<br>@@ -1227,6 +1227,24 @@<br> }},<br> .dvb = 1,
<br> },<br>+<br>+[CX88_BOARD_GENIATECH_DVBS] = {<br>+ .name = "Geniatech DVB-S",<br>+ .tuner_type = TUNER_ABSENT,<br>+ .radio_type = UNSET,<br>+ .tuner_addr = ADDR_UNSET,
<br>+ .radio_addr = ADDR_UNSET,<br>+ .input = {{<br>+ .type = CX88_VMUX_DVB,<br>+ .vmux = 0,<br>+ },{<br>+ .type = CX88_VMUX_COMPOSITE1,
<br>+ .vmux = 1,<br>+ }},<br>+ .dvb = 1,<br>+ },<br>+<br>+<br> };<br> const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);<br> <br>@@ -1472,6 +1490,12 @@<br> .subvendor = 0x18ac,
<br> .subdevice = 0xd800, /* FusionHDTV 3 Gold (original revision) */<br> .card = CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q,<br>+ },{<br>+<br>+ .subvendor = 0x14f1,<br>+ .subdevice = 0x0084,
<br>+ .card = CX88_BOARD_GENIATECH_DVBS,<br>+<br> },<br> };<br> const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);<br>diff -r 914c7104feef linux/drivers/media/video/cx88/cx88-dvb.c<br>--- a/linux/drivers/media/video/cx88/cx88-
dvb.c Sun Jun 25 12:47:36 2006<br>+++ b/linux/drivers/media/video/cx88/cx88-dvb.c Sun Jun 25 15:06:26 2006<br>@@ -497,6 +497,29 @@<br> return 0;<br> }<br> <br>+static int geniatech_dvbs_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
<br>+{<br>+ struct cx8802_dev *dev= fe->dvb->priv;<br>+ struct cx88_core *core = dev->core;<br>+ switch (voltage) {<br>+ case SEC_VOLTAGE_OFF:<br>+ printk("%s: LNB Voltage OFF\n", __func__);
<br>+ cx_write(MO_GP0_IO, 0x0000efff);<br>+ break;<br>+ default:<br>+ break;<br>+ }<br>+ if (core->prev_set_voltage)<br>+ return core->prev_set_voltage(fe, voltage);
<br>+return 0;<br>+}<br>+<br>+static struct cx24123_config geniatech_dvbs_config = {<br>+ .demod_address = 0x55,<br>+ .set_ts_params = cx24123_set_ts_param,<br>+};<br>+<br>+<br> static struct cx24123_config hauppauge_novas_config = {
<br> .demod_address = 0x55,<br> .set_ts_params = cx24123_set_ts_param,<br>@@ -761,6 +784,16 @@<br> dev->dvb.frontend->ops.set_voltage = kworld_dvbs_100_set_voltage;<br> }<br>
break;<br>+<br>+<br>+ case CX88_BOARD_GENIATECH_DVBS:<br>+ dev->dvb.frontend = cx24123_attach(&geniatech_dvbs_config,<br>+ &dev->core->i2c_adap);<br>+ if (dev->
dvb.frontend) {<br>+ dev->core->prev_set_voltage = dev->dvb.frontend->ops.set_voltage;<br>+ dev->dvb.frontend->ops.set_voltage = geniatech_dvbs_set_voltage;<br>+ }
<br>+ break;<br> #endif<br> default:<br> printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n",<br>diff -r 914c7104feef linux/drivers/media/video/cx88/cx88.h<br>--- a/linux/drivers/media/video/cx88/cx88.h Sun Jun 25 12:47:36 2006
<br>+++ b/linux/drivers/media/video/cx88/cx88.h Sun Jun 25 15:06:26 2006<br>@@ -204,6 +204,7 @@<br> #define CX88_BOARD_PIXELVIEW_PLAYTV_P7000 49<br> #define CX88_BOARD_NPGTECH_REALTV_TOP10FM 50<br> #define CX88_BOARD_WINFAST_DTV2000H 51
<br>+#define CX88_BOARD_GENIATECH_DVBS 52<br> <br> enum cx88_itype {<br> CX88_VMUX_COMPOSITE1 = 1,<br><br>