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

Reply via email to