Skip to contentSkip to conversation

[5-11] update dvb frontend drivers

PATCH New Michael Hunold 1 participant 1 message May 6, 2003 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 [5-11] update dvb frontend drivers

Hello,

this patch updates the following dvb frontend drivers:

- alps_bsrv2.c
- alps_tdmb7.c
- at76c651.c
- grundig_29504-401.c
- grundig_29504-491.c
- nxt6000.c
- ves1820.c

Really improved has been the following driver:
- stv0299.c

Please review and apply.

Thanks
Michael Hunold.

drivers/media/dvb/frontends/Kconfig +14 -4
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/frontends/Kconfig linux-2.5.69.patch/drivers/media/dvb/frontends/Kconfig
@@ -5,10 +5,9 @@
 	tristate "STV0299 based DVB-S frontend (QPSK)"
 	depends on DVB_CORE
 	help
-	  A DVB-S tuner module. 
-
-	  Say Y when you want to support frontend based on this 
-	  demodulator.
+	  The stv0299 by ST is used in many DVB-S tuner modules, 
+	  say Y when you want to support frontends based on this 
+	  DVB-S demodulator.
 
 	  Some examples are the Alps BSRU6, the Philips SU1278 and
 	  the LG TDQB-S00x.
@@ -63,6 +62,17 @@
 	  DVB adapter simply enable all supported frontends, the
 	  right one will get autodetected.
 
+config DVB_CX24110
+	tristate "Frontends with Connexant CX24110 demodulator (QPSK)"
+	depends on DVB_CORE
+	help
+	  The CX24110 Demodulator is used in some DVB-S frontends. 
+	  Say Y if you want support for this chip in your kernel.
+
+	  If you don't know what tuner module is soldered on your 
+	  DVB adapter simply enable all supported frontends, the 
+	  right one will get autodetected.
+
 config DVB_GRUNDIG_29504_491
 	tristate "Grundig 29504-491 (QPSK)"
 	depends on DVB_CORE
drivers/media/dvb/frontends/Makefile +1 -0
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/frontends/Makefile linux-2.5.69.patch/drivers/media/dvb/frontends/Makefile
@@ -9,6 +9,7 @@
 obj-$(CONFIG_DVB_ALPS_TDLB7) += alps_tdlb7.o
 obj-$(CONFIG_DVB_ALPS_TDMB7) += alps_tdmb7.o
 obj-$(CONFIG_DVB_ATMEL_AT76C651) += at76c651.o
+obj-$(CONFIG_DVB_CX24110) += cx24110.o
 obj-$(CONFIG_DVB_GRUNDIG_29504_491) += grundig_29504-491.o
 obj-$(CONFIG_DVB_GRUNDIG_29504_401) += grundig_29504-401.o
 obj-$(CONFIG_DVB_VES1820) += ves1820.o
drivers/media/dvb/frontends/alps_bsrv2.c +11 -7
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/frontends/alps_bsrv2.c linux-2.5.69.patch/drivers/media/dvb/frontends/alps_bsrv2.c
@@ -20,8 +20,12 @@
 
 */    
 
+#include <asm/errno.h>
+#include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
+#include <linux/string.h>
+#include <linux/slab.h>
 
 #include "dvb_frontend.h"
 
@@ -211,7 +215,7 @@
 	u32 BDRI;
 	u32 tmp;
 
-	dprintk("%s: srate == %d\n", __FUNCTION__, srate);
+	dprintk("%s: srate == %ud\n", __FUNCTION__, (unsigned int) srate);
 
 	if (srate > 90100000UL/2)
 		srate = 90100000UL/2;
@@ -257,9 +261,9 @@
 	BDRI = ( ((FIN << 8) / ((srate << (FNR >> 1)) >> 2)) + 1) >> 1;
 
         dprintk("FNR= %d\n", FNR);
-        dprintk("ratio= %08x\n", ratio);
-        dprintk("BDR= %08x\n", BDR);
-        dprintk("BDRI= %02x\n", BDRI);
+        dprintk("ratio= %08x\n", (unsigned int) ratio);
+        dprintk("BDR= %08x\n", (unsigned int) BDR);
+        dprintk("BDRI= %02x\n", (unsigned int) BDRI);
 
 	if (BDRI > 0xff)
 		BDRI = 0xff;
