Re: XC5000 DVB-T/DMB-TH support

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

 



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

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux