[PATCH] Improved support for Dual Digital 4 in v4l-dvb-experimental

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

 



Hi all,

I previously posted a patch for v4l-dvb-experimental based on Roger's
work which provided partial support for the Dual Digital 4 in Australia.
After a lot of investigation and experimentation, I have been able to
greatly improve the patch such that it provides the same level of
functionality as the Roger's v4l-dvb patch.  I believe that the extra
changes are probably necessary for all Dual Digital 4 users - not just
those in Australia.  The extra changes are:

1. r56_agc_targets needs to be initialised to a non zero value.  The
current code base currently does not initialise it at all, meaning that
it got a value of 0, which was being written to the AGC register.  My
fix is to set it to -1 so that the default value of 0x28 will be used.
2. xc3028_set_mode should not send a TUNER_RESET3 via GPIO.  This was
causing previous initialisation values to be lost whenever
zl10353_set_parameters was called via ops.set_frontend.

I am now getting excellent reception of channels between 177.5MHz and
226.5MHz and I am able to freely change channels without having to
reload the dvb_usb_cxusb module.  I am still experiencing problems with
SBS (UHF channel 36, 585.625MHz) which, as before, could be caused by
either the set_frequency offset or bad signal quality.

All of the changes in the patch are inside #ifdef AUSTRALIA so this
shouldn't affect any other users.

Thanks,
Daniel Burr
diff -r a584cde27c70 linux/drivers/media/dvb/dvb-usb/cxusb.c
--- a/linux/drivers/media/dvb/dvb-usb/cxusb.c	Wed May 09 23:10:29 2007 +0200
+++ b/linux/drivers/media/dvb/dvb-usb/cxusb.c	Sat May 12 01:19:45 2007 +1000
@@ -379,6 +379,10 @@ static struct zl10353_config cxusb_zl103
 	.demod_address = 0x0f,
 	.no_tuner = 1,
 	.parallel_ts = 1,
+#ifdef AUSTRALIA
+	.input_frequency = 0x2217,
+	.r56_agc_targets = -1,
+#endif
 };
 
 /* Callbacks for DVB USB */
diff -r a584cde27c70 linux/drivers/media/tuners/xc3028-tuner.c
--- a/linux/drivers/media/tuners/xc3028-tuner.c	Wed May 09 23:10:29 2007 +0200
+++ b/linux/drivers/media/tuners/xc3028-tuner.c	Sat May 12 01:38:40 2007 +1000
@@ -36,7 +36,6 @@
 */
 
 #include <linux/i2c.h>
-#include <linux/usb.h>
 #include "compat.h"
 #include <linux/videodev.h>
 #include <linux/firmware.h>
@@ -52,7 +51,6 @@ static int xc3028_set_mode(struct v4l_dv
 static int xc3028_set_mode(struct v4l_dvb_tuner_ops *c, struct dvb_int_frontend_parameters *params);
 
 struct xc3028_priv {
-	u8 tuning_code[12];
 	struct i2c_adapter *i2c;
 	fe_bandwidth_t bandwidth;
 	u32 frequency;
@@ -219,7 +217,11 @@ static int xc3028_tuner_set_params(struc
 				frequency=(unsigned long long)params->frequency-2750000;
 				break;
 			case BANDWIDTH_7_MHZ:
+#ifdef AUSTRALIA
+				frequency=(unsigned long long)params->frequency-2250000;
+#else
 				frequency=(unsigned long long)params->frequency-2750000;
+#endif
 				break;
 			case BANDWIDTH_6_MHZ:
 				frequency=(unsigned long long)params->frequency-1750000;
@@ -497,6 +499,7 @@ static int xc3028_set_mode(struct v4l_dv
 		return -EINVAL;
 	}
 
+#ifndef AUSTRALIA
 	switch(params->type) {
 	case V4L2_INT_TUNER_DVBT_TV:
 	case V4L2_INT_TUNER_ATSC_TV:
@@ -505,6 +508,7 @@ static int xc3028_set_mode(struct v4l_dv
 	default:
 		break;
 	}
+#endif
 	if(priv->current_mode)
 		*priv->current_mode = params->type;
 	else
diff -r a584cde27c70 v4l/compat.h
--- a/v4l/compat.h	Wed May 09 23:10:29 2007 +0200
+++ b/v4l/compat.h	Sat May 12 02:07:21 2007 +1000
@@ -4,6 +4,8 @@
 
 #ifndef _COMPAT_H
 #define _COMPAT_H
+
+//#define AUSTRALIA
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,18)
 # define minor(x) MINOR(x)
_______________________________________________
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