[linux-dvb] [-mm PATCH] v4l: add dvb support for dvico fusionhdtv3 gold-T and fix cx88-dvb for kconfig

Michael Krufky mkrufky at m1k.net
Tue Jul 5 14:53:41 CEST 2005


Johannes Stezenbach wrote:

>Michael Krufky wrote:
>  
>
>>I'm happy to let you know that I have successfully gotten digital video 
>>working (only with 8vsb, not qam256).  I have already applied the 
>>changes into video4linux cvs and the dvb-pll changes into linuxtv cvs.  
>>In addition, I solved the problem where cx88-dvb automatically loads up 
>>mt352, or51132, cx22702 and lgdt3302 no matter which one is needed.  As 
>>of now, only the correct module will be loaded up when modprobing 
>>cx88-dvb.  (I have applied the same fix with saa7134).
>>    
>>
>Can you outline how? IIRC we wanted to avoid an #ifdef mess
>so we just statically depend on all frontends. This was
>considered OK as the frontend drivers are usually tiny.
>  
>
Johannes-

The change that I am talking about only applies to loading frontends 
through cx88-dvb and saa7134-dvb (in video4linux).

I must make this quick, because I am about to leave the house to go to 
the office...  What I have done is: (in video4linux) I renamed the 
#ifdef HAVE_CX22702 to #ifdef CONFIG_DVB_CX22702 ... ...I also removed 
the #define HAVE_CX22702 (not only for cx22702 -- i am just using this 
as an example) from the top of cx88-dvb.c ... This allows Kconfig to 
decide what frontend-specific code gets included in cx88-dvb.  Of 
course, when compiling from cvs or from a snapshot, the Makefile will 
include all code by default. It is easier to understand if you look at 
the attached patch.

I have not sent the attached patch to Andrew or LKML yet.

I'd like permission to include your sign-off on this, since it changes 
files in both trees (dvb-pll changes have already been committed to 
linuxtv cvs, and all other changes have been committed to v4l cvs).  I 
will ask Mauro for his sign-off as well when I see him in irc later on.

This patch depends on:

dvb-frontend-add-driver-for-lgdt3302.patch (added to -mm tree)
[PATCH] v4l: add DVB support for DViCO FusionHDTV3 Gold-Q (on lkml, still pending)

If you wish to test how this applies against -mm, start off with 2.6.13-rc1-mm1, then:

1) apply dvb-frontend-add-driver-for-lgdt3302.patch
2) apply [PATCH] v4l: add DVB support for DViCO FusionHDTV3 Gold-Q
3) apply [PATCH] v4l: add TerraTec Cinergy 1400 DVB-T (also on lkml)
4) apply the patch attached to this email last.

(patch #3 has also been sent to andrew.  (still pending)  The attached patch doesn't depend on this, but in order for everything to apply cleanly, apply it in the order listed)

-- 

Michael Krufky

-------------- next part --------------
- Let Kconfig decide whether to include frontend-specific code in cx88-dvb.
- Add dvb support in v4l for DViCO FusionHDTV3 Gold-T using lgdt3302 frontend.
  This adds support for a different board from the previous (Gold-Q) patch.

Signed-off-by: Michael Krufky <mkrufky at m1k.net>

 linux/drivers/media/dvb/frontends/dvb-pll.c |   13 ++++
 linux/drivers/media/dvb/frontends/dvb-pll.h |    1 
 linux/drivers/media/video/cx88/cx88-cards.c |    3 -
 linux/drivers/media/video/cx88/cx88-dvb.c   |   57 ++++++++++++++------
 linux/drivers/media/video/cx88/cx88-mpeg.c  |    8 +-
 5 files changed, 60 insertions(+), 22 deletions(-)

diff -u linux-2.6.13/drivers/media/video/cx88/cx88-cards.c linux/drivers/media/video/cx88/cx88-cards.c
--- linux-2.6.13/drivers/media/video/cx88/cx88-cards.c	2005-07-05 00:35:06.000000000 +0000
+++ linux/drivers/media/video/cx88/cx88-cards.c	2005-07-05 00:47:22.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * $Id: cx88-cards.c,v 1.84 2005/07/02 19:42:09 mkrufky Exp $
+ * $Id: cx88-cards.c,v 1.85 2005/07/04 19:35:05 mkrufky Exp $
  *
  * device driver for Conexant 2388x based TV cards
  * card-specific stuff.
@@ -723,6 +723,7 @@
                         .vmux   = 2,
                         .gpio0  = 0x0f00,
                 }},
