Mailing List archive

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

[linux-dvb] Re: szap/driver problems



Hi,

On Thu, Jan 09, 2003 at 09:06:59AM +0100, Matthias Behr wrote:
> Hi,
> 
> the KNC1 card is currently not supported (the frontend get's detected as a
> bsru2 and not a su1278).
> 
> I'm working on a patch but sadly I am currently really short on time.

The original stv0299 driver from dvb-kernel checks for
the PLL chip at the I2C addresses 0x60 and 0x61. If a device
at 0x60 is found an SU1278/SH is detected (works with my
Lorenzen DVB-S (Technotrend Budget CI) board) if a device at
0x61 is found an Alps BSRU6 is detected.

Please get the stv0299 driver from the dvb-kernel CVS and apply the patch
attached to this mail. The frontend detection is now hardwired for
the SU1278/SH with PLL at 0x61.

We have to write a new auto probing routine because there are 
SU1278/SH frontends with the PLL at 0x60 and 0x61 out there.


Peter
--- stv0299.c.orig	Thu Jan  9 10:49:36 2003
+++ stv0299.c	Thu Jan  9 10:49:51 2003
@@ -237,7 +237,7 @@
 	int ret;
 	u8 rpt1 [] = { 0x05, 0xb5 };  /*  enable i2c repeater on stv0299  */
 	/* TSA5059 i2c-bus address */
-	u8 addr = (ftype == PHILIPS_SU1278SH) ? 0x60 : 0x61;
+	u8 addr = (ftype == PHILIPS_SU1278SH) ? 0x61 : 0x61;
 	struct i2c_msg msg [] = {{ addr: 0x68, flags: 0, buf: rpt1, len: 2 },
 			         { addr: addr, flags: 0, buf: data, len: 4 }};
 
@@ -741,26 +741,31 @@
 int probe_tuner (struct dvb_i2c_bus *i2c)
 {
 	int type;
+	char* probe_msg = "probing for TSA5059 at I2C address 0x";
 
         /* read the status register of TSA5059 */
 	u8 rpt[] = { 0x05, 0xb5 };
         u8 stat [] = { 0 };
 	struct i2c_msg msg1 [] = {{ addr: 0x68, flags: 0, buf: rpt,  len: 2 },
-                           { addr: 0x60, flags: I2C_M_RD, buf: stat, len: 1 }};
+                           { addr: 0x61, flags: I2C_M_RD, buf: stat, len: 1 }};
 	struct i2c_msg msg2 [] = {{ addr: 0x68, flags: 0, buf: rpt,  len: 2 },
                            { addr: 0x61, flags: I2C_M_RD, buf: stat, len: 1 }};
 
+	dprintk("%s%x\n", probe_msg, 0x61);
 	if (i2c->xfer(i2c, msg1, 2) == 2) {
 		type = PHILIPS_SU1278SH;
 		printk ("%s: setup for tuner SU1278/SH\n", __FILE__);
-	} else if (i2c->xfer(i2c, msg2, 2) == 2) {
-		type = ALPS_BSRU6;
-		printk ("%s: setup for tuner BSRU6, TDQB-S00x\n", __FILE__);
 	} else {
-		type = UNKNOWN_FRONTEND;
-		printk ("%s: unknown PLL synthesizer, "
-			"please report to <linuxdvb@linuxtv.org>!!\n",
-			__FILE__);
+		dprintk("%s%x\n", probe_msg, 0x61);
+		if (i2c->xfer(i2c, msg2, 2) == 2) {
+			type = ALPS_BSRU6;
+			printk ("%s: setup for tuner BSRU6, TDQB-S00x\n", __FILE__);
+		} else {
+			type = UNKNOWN_FRONTEND;
+			printk ("%s: unknown PLL synthesizer, "
+				"please report to <linuxdvb@linuxtv.org>!!\n",
+				__FILE__);
+		}
 	}
 	return type;
 }
@@ -775,7 +780,9 @@
 
 	/* register 0x00 contains 0xa1 for STV0299 and STV0299B */
 	/* register 0x00 might contain 0x80 when returning from standby */
-	if (id != 0xa1)
+	if (id == 0xa1)
+		printk ("%s: STV0299 QPSK link IC detected\n", __FILE__);
+	else
 		return -ENODEV;
 
 	if ((tuner_type = probe_tuner(i2c)) < 0)

Home | Main Index | Thread Index