[linux-dvb] Avermedia 777 DVB-T

Hartmut Hackmann hartmut.hackmann at t-online.de
Tue Jan 24 23:00:36 CET 2006


Hi, Jose

Jose Alberto Reguero wrote:
> El Domingo, 22 de Enero de 2006 21:15, Ole Reinartz escribió:
> 
>>[sorry, forgot the list again]
>>
>>Jose Alberto Reguero schrieb:
>>
>>>CLOCK_CTL -> 0x38 ->111000 -> bit 4 ->1
>>
>>Oh, yes, sure ... *blush*
>>
>>I now have the card set up as you described, and that sets up the mt352
>>quite similar as the setup you once sent as a register file. I can tzap
>>channels, but the signal strength is not enough (gave me around 0x5000).
>>I've seen the AGC locked (register 0, bit0) but thats about it.
>>Did you already get some channel locked with your setup?
>>
>>Ole
> 
> With this patch I get a lock.
> 
> tuning to 842000000 Hz
> video pid 0x00a2, audio pid 0x0058
> status 00 | signal 000f | snr 0000 | ber 00000000 | unc 00000000 |
> status 1f | signal 0a2f | snr c8c8 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
> status 1f | signal 5b8f | snr c7c7 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
> status 1f | signal 5b5f | snr c8c8 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
> status 1f | signal 5b4f | snr c7c7 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
> status 1f | signal 5b9f | snr c7c7 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
> status 1f | signal 5c8f | snr c6c6 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
> status 1f | signal 5b5f | snr c7c7 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
> 
Wow, finally we have support for this card!

I just had a glance at your patch. Looks good, but i have a question:
Is it really necessary to duplicate the tuning code? It would be good if
you could avoid this.
A Note: When i have time left, i wish to rework the saa7134-dvb module. I hope
that i can move the tunig code to dvb-pll.c to have a central place.

Best regards
   Hartmut
