Re: XC5000 DVB-T/DMB-TH support

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

 



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);
 }
--
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