Gmane
Favicon
From: Hartmut Hackmann <hartmut.hackmann <at> t-online.de>
Subject: Re: DVB-T on quad TV tuner card from Medion PC MD8800
Newsgroups: gmane.comp.video.video4linux
Date: 2006-04-02 21:02:14 GMT (2 years, 35 weeks, 18 hours and 41 minutes ago)
Hi, folks

Here is a patch that should add support for the Medion MD8800. Since i don't
have such a card, i need your help for debugging.
The following should work
- auto detection
- analog tv via tuner
- analog CVBS and s-video
- DVB-T
The patch applies to my personal repository or the official repository of
april, 1st at linuxtv.org

Please test and report.

A question: should the board support FM-radio?

Best regards
    Hartmut

diff -uNr v4l-dvb.mar/linux/drivers/media/video/saa7134/saa7134-cards.c v4l-dvb/linux/drivers/media/video/saa7134/saa7134-cards.c
--- v4l-dvb.mar/linux/drivers/media/video/saa7134/saa7134-cards.c	2006-04-01
21:15:29.000000000 +0200
+++ v4l-dvb/linux/drivers/media/video/saa7134/saa7134-cards.c	2006-04-02 00:52:12.000000000 +0200
@@ -2883,6 +2883,29 @@
 			.gpio = 0x000000,	/* GPIO21=Low for FM radio antenna */
 		},
 	},
+	[SAA7134_BOARD_MEDION_MD8800_QUADRO] = {
+		.name           = "Medion Md8800 Quadro",
+		.audio_clock    = 0x00187de7,
+		.tuner_type     = TUNER_PHILIPS_TDA8290,
+		.radio_type     = UNSET,
+		.tuner_addr     = ADDR_UNSET,
+		.radio_addr     = ADDR_UNSET,
+		.mpeg           = SAA7134_MPEG_DVB,
+		.inputs = {{
+			.name   = name_tv,
+			.vmux   = 1,
+			.amux   = TV,
+			.tv     = 1,
+		},{
+			.name   = name_comp1,
+			.vmux   = 0,
+			.amux   = LINE2,
+		},{
+			.name   = name_svideo,
+			.vmux   = 8,
+			.amux   = LINE2,
+		}},
+	},
 };

 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
@@ -3432,6 +3455,18 @@
 		.subdevice    = 0x3502,  /* whats the difference to 0x3306 ?*/
 		.driver_data  = SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS,
 	},{
+		.vendor       = PCI_VENDOR_ID_PHILIPS,
+		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+		.subvendor    = 0x16be,
+		.subdevice    = 0x0007,
+		.driver_data  = SAA7134_BOARD_MEDION_MD8800_QUADRO,
+	},{
+		.vendor       = PCI_VENDOR_ID_PHILIPS,
+		.device       = PCI_DEVICE_ID_PHILIPS_SAA7133,
+		.subvendor    = 0x16be,
+		.subdevice    = 0x0008,
+		.driver_data  = SAA7134_BOARD_MEDION_MD8800_QUADRO,
+	},{
 		/* --- boards without eeprom + subsystem ID --- */
 		.vendor       = PCI_VENDOR_ID_PHILIPS,
 		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
diff -uNr v4l-dvb.mar/linux/drivers/media/video/saa7134/saa7134-dvb.c v4l-dvb/linux/drivers/media/video/saa7134/saa7134-dvb.c
--- v4l-dvb.mar/linux/drivers/media/video/saa7134/saa7134-dvb.c	2006-04-01
21:15:29.000000000 +0200
+++ v4l-dvb/linux/drivers/media/video/saa7134/saa7134-dvb.c	2006-04-02 00:47:20.000000000 +0200
@@ -956,6 +956,64 @@
 	.request_firmware = NULL,
 };

+/* ------------------------------------------------------------------ */
+
+static int md8800_dvbt_mode(struct dvb_frontend *fe)
+{
+	struct saa7134_dev *dev = fe->dvb->priv;
+	static u8 data[] = { 0x3c, 0x33, 0x6a};
+	struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
+
+	if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1)
+		return -EIO;
+	return 0;
+}
+
+static void md8800_dvbt_analog_mode(struct dvb_frontend *fe)
+{
+	struct saa7134_dev *dev = fe->dvb->priv;
+	static u8 data[] = { 0x3c, 0x33, 0x68};
+	struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
+
+	i2c_transfer(&dev->i2c_adap, &msg, 1);
+	philips_tda827xa_pll_sleep( 0x60, fe);
+}
+
+static int md8800_dvbt_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
+{
+	int ret;
+	struct saa7134_dev *dev = fe->dvb->priv;
+	static u8 tda8290_close[] = { 0x21, 0xc0};
+	static u8 tda8290_open[]  = { 0x21, 0x80};
+	struct i2c_msg tda8290_msg = {.addr = 0x4b,.flags = 0, .len = 2};
+	/* close tda8290 i2c bridge */
+	tda8290_msg.buf = tda8290_close;
+	ret = i2c_transfer(&dev->i2c_adap, &tda8290_msg, 1);
+	if (ret != 1)
+		return -EIO;
+	msleep(20);
+	ret = philips_tda827xa_pll_set(0x60, fe, params);
+	if (ret != 0)
+		return ret;
+	/* open tda8290 i2c bridge */
+	tda8290_msg.buf = tda8290_open;
+	i2c_transfer(&dev->i2c_adap, &tda8290_msg, 1);
+	return ret;
+}
+
+static struct tda1004x_config md8800_dvbt_config = {
+	.demod_address = 0x08,
+	.invert        = 1,
+	.invert_oclk   = 0,
+	.xtal_freq     = TDA10046_XTAL_16M,
+	.agc_config    = TDA10046_AGC_TDA827X,
+	.if_freq       = TDA10046_FREQ_045,
+	.pll_init      = md8800_dvbt_mode,
+	.pll_set       = md8800_dvbt_pll_set,
+	.pll_sleep     = md8800_dvbt_analog_mode,
+	.request_firmware = NULL,
+};
+
 #endif

 /* ------------------------------------------------------------------ */
@@ -1070,6 +1128,10 @@
 		dev->dvb.frontend = tda10046_attach(&ads_tech_duo_config,
 						    &dev->i2c_adap);
 		break;
+	case SAA7134_BOARD_MEDION_MD8800_QUADRO:
+		dev->dvb.frontend = tda10046_attach(&md8800_dvbt_config,
+						    &dev->i2c_adap);
+		break;
 #endif
 #ifdef HAVE_NXT200X
 	case SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180:
diff -uNr v4l-dvb.mar/linux/drivers/media/video/saa7134/saa7134.h v4l-dvb/linux/drivers/media/video/saa7134/saa7134.h
--- v4l-dvb.mar/linux/drivers/media/video/saa7134/saa7134.h	2006-04-01 21:15:29.000000000 +0200
+++ v4l-dvb/linux/drivers/media/video/saa7134/saa7134.h	2006-04-02 00:27:14.000000000 +0200
@@ -231,6 +231,7 @@
 #define SAA7134_BOARD_AVERMEDIA_A169_B1 92
 #define SAA7134_BOARD_MD7134_BRIDGE_2     93
 #define SAA7134_BOARD_FLYDVBT_HYBRID_CARDBUS 94
+#define SAA7134_BOARD_MEDION_MD8800_QUADRO 95

 #define SAA7134_MAXBOARDS 8
 #define SAA7134_INPUT_MAX 8
--
video4linux-list mailing list
Unsubscribe mailto:video4linux-list-request <at> redhat.com?subject=unsubscribe
https://www.redhat.com/mailman/listinfo/video4linux-list