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
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb