Mailing List archive

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

[linux-dvb] Re: Can someone test this channel please



On Sat, 25 Oct 2003 23:28:41 +0100
Andrew de Quincey <adq_dvb@lidskialf.net> wrote:

> This isn't the final patch; I still have to write the frequency divisor 
> selection code as suggested by Robert Schlabbach. I'll commit the final 
> version to CVS myself, once I've had some feedback (assuming its +ve
> feedback that is :)

I did a backport to the "DVB" tree (attached). Reception is still not
perfect but did improve in most situations. Please do some more
tweaking! :)

+++++ unpatched
*** CARD0 - V
card 0, tp tp104, pid 255:   0 errors in TS
*** CARD1 - V
card 1, tp tp104, pid 255:  11 errors in TS
*** CARD0 - H
card 0, tp tp89, pid 163:    0 errors in TS
*** CARD1 - H
card 1, tp tp89, pid 163:    0 errors in TS
*** CARD0 - V, CARD1 - V
card 0, tp tp104, pid 255: 408 errors in TS
card 1, tp tp104, pid 255: 101 errors in TS
*** CARD0 - H, CARD1 - H
card 0, tp tp89, pid 163:    0 errors in TS
card 1, tp tp89, pid 163:    0 errors in TS
*** CARD0 - V, CARD1 - H
card 0, tp tp104, pid 255:   2 errors in TS
card 1, tp tp89, pid 163:    0 errors in TS
*** CARD0 - H, CARD1 - V
card 0, tp tp89, pid 163:    0 errors in TS
card 1, tp tp104, pid 255:  18 errors in TS

+++++ patched
*** CARD0 - V
card 0, tp tp104, pid 255:   0 errors in TS
*** CARD1 - V
card 1, tp tp104, pid 255:   0 errors in TS
*** CARD0 - H
card 0, tp tp89, pid 163:    0 errors in TS
*** CARD1 - H
card 1, tp tp89, pid 163:    0 errors in TS
*** CARD0 - V, CARD1 - V
card 0, tp tp104, pid 255:   0 errors in TS
card 1, tp tp104, pid 255:   0 errors in TS
*** CARD0 - H, CARD1 - H
card 0, tp tp89, pid 163:    0 errors in TS
card 1, tp tp89, pid 163:    0 errors in TS
*** CARD0 - V, CARD1 - H
card 0, tp tp104, pid 255:   4 errors in TS
card 1, tp tp89, pid 163:    0 errors in TS
*** CARD0 - H, CARD1 - V
card 0, tp tp89, pid 163:    0 errors in TS
card 1, tp tp104, pid 255: 181 errors in TS

(sampling time 40s)

Regards,
-- 
Steffen Beyer <sbeyer@reactor.de>

GnuPG key fingerprint: 6C9B 2844 AF75 AC7A C38C  9FFD 06CB A788 398B D2D9
Public key available upon request or at http://wwwkeys.pgp.net
--- DVB-cvs/driver/frontends/stv0299.c	2003-08-01 01:15:45.000000000 +0200
+++ DVB-cvs-adqpatch/driver/frontends/stv0299.c	2003-10-26 05:06:44.000000000 +0100
@@ -303,31 +303,53 @@
  *   reference clock comparision frequency of 125 kHz.
  */
 static
-int tsa5059_set_tv_freq	(struct dvb_i2c_bus *i2c, u32 freq, int ftype)
+int tsa5059_set_tv_freq	(struct dvb_i2c_bus *i2c, u32 freq, int ftype, int srate)
 {
-        u32 div = freq / 125;
+        u32 div;
+        u8 buf[4];
 
-	u8 buf[4] = { (div >> 8) & 0x7f, div & 0xff, 0x84 };
-
-	if (ftype == PHILIPS_SU1278SH)
-		/* activate f_xtal/f_comp signal output */
-		/* charge pump current C0/C1 = 00 */
-		buf[3] = 0x20;
-	else
-		buf[3] = freq > 1530000 ? 0xc0 : 0xc4;
+	if ((freq < 950000) || (freq > 2150000)) return -EINVAL;
 
+	// setup frequency divisor
+	div = freq / 1000;
+	buf[0] = (div >> 8) & 0x7f;
+	buf[1] = div & 0xff;
+	buf[2] = 0x81 | ((div & 0x18000) >> 10);
+	buf[3] = 0;
+
+	// tuner-specific settings
+	switch(ftype) {
+	case PHILIPS_SU1278SH:
+		buf[3] |= 0x20;
+		
+		if (srate < 4000000) buf[3] |= 1;
+		          
+		if (freq <= 1250000) buf[3] |= 0;
+		else if (freq <= 1550000) buf[3] |= 0x40;
+		else if (freq <= 2050000) buf[3] |= 0x80;
+		else if (freq <= 2150000) buf[3] |= 0xC0;
+		break;
+		
+        case ALPS_BSRU6:
+		buf[3] |= 0xC0;
+		break;
+	
+	default:
+		return -EINVAL;
+	}
+			 
 	dprintk ("%s\n", __FUNCTION__);
 
 	return pll_write (i2c, buf, ftype);
 }
 
 static