> 
> 
> ------------------------------------------------------------------------
> 
> Index: linux/drivers/media/video/saa7134/saa7134-cards.c
> ===================================================================
> RCS file: /cvs/video4linux/v4l-dvb/linux/drivers/media/video/saa7134/saa7134-cards.c,v
> retrieving revision 1.124
> diff -u -w -r1.124 saa7134-cards.c
> --- linux/drivers/media/video/saa7134/saa7134-cards.c	19 Jan 2006 15:33:09 -0000	1.124
> +++ linux/drivers/media/video/saa7134/saa7134-cards.c	24 Jan 2006 19:25:07 -0000
> @@ -2624,6 +2624,24 @@
>  			.gpio = 0x000000,	/* GPIO21=Low for FM radio antenna */
>  		},
>  	},
> +	[SAA7134_BOARD_AVERMEDIA_777] = {
> +		.name           = "AverTV DVB-T 777",
> +		.audio_clock    = 0x00187de7,
> +		.tuner_type     = TUNER_ABSENT,
> +		.radio_type     = UNSET,
> +		.tuner_addr	= ADDR_UNSET,
> +		.radio_addr	= ADDR_UNSET,
> +		.mpeg           = SAA7134_MPEG_DVB,
> +		.inputs = {{
> +			.name   = name_comp1,
> +			.vmux   = 0,
> +			.amux   = LINE1,
> +		},{
> +			.name   = name_svideo,
> +			.vmux   = 8,
> +			.amux   = LINE1,
> +		}},
> +	},
>  };
>  
>  const unsigned int saa7134_bcount = ARRAY_SIZE(saa7134_boards);
> @@ -3095,6 +3113,12 @@
>  		.subdevice    = 0x0319,
>  		.driver_data  = SAA7134_BOARD_FLYDVB_TRIO,
>  	},{
> +		.vendor       = PCI_VENDOR_ID_PHILIPS,
> +		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,	/* SAA 7131E */
> +		.subvendor    = 0x1461,
> +		.subdevice    = 0x2c05,
> +		.driver_data  = SAA7134_BOARD_AVERMEDIA_777,
> +	},{
>  		/* --- boards without eeprom + subsystem ID --- */
>  		.vendor       = PCI_VENDOR_ID_PHILIPS,
>  		.device       = PCI_DEVICE_ID_PHILIPS_SAA7134,
> Index: linux/drivers/media/video/saa7134/saa7134-dvb.c
> ===================================================================
> RCS file: /cvs/video4linux/v4l-dvb/linux/drivers/media/video/saa7134/saa7134-dvb.c,v
> retrieving revision 1.38
> diff -u -w -r1.38 saa7134-dvb.c
> --- linux/drivers/media/video/saa7134/saa7134-dvb.c	19 Jan 2006 15:33:09 -0000	1.38
> +++ linux/drivers/media/video/saa7134/saa7134-dvb.c	24 Jan 2006 19:25:07 -0000
> @@ -115,6 +115,27 @@
>  	return 0;
>  }
>  
> +static int mt352_aver777_init(struct dvb_frontend* fe)
> +{
> +	static u8 clock_config []  = { CLOCK_CTL,  0x38, 0x2d };
> +	static u8 reset []         = { RESET,      0x80 };
> +	static u8 adc_ctl_1_cfg [] = { ADC_CTL_1,  0x40 };
> +	static u8 agc_cfg []       = { AGC_TARGET, 0x28, 0xa0 };
> +	static u8 capt_range_cfg[] = { CAPT_RANGE, 0x33 };
> +	struct saa7134_dev *dev= fe->dvb->priv;
> +
> +	printk("%s: %s called\n",dev->name,__FUNCTION__);
> +
> +	mt352_write(fe, clock_config,   sizeof(clock_config));
> +	udelay(200);
> +	mt352_write(fe, reset,          sizeof(reset));
> +	mt352_write(fe, adc_ctl_1_cfg,  sizeof(adc_ctl_1_cfg));
> +	mt352_write(fe, agc_cfg,        sizeof(agc_cfg));
> +	mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg));
> +
> +	return 0;
> +}
> +
>  static int mt352_pinnacle_pll_set(struct dvb_frontend* fe,
>  				  struct dvb_frontend_parameters* params,
>  				  u8* pllbuf)
> @@ -144,6 +165,81 @@
>  	return 0;
>  }
>  
> +static int mt352_aver777_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params, u8* pllbuf)
> +{
> +	int tuner_frequency = 0;
> +	u8 band, cp, filter;
> +
> +	/* determine charge pump */
> +	tuner_frequency = params->frequency + 36166000;
> +	if (tuner_frequency < 87000000)
> +		return -EINVAL;
> +	else if (tuner_frequency < 130000000)
> +		cp = 3;
> +	else if (tuner_frequency < 160000000)
> +		cp = 5;
> +	else if (tuner_frequency < 200000000)
> +		cp = 6;
> +	else if (tuner_frequency < 290000000)
> +		cp = 3;
> +	else if (tuner_frequency < 420000000)
> +		cp = 5;
> +	else if (tuner_frequency < 480000000)
> +		cp = 6;
> +	else if (tuner_frequency < 620000000)
> +		cp = 3;
> +	else if (tuner_frequency < 830000000)
> +		cp = 5;
> +	else if (tuner_frequency < 895000000)
> +		cp = 7;
> +	else
> +		return -EINVAL;
> +
> +	/* determine band */
> +	if (params->frequency < 49000000)
> +		return -EINVAL;
> +	else if (params->frequency < 161000000)
> +		band = 1;
> +	else if (params->frequency < 444000000)
> +		band = 2;
> +	else if (params->frequency < 861000000)
> +		band = 4;
> +	else
> +		return -EINVAL;
> +
> +	/* setup PLL filter */
> +	switch (params->u.ofdm.bandwidth) {
> +	case BANDWIDTH_6_MHZ:
> +		filter = 0;
> +		break;
> +
> +	case BANDWIDTH_7_MHZ:
> +		filter = 0;
> +		break;
> +
> +	case BANDWIDTH_8_MHZ:
> +		filter = 1;
> +		break;
> +
> +	default:
> +		return -EINVAL;
> +	}
> +
> +	/* calculate divisor
> +	 * ((36166000+((1000000/6)/2)) + Finput)/(1000000/6)
> +	 */
> +	tuner_frequency = (((params->frequency / 1000) * 6) + 217496) / 1000;
> +
> +	/* setup tuner buffer */
> +	pllbuf[0] = 0xc2;
> +	pllbuf[1] = (tuner_frequency >> 8) & 0x7f;
> +	pllbuf[2] = tuner_frequency & 0xff;
> +	pllbuf[3] = 0xca;
> +	pllbuf[4] = (cp << 5) | (filter << 3) | band;
> +
> +	return 0;
> +}
> +
>  static struct mt352_config pinnacle_300i = {
>  	.demod_address = 0x3c >> 1,
>  	.adc_clock     = 20333,
> @@ -152,6 +248,12 @@
>  	.demod_init    = mt352_pinnacle_init,
>  	.pll_set       = mt352_pinnacle_pll_set,
>  };
> +
> +static struct mt352_config avermedia_777 = {
> +	.demod_address = 0xf,
> +	.demod_init    = mt352_aver777_init,
> +	.pll_set       = mt352_aver777_pll_set,
> +};
>  #endif
>  
>  /* ------------------------------------------------------------------ */
> @@ -849,6 +951,12 @@
>  		dev->dvb.frontend = mt352_attach(&pinnacle_300i,
>  						 &dev->i2c_adap);
>  		break;
> +
> +	case SAA7134_BOARD_AVERMEDIA_777:
> +		printk("%s: avertv 777 dvb setup\n",dev->name);
> +		dev->dvb.frontend = mt352_attach(&avermedia_777,
> +						 &dev->i2c_adap);
> +		break;
>  #endif
>  #ifdef HAVE_TDA1004X
>  	case SAA7134_BOARD_MD7134:
> Index: linux/drivers/media/video/saa7134/saa7134.h
> ===================================================================
> RCS file: /cvs/video4linux/v4l-dvb/linux/drivers/media/video/saa7134/saa7134.h,v
> retrieving revision 1.89
> diff -u -w -r1.89 saa7134.h
> --- linux/drivers/media/video/saa7134/saa7134.h	19 Jan 2006 15:33:09 -0000	1.89
> +++ linux/drivers/media/video/saa7134/saa7134.h	24 Jan 2006 19:25:07 -0000
> @@ -218,6 +218,7 @@
>  #define SAA7134_BOARD_MSI_TVATANYWHERE_PLUS  82
>  #define SAA7134_BOARD_CINERGY250PCI 83
>  #define SAA7134_BOARD_FLYDVB_TRIO 84
> +#define SAA7134_BOARD_AVERMEDIA_777 85
>  
>  #define SAA7134_MAXBOARDS 8
>  #define SAA7134_INPUT_MAX 8
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> linux-dvb mailing list
> linux-dvb at linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb



More information about the linux-dvb mailing list