@@ -387,12 +391,12 @@
 	case FE_GET_FRONTEND:
 	{
 		struct dvb_frontend_parameters *p = arg;
-		s32 afc;
+		int afc;
 
 		afc = ((int)((char)(ves1893_readreg (i2c, 0x0a) << 1)))/2;
-		afc = (afc * (int)(p->u.qpsk.symbol_rate/8))/16;
+		afc = (afc * (int)(p->u.qpsk.symbol_rate/1000/8))/16;
 
-		p->frequency += afc;
+		p->frequency -= afc;
 		p->inversion = (ves1893_readreg (i2c, 0x0f) & 2) ? 
 					INVERSION_ON : INVERSION_OFF;
 		p->u.qpsk.fec_inner = ves1893_get_fec (i2c);
drivers/media/dvb/frontends/alps_tdmb7.c +11 -14
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/frontends/alps_tdmb7.c linux-2.5.69.patch/drivers/media/dvb/frontends/alps_tdmb7.c
@@ -20,10 +20,15 @@
 
 */    
 
+#include <asm/errno.h>
+#include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/module.h>
+#include <linux/string.h>
+#include <linux/slab.h>
 
 #include "dvb_frontend.h"
+#include "dvb_functions.h"
 
 
 static int debug = 0;
@@ -52,14 +57,6 @@
 
 
 static
-inline void ddelay (int timeout)
-{
-	current->state=TASK_INTERRUPTIBLE;
-	schedule_timeout(timeout);
-}
-
-
-static
 u8 init_tab [] = {
 	0x04, 0x10,
 	0x05, 0x09,
@@ -154,7 +151,7 @@
 		       freq < 470000000 ? 0x42 : freq < 862000000 ? 0x41 : 0x81 };
 #endif
 
-	dprintk ("%s: freq == %i, div == %i\n", __FUNCTION__, freq, div);
+	dprintk ("%s: freq == %i, div == %i\n", __FUNCTION__, (int) freq, (int) div);
 
 	return pll_write (i2c, buf);
 }
@@ -170,7 +167,7 @@
 	cx22700_writereg (i2c, 0x00, 0x02);   /*  soft reset */
 	cx22700_writereg (i2c, 0x00, 0x00);
 
-	ddelay (HZ/100);
+	dvb_delay (HZ/100);
 	
 	for (i=0; i<sizeof(init_tab); i+=2)
 		cx22700_writereg (i2c, init_tab[i], init_tab[i+1]);
@@ -355,7 +352,7 @@
 	}
 
         case FE_READ_BER:
-		*((uint32_t*) arg) = cx22700_readreg (i2c, 0x0c) & 0x7f;
+		*((u32*) arg) = cx22700_readreg (i2c, 0x0c) & 0x7f;
 		cx22700_writereg (i2c, 0x0c, 0x00);
 		break;
 
@@ -363,18 +360,18 @@
 	{
 		u16 rs_ber = (cx22700_readreg (i2c, 0x0d) << 9)
 			   | (cx22700_readreg (i2c, 0x0e) << 1);
-		*((uint16_t*) arg) = ~rs_ber;
+		*((u16*) arg) = ~rs_ber;
 		break;
 	}
         case FE_READ_SNR:
 	{
 		u16 rs_ber = (cx22700_readreg (i2c, 0x0d) << 9)
 			   | (cx22700_readreg (i2c, 0x0e) << 1);
-		*((uint16_t*) arg) = ~rs_ber;
+		*((u16*) arg) = ~rs_ber;
 		break;
 	}
 	case FE_READ_UNCORRECTED_BLOCKS: 
-		*((uint32_t*) arg) = cx22700_readreg (i2c, 0x0f);
+		*((u32*) arg) = cx22700_readreg (i2c, 0x0f);
 		cx22700_writereg (i2c, 0x0f, 0x00);
 		break;
 
