[saa7134] Fwd: [PATCH] Spezial Lifeview DVB-S Card without eeprom

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

since there was no reply on the DVB ML:
Is anyone maintaining the DVB part of the saa7134 driver?
Can this patch be accepted?

CU
Oliver

----------  Forwarded Message  ----------

Subject:  [PATCH] Spezial Lifeview DVB-S Card without eeprom
Date: Sunday 14 October 2007 22:12
From: Martin Dauskardt <md001@xxxxxx>
To: linux-dvb@xxxxxxxxxxx

The patch has already been posted in May by Michael Möhle without getting 
attention: http://linuxtv.org/pipermail/linux-dvb/2007-May/018007.html

Several users in the german vdrportal forum use this card, therefore the patch 
is included in my LinVDR kernel package since months.  
To patch should really be included into the hg.

I attach a diff against hg from today. It is still the same patch originally 
written by Ralph Metzler.

Greets,
Martin Dauskardt


-------------------------------------------------------

-- 
----------------------------------------------------------------
VDR Remote Plugin 0.4.0: http://www.escape-edv.de/endriss/vdr/
----------------------------------------------------------------
diff -ur v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134-cards.c v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134-cards.c
--- v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134-cards.c	2007-10-11 14:09:06.000000000 +0200
+++ v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134-cards.c	2007-10-14 17:48:49.000000000 +0200
@@ -3591,6 +3591,26 @@
 			.tv     = 1,
 		}},
 	},
+	[SAA7134_BOARD_LIFEVIEW_DVBS] = {
+		/* LifeView FlyDVB-s */
+		/* Ralph Metzler <rjkm@xxxxxxxxxxxxxx> */
+		.name           = "LifeView FlyDVB-S",
+		.audio_clock    = 0x00200000,
+		.tuner_type     = TUNER_ABSENT,
+		.radio_type     = UNSET,
+		.tuner_addr	= ADDR_UNSET,
+		.radio_addr	= ADDR_UNSET,
+		.mpeg           = SAA7134_MPEG_DVB,
+		.inputs         = {{
+			.name = name_comp1,	/* Composite input */
+			.vmux = 3,
+			.amux = LINE1,
+		},{
+			.name = name_svideo,	/* S-Video signal on S-Video input */
+			.vmux = 8,
+			.amux = LINE1,
+		}},
+	},	
 };
 
 const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
Nur in v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134: saa7134-cards.c.orig.
diff -ur v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134-dvb.c v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134-dvb.c
--- v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134-dvb.c	2007-10-11 14:09:06.000000000 +0200
+++ v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134-dvb.c	2007-10-14 17:48:49.000000000 +0200
@@ -43,6 +43,8 @@
 #include "tda826x.h"
 #include "tda827x.h"
 #include "isl6421.h"
+#include "tua6100.h"
+#include "stv0299.h"
 
 MODULE_AUTHOR("Gerd Knorr <kraxel@xxxxxxxxxxx> [SuSE Labs]");
 MODULE_LICENSE("GPL");
@@ -839,6 +841,130 @@
 	.demod_address    = 0x0a,
 };
 
