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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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]
+26 −0
Original line number Diff line number Diff line
@@ -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 */
+25 −2
Original line number Diff line number Diff line
@@ -326,10 +326,29 @@ 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,
	.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

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->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",
+1 −0
Original line number Diff line number Diff line
@@ -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,