Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 227ad4ab authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB (7596): em28xx-dvb: Add support for HVR950



This patch adds DVB support for Hauppauge HVR950.

Thanks to Michael Krufky <mkrufky@linuxtv.org> for getting those values.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent ee6e3a86
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ config VIDEO_EM28XX_ALSA
config VIDEO_EM28XX_DVB
	tristate "DVB/ATSC Support for em28xx based TV cards"
	depends on VIDEO_EM28XX && DVB_CORE
	select DVB_LGDT330X if !DVB_FE_CUSTOMISE
	select VIDEOBUF_DVB
	select FW_LOADER
	---help---
+28 −1
Original line number Diff line number Diff line
@@ -180,6 +180,7 @@ struct em28xx_board em28xx_boards[] = {
		.tuner_type     = TUNER_XC2028,
		.mts_firmware   = 1,
		.has_12mhz_i2s  = 1,
		.has_dvb        = 1,
		.decoder        = EM28XX_TVP5150,
		.input          = { {
			.type     = EM28XX_VMUX_TELEVISION,
@@ -194,6 +195,32 @@ struct em28xx_board em28xx_boards[] = {
			.vmux     = TVP5150_SVIDEO,
			.amux     = 1,
		} },
		.analog_gpio = {
			{		/* xc3028 reset seq */
				.reg = 0x08,
				.val = 0x3d,
				.rst = 0x2d,
				.t1 = 5,
				.t2 = 10,
				.t3 = 5,
			},
		},
		.digital_gpio = {
			{		/* xc3028 reset seq */
				.reg = 0x08,
				.val = 0x3e,
				.rst = 0x2e,
				.t1 = 6,
				.t2 = 6,
				.t3 = 6,
			}, {		/* demod reset seq */
				.reg = 0x04,
				.val = 0x0c,
				.rst = 0x04,
				.t2 = 10,
				.t3 = 10,
			}
		},
	},
	[EM2880_BOARD_TERRATEC_HYBRID_XS] = {
		.name         = "Terratec Hybrid XS",
@@ -521,7 +548,7 @@ void em28xx_pre_card_setup(struct em28xx *dev)

	/* Put xc2028 tuners and demods into a sane state */
	if (dev->tuner_type == TUNER_XC2028) {
		dev->mode = EM28XX_DIGITAL_MODE;
		dev->mode = EM28XX_ANALOG_MODE;
		em28xx_tuner_callback(dev, XC2028_TUNER_RESET, 0);
	};
}
+16 −1
Original line number Diff line number Diff line
@@ -58,7 +58,10 @@ buffer_setup(struct videobuf_queue *vq, unsigned int *count, unsigned int *size)

/* ------------------------------------------------------------------ */

/* Add demods here */
static struct lgdt330x_config em2880_lgdt3303_dev = {
	.demod_address = 0x0e,
	.demod_chip = LGDT3303,
};

/* ------------------------------------------------------------------ */

@@ -70,6 +73,7 @@ static int attach_xc3028(u8 addr, struct em28xx *dev)
		.i2c_adap  = &dev->i2c_adap,
		.i2c_addr  = addr,
		.ctrl      = &ctl,
		.callback  = em28xx_tuner_callback,
	};

	if (!dev->dvb.frontend) {
@@ -109,6 +113,17 @@ static int dvb_init(struct em28xx *dev)

	/* init frontend */
	switch (dev->model) {
	case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950:
		/* Enable lgdt330x */
		dev->mode = EM28XX_ANALOG_MODE;
		em28xx_tuner_callback(dev, XC2028_TUNER_RESET, 0);

		dev->dvb.frontend = dvb_attach(lgdt330x_attach,
					       &em2880_lgdt3303_dev,
					       &dev->i2c_adap);
		if (attach_xc3028(0x61, dev) < 0)
			return -EINVAL;
		break;
	default:
		printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card"
				" isn't supported yet\n",