+/* ------------------------------------------------------------------ */
+
+static int philips_su1278_ty_ci_tuner_set_params(struct dvb_frontend *fe,
+						 struct dvb_frontend_parameters *params)
+{
+	u32 div;
+	u8 buf[4];
+	struct saa7134_dev *dev = fe->dvb->priv;
+	struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
+
+	if ((params->frequency < 950000) || (params->frequency > 2150000))
+		return -EINVAL;
+
+	div = (params->frequency + (125 - 1)) / 125;	// round correctly
+	buf[0] = (div >> 8) & 0x7f;
+	buf[1] = div & 0xff;
+	buf[2] = 0x80 | ((div & 0x18000) >> 10) | 4;
+	buf[3] = 0x20;
+
+	if (params->u.qpsk.symbol_rate < 4000000)
+		buf[3] |= 1;
+
+	if (params->frequency < 1250000)
+		buf[3] |= 0;
+	else if (params->frequency < 1550000)
+		buf[3] |= 0x40;
+	else if (params->frequency < 2050000)
+		buf[3] |= 0x80;
+	else if (params->frequency < 2150000)
+		buf[3] |= 0xC0;
+
+	if (fe->ops.i2c_gate_ctrl)
+		fe->ops.i2c_gate_ctrl(fe, 1);
+	if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1)
+		return -EIO;
+	return 0;
+}
+
+static int lifeview_set_symbol_rate(struct dvb_frontend *fe, u32 srate, u32 ratio)
+{
+	u8 aclk = 0;
+	u8 bclk = 0;
+	u8 m1;
+
+	aclk = 0xb5;
+	if (srate < 2000000)
+		bclk = 0x86;
+	else if (srate < 5000000)
+		bclk = 0x89;
+	else if (srate < 15000000)
+		bclk = 0x8f;
+	else if (srate < 45000000)
+		bclk = 0x95;
+
+	m1 = 0x14;
+	if (srate < 4000000)
+		m1 = 0x10;
+
+	stv0299_writereg(fe, 0x13, aclk);
+	stv0299_writereg(fe, 0x14, bclk);
+	stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff);
+	stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff);
+	stv0299_writereg(fe, 0x21, (ratio) & 0xf0);
+	stv0299_writereg(fe, 0x0f, 0x80 | m1);
+
+	return 0;
+}
+
+static u8 lifeview_inittab[] = {
+	0x01, 0x15,
+	0x02, 0x30,
+	0x03, 0x00,
+	0x04, 0x7d,		/* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
+	0x05, 0x35,		/* I2CT = 0, SCLT = 1, SDAT = 1 */
+	0x06, 0x40,		/* DAC not used, set to high impendance mode */
+	0x07, 0x00,		/* DAC LSB */
+	0x08, 0x40,		/* DiSEqC off */
+	0x09, 0x00,		/* FIFO */
+	0x0c, 0x51,		/* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
+	0x0d, 0x82,		/* DC offset compensation = ON, beta_agc1 = 2 */
+	0x0e, 0x23,		/* alpha_tmg = 2, beta_tmg = 3 */
+	0x10, 0x3f,		// AGC2  0x3d
+	0x11, 0x84,
+	0x12, 0xb9,
+	0x15, 0xc9,		// lock detector threshold
+	0x16, 0x00,
+	0x17, 0x00,
+	0x18, 0x00,
+	0x19, 0x00,
+	0x1a, 0x00,
+	0x1f, 0x50,
+	0x20, 0x00,
+	0x21, 0x00,
+	0x22, 0x00,
+	0x23, 0x00,
+	0x28, 0x00,		// out imp: normal  out type: parallel FEC mode:0
+	0x29, 0x1e,		// 1/2 threshold
+	0x2a, 0x14,		// 2/3 threshold
+	0x2b, 0x0f,		// 3/4 threshold
+	0x2c, 0x09,		// 5/6 threshold
+	0x2d, 0x05,		// 7/8 threshold
+	0x2e, 0x01,
+	0x31, 0x1f,		// test all FECs
+	0x32, 0x19,		// viterbi and synchro search
+	0x33, 0xfc,		// rs control
+	0x34, 0x93,		// error control
+	0x0f, 0x92,
+	0xff, 0xff
+};
+
+static struct stv0299_config lifeview = {
+	.demod_address = 0x68,
+	.inittab = lifeview_inittab,
+	.mclk = 88000000UL,
+	.invert = 0,
+	.skip_reinit = 0,
+	.lock_output = STV0229_LOCKOUTPUT_0,
+	.volt13_op0_op1 = STV0299_VOLT13_OP0,
+	.min_delay_ms = 100,
+	.set_symbol_rate = lifeview_set_symbol_rate,
+};
+
+/* ------------------------------------------------------------------ */
+
 /* ==================================================================
  * Core code
  */
@@ -1005,6 +1131,20 @@
 			}
 		}
 		break;
+	case SAA7134_BOARD_LIFEVIEW_DVBS:
+		dev->dvb.frontend = dvb_attach(stv0299_attach, &lifeview,
+					       &dev->i2c_adap);
+		if (dev->dvb.frontend) {
+			dev->dvb.frontend->ops.tuner_ops.set_params = 
+				philips_su1278_ty_ci_tuner_set_params;
+#if 0
+			if (dvb_attach(tua6100_attach, dev->dvb.frontend, 0x61,
+				       &dev->i2c_adap) == NULL) {
+				printk("%s: No tua6100 found!\n", __FUNCTION__);
+			}
+#endif
+		}
+		break;		
 	case SAA7134_BOARD_ASUS_EUROPA2_HYBRID:
 		dev->dvb.frontend = tda10046_attach(&medion_cardbus,
 						    &dev->i2c_adap);
diff -ur v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134.h v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134.h
--- v4l-dvb-ea93c93f1547-orig/linux/drivers/media/video/saa7134/saa7134.h	2007-10-11 14:09:06.000000000 +0200
+++ v4l-dvb-ea93c93f1547/linux/drivers/media/video/saa7134/saa7134.h	2007-10-14 17:48:49.000000000 +0200
@@ -247,6 +247,7 @@
 #define SAA7134_BOARD_SABRENT_TV_PCB05     115
 #define SAA7134_BOARD_10MOONSTVMASTER3     116
 #define SAA7134_BOARD_AVERMEDIA_SUPER_007  117
+#define SAA7134_BOARD_LIFEVIEW_DVBS        128
 
 #define SAA7134_MAXBOARDS 8
 #define SAA7134_INPUT_MAX 8
_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux