On Mon, Mar 30, 2009 at 11:39 PM, David Wong <davidtlwong@xxxxxxxxx> wrote: > On Tue, Mar 31, 2009 at 10:57 AM, Devin Heitmueller > <devin.heitmueller@xxxxxxxxx> wrote: >> On Mon, Mar 30, 2009 at 10:47 PM, David Wong <davidtlwong@xxxxxxxxx> 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 majordomo@xxxxxxxxxxxxxxx >>> 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); > } > That compensation offset should be correct for all of the digital standards. Yeah, without having one to try out, I am not sure. I already have a patch for the build number and total gain in my queue (along with a bunch of other bugfixes and performance improvements). I'm just waiting on Xceive to resolve the firmware licensing issue (I spoke to them last week about it). Devin -- Devin J. Heitmueller http://www.devinheitmueller.com AIM: devinheitmueller -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html