drivers/media/dvb/frontends/at76c651.c +8 -6
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/frontends/at76c651.c linux-2.5.69.patch/drivers/media/dvb/frontends/at76c651.c
@@ -22,11 +22,12 @@
  *
  */
 
-#include <linux/module.h>
+#include <asm/errno.h>
 #include <linux/init.h>
-#include <linux/delay.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
 #include <linux/slab.h>
-#include <linux/i2c.h>
 
 #if defined(__powerpc__)
 #include <asm/bitops.h>
@@ -34,6 +35,7 @@
 
 #include "dvb_frontend.h"
 #include "dvb_i2c.h"
+#include "dvb_functions.h"
 
 static int debug = 0;
 
@@ -67,8 +69,8 @@
 	    FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
 	    FE_CAN_FEC_7_8 | FE_CAN_FEC_8_9 | FE_CAN_FEC_AUTO |
 	    FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | FE_CAN_QAM_128 |
-	    FE_CAN_QAM_256,
-	/* FE_CAN_QAM_512 | FE_CAN_QAM_1024 |  */
+	    FE_CAN_QAM_256 /* | FE_CAN_QAM_512 | FE_CAN_QAM_1024 */ |
+	    FE_CAN_RECOVER | FE_CAN_CLEAN_SETUP | FE_CAN_MUTE_TS
 
 };
 
@@ -103,7 +105,7 @@
 			"(reg == 0x%02x, val == 0x%02x, ret == %i)\n",
 			__FUNCTION__, reg, data, ret);
 
-	mdelay(10);
+	dvb_delay(10);
 
 	return (ret != 1) ? -EREMOTEIO : 0;
 
drivers/media/dvb/frontends/grundig_29504-401.c +15 -5
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/frontends/grundig_29504-401.c linux-2.5.69.patch/drivers/media/dvb/frontends/grundig_29504-401.c
@@ -22,10 +22,15 @@
 
 */    
 
-#include <linux/module.h>
+#include <asm/errno.h>
 #include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include <linux/slab.h>
 
 #include "dvb_frontend.h"
+#include "dvb_functions.h"
 
 static int debug = 0;
 
@@ -97,22 +102,27 @@
 /**
  *   set up the downconverter frequency divisor for a
  *   reference clock comparision frequency of 166666 Hz.
- *   frequency offset is 36000000 Hz.
+ *   frequency offset is 36125000 Hz.
  */
 static
 int tsa5060_set_tv_freq (struct dvb_i2c_bus *i2c, u32 freq)
 {
 	u32 div;
 	u8 buf [4];
-	u8 cfg;
+	u8 cfg, cpump, band_select;
 
-	div = (36000000 + freq) / 166666;
+	div = (36125000 + freq) / 166666;
 	cfg = 0x88;
 
+	cpump = div < 175000000 ? 2 : div < 390000000 ? 1 :
+		div < 470000000 ? 2 : div < 750000000 ? 1 : 3;
+
+	band_select = div < 175000000 ? 0x0e : div < 470000000 ? 0x05 : 0x03;
+
 	buf [0] = (div >> 8) & 0x7f;
 	buf [1] = div & 0xff;
 	buf [2] = ((div >> 10) & 0x60) | cfg;
-	buf [3] = 0xc0;
+	buf [3] = cpump | band_select;
 
 	return tsa5060_write (i2c, buf);
 }
drivers/media/dvb/frontends/grundig_29504-491.c +7 -3
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/frontends/grundig_29504-491.c linux-2.5.69.patch/drivers/media/dvb/frontends/grundig_29504-491.c
@@ -24,10 +24,15 @@
 
 */    
 
+#include <asm/errno.h>
 #include <linux/init.h>
+#include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/string.h>
+#include <linux/slab.h>
 
 #include "dvb_frontend.h"
+#include "dvb_functions.h"
 
 static int debug = 0;
 #define dprintk	if (debug) printk
@@ -222,7 +227,7 @@
 	tmp = (tmp % srate) << 8;
 	ratio = (ratio << 8) + tmp / srate;
 	