+		.dvb            = 1,
         },
         [CX88_BOARD_ADSTECH_DVB_T_PCI] = {
                 .name           = "ADS Tech Instant TV DVB-T PCI",
diff -u linux-2.6.13/drivers/media/video/cx88/cx88-mpeg.c linux/drivers/media/video/cx88/cx88-mpeg.c
--- linux-2.6.13/drivers/media/video/cx88/cx88-mpeg.c	2005-07-05 00:34:56.000000000 +0000
+++ linux/drivers/media/video/cx88/cx88-mpeg.c	2005-07-05 00:47:22.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * $Id: cx88-mpeg.c,v 1.28 2005/06/20 03:36:00 mkrufky Exp $
+ * $Id: cx88-mpeg.c,v 1.29 2005/07/04 19:35:05 mkrufky Exp $
  *
  *  Support for the mpeg transport stream transfers
  *  PCI function #2 of the cx2388x.
@@ -73,11 +73,11 @@
 		cx_write(TS_GEN_CNTRL, 0x0040 | dev->ts_gen_cntrl);
 		udelay(100);
 		cx_write(MO_PINMUX_IO, 0x00);
-		if (core->board == CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q) {
-			cx_write(TS_HW_SOP_CNTRL,0x47<<16 | 188<<4 | 0x00);
+		cx_write(TS_HW_SOP_CNTRL,47<<16|188<<4|0x00);
+		if ((core->board == CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q) ||
+		    (core->board == CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T)) {
 			cx_write(TS_SOP_STAT, 0<<16 | 0<<14 | 1<<13 | 0<<12);
 		} else {
-			cx_write(TS_HW_SOP_CNTRL,47<<16|188<<4|0x00);
 			cx_write(TS_SOP_STAT,0x00);
 		}
 		cx_write(TS_GEN_CNTRL, dev->ts_gen_cntrl);
diff -u linux-2.6.13/drivers/media/video/cx88/cx88-dvb.c linux/drivers/media/video/cx88/cx88-dvb.c
--- linux-2.6.13/drivers/media/video/cx88/cx88-dvb.c	2005-07-05 00:35:06.000000000 +0000
+++ linux/drivers/media/video/cx88/cx88-dvb.c	2005-07-05 00:47:22.000000000 +0000
@@ -1,5 +1,5 @@
 /*
- * $Id: cx88-dvb.c,v 1.39 2005/07/02 20:00:46 mkrufky Exp $
+ * $Id: cx88-dvb.c,v 1.41 2005/07/04 19:35:05 mkrufky Exp $
  *
  * device driver for Conexant 2388x based TV cards
  * MPEG Transport Stream (DVB) routines
@@ -30,22 +30,20 @@
 #include <linux/file.h>
 #include <linux/suspend.h>
 
-/* these three frontends need merging via linuxtv cvs ... */
-#define HAVE_CX22702 1
-#define HAVE_OR51132 1
-#define HAVE_LGDT3302 1
-
 #include "cx88.h"
 #include "dvb-pll.h"
-#include "mt352.h"
-#include "mt352_priv.h"
-#if HAVE_CX22702
+
+#if CONFIG_DVB_MT352
+# include "mt352.h"
+# include "mt352_priv.h"
+#endif
+#if CONFIG_DVB_CX22702
 # include "cx22702.h"
 #endif
-#if HAVE_OR51132
+#if CONFIG_DVB_OR51132
 # include "or51132.h"
 #endif
-#if HAVE_LGDT3302
+#if CONFIG_DVB_LGDT3302
 # include "lgdt3302.h"
 #endif
 
@@ -104,6 +102,7 @@
 
 /* ------------------------------------------------------------------ */
 
+#if CONFIG_DVB_MT352
 static int dvico_fusionhdtv_demod_init(struct dvb_frontend* fe)
 {
 	static u8 clock_config []  = { CLOCK_CTL,  0x38, 0x39 };
@@ -171,8 +170,9 @@
 	.demod_init    = dntv_live_dvbt_demod_init,
 	.pll_set       = mt352_pll_set,
 };
+#endif
 
-#if HAVE_CX22702
+#if CONFIG_DVB_CX22702
 static struct cx22702_config connexant_refboard_config = {
 	.demod_address = 0x43,
 	.pll_address   = 0x60,
@@ -186,7 +186,7 @@
 };
 #endif
 
-#if HAVE_OR51132
+#if CONFIG_DVB_OR51132
 static int or51132_set_ts_param(struct dvb_frontend* fe,
 				int is_punctured)
 {
@@ -203,7 +203,7 @@
 };
 #endif
 
-#if HAVE_LGDT3302
+#if CONFIG_DVB_LGDT3302
 static int lgdt3302_set_ts_param(struct dvb_frontend* fe, int is_punctured)
 {
 	struct cx8802_dev *dev= fe->dvb->priv;
@@ -220,6 +220,13 @@
 	.pll_desc         = &dvb_pll_microtune_4042,
 	.set_ts_params    = lgdt3302_set_ts_param,
 };
+
+static struct lgdt3302_config fusionhdtv_3_gold_t = {
+	.demod_address    = 0x0e,
+	.pll_address      = 0x61,
+	.pll_desc         = &dvb_pll_thomson_dtt7611,
+	.set_ts_params    = lgdt3302_set_ts_param,
+};
 #endif
 
 static int dvb_register(struct cx8802_dev *dev)
@@ -230,7 +237,7 @@
 
 	/* init frontend */
 	switch (dev->core->board) {
-#if HAVE_CX22702
+#if CONFIG_DVB_CX22702
 	case CX88_BOARD_HAUPPAUGE_DVB_T1:
 		dev->dvb.frontend = cx22702_attach(&hauppauge_novat_config,
 						   &dev->core->i2c_adap);
@@ -241,6 +248,7 @@
 						   &dev->core->i2c_adap);
 		break;
 #endif
+#if CONFIG_DVB_MT352
 	case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:
 		dev->core->pll_addr = 0x61;
 		dev->core->pll_desc = &dvb_pll_lg_z201;
@@ -261,13 +269,14 @@
 		dev->dvb.frontend = mt352_attach(&dntv_live_dvbt_config,
 						 &dev->core->i2c_adap);
 		break;
-#if HAVE_OR51132
+#endif
+#if CONFIG_DVB_OR51132
 	case CX88_BOARD_PCHDTV_HD3000:
 		dev->dvb.frontend = or51132_attach(&pchdtv_hd3000,
 						 &dev->core->i2c_adap);
 		break;
 #endif
-#if HAVE_LGDT3302
+#if CONFIG_DVB_LGDT3302
 	case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q:
 		dev->ts_gen_cntrl = 0x08;
 		{
@@ -282,6 +291,20 @@
 						    &dev->core->i2c_adap);
 		}
 		break;
+	case CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T:
+		dev->ts_gen_cntrl = 0x08;
+		{
+		/* Do a hardware reset of chip before using it. */
+		struct cx88_core *core = dev->core;
+
+		cx_clear(MO_GP0_IO, 1);
+		mdelay(100);
+		cx_set(MO_GP0_IO, 9); /* ANT connector too FIXME */
+		mdelay(200);
+		dev->dvb.frontend = lgdt3302_attach(&fusionhdtv_3_gold_t,
+						    &dev->core->i2c_adap);
+		}
+		break;
 #endif
 	default:
 		printk("%s: The frontend of your DVB/ATSC card isn't supported yet\n",
diff -u linux-2.6.13/drivers/media/dvb/frontends/dvb-pll.c linux/drivers/media/dvb/frontends/dvb-pll.c
--- linux-2.6.13/drivers/media/dvb/frontends/dvb-pll.c	2005-07-05 00:42:14.000000000 +0000
+++ linux/drivers/media/dvb/frontends/dvb-pll.c	2005-07-05 00:47:22.000000000 +0000
@@ -106,6 +106,19 @@
 };
 EXPORT_SYMBOL(dvb_pll_microtune_4042);
 
+struct dvb_pll_desc dvb_pll_thomson_dtt7611 = {
+	.name  = "Thomson dtt7611",
+	.min   =  44000000,
+	.max   = 958000000,
+	.count = 3,
+	.entries = {
+		{ 157250000, 44000000, 62500, 0x8e, 0x39 },
+		{ 454000000, 44000000, 62500, 0x8e, 0x3a },
+		{ 999999999, 44000000, 62500, 0x8e, 0x3c },
+	},
+};
+EXPORT_SYMBOL(dvb_pll_thomson_dtt7611);
+
 struct dvb_pll_desc dvb_pll_unknown_1 = {
 	.name  = "unknown 1", /* used by dntv live dvb-t */
 	.min   = 174000000,
diff -u linux-2.6.13/drivers/media/dvb/frontends/dvb-pll.h linux/drivers/media/dvb/frontends/dvb-pll.h
--- linux-2.6.13/drivers/media/dvb/frontends/dvb-pll.h	2005-07-05 00:42:14.000000000 +0000
+++ linux/drivers/media/dvb/frontends/dvb-pll.h	2005-07-05 00:47:22.000000000 +0000
@@ -25,6 +25,7 @@
 extern struct dvb_pll_desc dvb_pll_thomson_dtt7610;
 extern struct dvb_pll_desc dvb_pll_lg_z201;
 extern struct dvb_pll_desc dvb_pll_microtune_4042;
+extern struct dvb_pll_desc dvb_pll_thomson_dtt7611;
 extern struct dvb_pll_desc dvb_pll_unknown_1;
 
 extern struct dvb_pll_desc dvb_pll_tua6010xs;


More information about the linux-dvb mailing list