-int pll_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq, int ftype)
+int pll_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq, int ftype, int srate)
 {
 	if (ftype == LG_TDQF_S001F)
 		return sl1935_set_tv_freq(i2c, freq, ftype);
 	else
-		return tsa5059_set_tv_freq(i2c, freq, ftype);
+		return tsa5059_set_tv_freq(i2c, freq, ftype, srate);
 }
 
 #if 0
@@ -365,7 +387,7 @@
 
         /* AGC1 reference register setup */
 	if (ftype == PHILIPS_SU1278SH)
-	  stv0299_writereg (i2c, 0x0f, 0xd2);  /* Iagc = Inverse, m1 = 18 */
+	  stv0299_writereg (i2c, 0x0f, 0x92);  /* Iagc = Inverse, m1 = 18 */
 	else
 	  stv0299_writereg (i2c, 0x0f, 0x52);  /* Iagc = Normal,  m1 = 18 */
 
@@ -593,22 +615,41 @@
 
 
 static
-int stv0299_set_symbolrate (struct dvb_i2c_bus *i2c, u32 srate)
+int stv0299_set_symbolrate (struct dvb_i2c_bus *i2c, u32 srate, int ftype)
 {
 	u32 ratio;
 	u32 tmp;
-	u8 aclk = 0xb4, bclk = 0x51;
+	u8 aclk = 0;
+	u8 bclk = 0;
+	u8 m1;
+
+	if ((srate < 1000000) || (srate > 45000000)) return -EINVAL;
+
+	switch (ftype) {
+	case PHILIPS_SU1278SH:
+		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;
+		break;
+
+	case ALPS_BSRU6:
+	default:
+		if (srate <= 1500000) { aclk = 0xb7; bclk = 0x87; }
+	        else if (srate <= 3000000) { aclk = 0xb7; bclk = 0x8b; }                
+	        else if (srate <= 7000000) { aclk = 0xb7; bclk = 0x8f; }
+	        else if (srate <= 14000000) { aclk = 0xb7; bclk = 0x93; }               
+	        else if (srate <= 30000000) { aclk = 0xb6; bclk = 0x93; }
+	        else if (srate <= 45000000) { aclk = 0xb4; bclk = 0x91; }
+	           
+		m1 = 0x12;
+	        break;
+	}
 
-	if (srate > M_CLK)
-		srate = M_CLK;
-        if (srate < 500000)
-		srate = 500000;
-
-	if (srate < 30000000) { aclk = 0xb6; bclk = 0x53; }
-	if (srate < 14000000) { aclk = 0xb7; bclk = 0x53; }
-	if (srate < 7000000) { aclk = 0xb7; bclk = 0x4f; }
-	if (srate < 3000000) { aclk = 0xb7; bclk = 0x4b; }
-	if (srate < 1500000) { aclk = 0xb7; bclk = 0x47; }
 
 #define FIN (M_CLK >> 4)
 
@@ -626,6 +667,7 @@
 	stv0299_writereg (i2c, 0x1f, (ratio >> 16) & 0xff);
 	stv0299_writereg (i2c, 0x20, (ratio >>  8) & 0xff);
 	stv0299_writereg (i2c, 0x21, (ratio      ) & 0xf0);
+	stv0299_writereg (i2c, 0x0f, (stv0299_readreg(i2c, 0x0f) & 0xc0) | m1);
 
 	return 0;
 }
@@ -740,9 +782,9 @@
         {
 		struct dvb_frontend_parameters *p = arg;
 
-		pll_set_tv_freq (i2c, p->frequency, tuner_type);
+		pll_set_tv_freq (i2c, p->frequency, tuner_type, p->u.qpsk.symbol_rate);
                 stv0299_set_FEC (i2c, p->u.qpsk.fec_inner);
-                stv0299_set_symbolrate (i2c, p->u.qpsk.symbol_rate);
+                stv0299_set_symbolrate (i2c, p->u.qpsk.symbol_rate, tuner_type);
 		stv0299_writereg (i2c, 0x22, 0x00);
 		stv0299_writereg (i2c, 0x23, 0x00);
 		stv0299_readreg (i2c, 0x23);

Attachment: pgp00007.pgp
Description: PGP signature


Home | Main Index | Thread Index