-	dprintk("tda8083: ratio == %08x\n", ratio);
+	dprintk("tda8083: ratio == %08x\n", (unsigned int) ratio);
 
 	tda8083_writereg (i2c, 0x05, filter);
 	tda8083_writereg (i2c, 0x02, (ratio >> 16) & 0xff);
@@ -244,8 +249,7 @@
 	while (jiffies - start < timeout &&
                !(tda8083_readreg(i2c, 0x02) & 0x80))
 	{
-		current->state = TASK_INTERRUPTIBLE;
-		schedule_timeout (5);
+		dvb_delay(50);
 	};
 }
 
drivers/media/dvb/frontends/nxt6000.c +4 -5
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/frontends/nxt6000.c linux-2.5.69.patch/drivers/media/dvb/frontends/nxt6000.c
@@ -25,13 +25,12 @@
 
 */    
 
-#include <linux/module.h>
+#include <asm/errno.h>
 #include <linux/init.h>
-#include <linux/delay.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/string.h>
 #include <linux/slab.h>
-#include <linux/poll.h>
-#include <asm/io.h>
-#include <linux/i2c.h>
 
 #include "dvb_frontend.h"
 #include "nxt6000.h"
drivers/media/dvb/frontends/stv0299.c +234 -131

609 lines not on this page · raw message

drivers/media/dvb/frontends/ves1820.c +11 -14
diff -uNrwB -x '*.o' --new-file linux-2.5.69/drivers/media/dvb/frontends/ves1820.c linux-2.5.69.patch/drivers/media/dvb/frontends/ves1820.c
@@ -19,11 +19,15 @@
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */    
 
+#include <asm/errno.h>
 #include <linux/init.h>
+#include <linux/kernel.h>
 #include <linux/module.h>
-#include <linux/delay.h>
+#include <linux/string.h>
+#include <linux/slab.h>
 
 #include "dvb_frontend.h"
+#include "dvb_functions.h"
 
 
 #if 0
@@ -63,13 +67,9 @@
 #define GET_TUNER(data) ((u8) (((int) data >> 16) & 0xff))
 #define GET_DEMOD_ADDR(data) ((u8) (((int) data >> 24) & 0xff))
 
+#define XIN 57840000UL
+#define FIN (XIN >> 4)
 
-static inline
-void ddelay (int ms)
-{
-	current->state=TASK_INTERRUPTIBLE;
-	schedule_timeout((HZ*ms)/1000);
-}
 
 
 static
@@ -79,8 +79,8 @@
 	.frequency_stepsize = 62500,
 	.frequency_min = 51000000,
 	.frequency_max = 858000000,
-	.symbol_rate_min = (57840000/2)/64,     /* SACLK/64 == (XIN/2)/64 */
-	.symbol_rate_max = (57840000/2)/4,      /* SACLK/4 */
+	.symbol_rate_min = (XIN/2)/64,     /* SACLK/64 == (XIN/2)/64 */
+	.symbol_rate_max = (XIN/2)/4,      /* SACLK/4 */
 #if 0
 	frequency_tolerance: ???,
 	symbol_rate_tolerance: ???,  /* ppm */  /* == 8% (spec p. 5) */
@@ -123,7 +123,7 @@
 			"(reg == 0x%02x, val == 0x%02x, ret == %i)\n",
 			__FUNCTION__, reg, data, ret);
 
-	mdelay(10);
+	dvb_delay(10);
 	return (ret != 1) ? -EREMOTEIO : 0;
 }
 
@@ -209,7 +209,7 @@
 	 *  check lock and toggle inversion bit if required...
 	 */
 	if (!(ves1820_readreg (fe, 0x11) & 0x08)) {
-		ddelay(1);
+		dvb_delay(10);
 		if (!(ves1820_readreg (fe, 0x11) & 0x08)) {
 			reg0 ^= 0x20;
 			ves1820_writereg (fe, 0x00, reg0 & 0xfe);
@@ -250,9 +250,6 @@
         u16 NDEC = 0;
         u32 tmp, ratio;
 
-#define XIN 57840000UL
-#define FIN (XIN >> 4)
-
         if (symbolrate > XIN/2) 
                 symbolrate = XIN/2;