On Tue, Mar 31, 2009 at 10:57 AM, Devin Heitmueller
<[email protected]> wrote:
> On Mon, Mar 30, 2009 at 10:47 PM, David Wong <[email protected]> wrote:
>> Does anyone know how to get XC5000 working for DVB-T, especially 8MHz
>> bandwidth?
>> Current driver only supports ATSC with 6MHz bandwidth only.
>> It seems there is a trick at setting compensated RF frequency.
>>
>> DVB-T 8MHz support would probably works for DMB-TH, but DMB-TH
>> settings is very welcome.
>>
>> Regards,
>> David
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-media" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
> All of my xc5000 work has been with ATSC/QAM, so I can't say
> authoritatively what is required to make it work.
>
> Well, at a minimum you will have to modify xc5000_set_params to
> support setting priv->video_standard to DTV8. Beyond that, I don't
> think you need to do anything specific for DVB-T.
>
> Devin
>
> --
> Devin J. Heitmueller
> http://www.devinheitmueller.com
> AIM: devinheitmueller
>
I have tried followings in xc5000_set_params()
if (fe->ops.info.type == FE_ATSC) {
...
} else if (fe->ops.info.type == FE_OFDM) {
switch (params->u.ofdm.bandwidth) {
case BANDWIDTH_6_MHZ:
printk("xc5000 bandwidth 6MHz\n");
priv->bandwidth = BANDWIDTH_6_MHZ;
priv->video_standard = DTV6;
break;
case BANDWIDTH_7_MHZ:
printk("xc5000 bandwidth 7MHz\n");
priv->bandwidth = BANDWIDTH_7_MHZ;
priv->video_standard = DTV7;
break;
case BANDWIDTH_8_MHZ:
printk("xc5000 bandwidth 8MHz\n");
priv->bandwidth = BANDWIDTH_8_MHZ;
priv->video_standard = DTV8;
break;
default:
printk("xc5000 bandwidth not set!\n");
return -EINVAL;
}
priv->rf_mode = XC_RF_MODE_AIR;
priv->freq_hz = params->frequency - 1750000;
}
But no success yet.
I am wondering the -1750000 compensation for DTV8.
BTW, The xc_debug_dump() could get more information like firmware
build number and tuner total gain
diff -r 2276e777f950 linux/drivers/media/common/tuners/xc5000.c
--- a/linux/drivers/media/common/tuners/xc5000.c Thu Mar 26 22:17:48
2009 -0300
+++ b/linux/drivers/media/common/tuners/xc5000.c Mon Mar 30 16:23:11
2009 +0800
@@ -84,6 +84,7 @@
#define XREG_IF_OUT 0x05
#define XREG_SEEK_MODE 0x07
#define XREG_POWER_DOWN 0x0A
+#define XREG_OUTPUT_AMP 0x0B
#define XREG_SIGNALSOURCE 0x0D /* 0=Air, 1=Cable */
#define XREG_SMOOTHEDCVBS 0x0E
#define XREG_XTALFREQ 0x0F
@@ -100,6 +101,8 @@
#define XREG_VERSION 0x07
#define XREG_PRODUCT_ID 0x08
#define XREG_BUSY 0x09
+#define XREG_BUILD_NUM 0x0D
+#define XREG_TOTAL_GAIN 0x0F
/*
Basic firmware description. This will remain with
@@ -468,7 +485,8 @@
static int xc_get_version(struct xc5000_priv *priv,
u8 *hw_majorversion, u8 *hw_minorversion,
- u8 *fw_majorversion, u8 *fw_minorversion)
+ u8 *fw_majorversion, u8 *fw_minorversion,
+ u16 *fw_buildnum)
{
u16 data;
int result;
@@ -481,6 +499,11 @@
(*hw_minorversion) = (data >> 8) & 0x0F;
(*fw_majorversion) = (data >> 4) & 0x0F;
(*fw_minorversion) = data & 0x0F;
+
+ result = xc_read_reg(priv, XREG_BUILD_NUM, &data);
+ if (result)
+ return result;
+ *fw_buildnum = data;
return 0;
}
@@ -506,6 +529,11 @@
static int xc_get_quality(struct xc5000_priv *priv, u16 *quality)
{
return xc_read_reg(priv, XREG_QUALITY, quality);
+}
+
+static int xc_get_total_gain(struct xc5000_priv *priv, u16 *gain)
+{
+ return xc_read_reg(priv, XREG_TOTAL_GAIN, gain);
}
static u16 WaitForLock(struct xc5000_priv *priv)
@@ -626,8 +654,10 @@
u32 hsync_freq_hz = 0;
u16 frame_lines;
u16 quality;
+ u16 gain;
u8 hw_majorversion = 0, hw_minorversion = 0;
u8 fw_majorversion = 0, fw_minorversion = 0;
+ u16 fw_buildnum = 0;
/* Wait for stats to stabilize.
* Frame Lines needs two frame times after initial lock
@@ -646,10 +676,11 @@
lock_status);
xc_get_version(priv, &hw_majorversion, &hw_minorversion,
- &fw_majorversion, &fw_minorversion);
- dprintk(1, "*** HW: V%02x.%02x, FW: V%02x.%02x\n",
+ &fw_majorversion, &fw_minorversion, &fw_buildnum);
+ dprintk(1, "*** HW: V%02x.%02x, FW: V%02x.%02x build %d\n",
hw_majorversion, hw_minorversion,
- fw_majorversion, fw_minorversion);
+ fw_majorversion, fw_minorversion,
+ fw_buildnum);
xc_get_hsync_freq(priv, &hsync_freq_hz);
dprintk(1, "*** Horizontal sync frequency = %d Hz\n", hsync_freq_hz);
@@ -659,6 +690,9 @@
xc_get_quality(priv, &quality);
dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality);
+
+ xc_get_total_gain(priv, &gain);
+ dprintk(1, "*** Total Gain = %d mdB\n", gain * 1000 / 256);
}
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html