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