[linux-dvb] Re: [video4linux-cvs] Add support for the Avermedia 777 DVB-T card

Michael Krufky mkrufky at linuxtv.org
Mon Jan 30 04:36:28 CET 2006


video4linux-cvs-sender at linuxtv.org wrote:
> From: Jose Alberto Reguero  <jareguero at telefonica.net>
> Add support for the Avermedia 777 DVB-T card
> 
> Signed-off-by: Jose Alberto Reguero <jareguero at telefonica.net>
> Signed-off-by: Hartmut Hackmann <hartmut.hackmann at t-online.de>

This patch causes the following warnings during the build:

saa7134-tvaudio.c: In function 'tvaudio_setmode':
saa7134-tvaudio.c:309: warning: enumeration value 'TVAUDIO_AM_MONO' not 
handled in switch
saa7134-tvaudio.c: In function 'tvaudio_getstereo':
saa7134-tvaudio.c:439: warning: enumeration value 'TVAUDIO_AM_MONO' not 
handled in switch
saa7134-tvaudio.c: In function 'tvaudio_setstereo':
saa7134-tvaudio.c:505: warning: enumeration value 'TVAUDIO_AM_MONO' not 
handled in switch

Also, please skip below to the function: static int 
mt352_aver777_pll_set , for more comments.


> Changeset=3267 commited by Hartmut Hackmann
> 
>  linux/Documentation/video4linux/CARDLIST.saa7134  |    1 
>  linux/drivers/media/video/saa7134/saa7134-cards.c |   24 +++
>  linux/drivers/media/video/saa7134/saa7134-dvb.c   |  108 ++++++++++++++
>  linux/drivers/media/video/saa7134/saa7134.h       |    2 
>  4 files changed, 135 insertions(+)
> 
> diff -r c60422d55d2c -r 5d9b4019d44e linux/Documentation/video4linux/CARDLIST.saa7134
> --- a/linux/Documentation/video4linux/CARDLIST.saa7134	Sun Jan 29 22:27:06 2006
> +++ b/linux/Documentation/video4linux/CARDLIST.saa7134	Sun Jan 29 23:57:55 2006
> @@ -83,3 +83,4 @@
>   82 -> MSI TV at Anywhere plus                     [1462:6231]
>   83 -> Terratec Cinergy 250 PCI TV              [153b:1160]
>   84 -> LifeView FlyDVB Trio                     [5168:0319]
> + 85 -> AverTV DVB-T 777                         [1461:2c05]
> diff -r c60422d55d2c -r 5d9b4019d44e linux/drivers/media/video/saa7134/saa7134-cards.c
> --- a/linux/drivers/media/video/saa7134/saa7134-cards.c	Sun Jan 29 22:27:06 2006
> +++ b/linux/drivers/media/video/saa7134/saa7134-cards.c	Sun Jan 29 23:57:55 2006
> @@ -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);
> @@ -3094,6 +3112,12 @@
>  		.subvendor    = 0x5168,
>  		.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,
> diff -r c60422d55d2c -r 5d9b4019d44e linux/drivers/media/video/saa7134/saa7134-dvb.c
> --- a/linux/drivers/media/video/saa7134/saa7134-dvb.c	Sun Jan 29 22:27:06 2006
> +++ b/linux/drivers/media/video/saa7134/saa7134-dvb.c	Sun Jan 29 23:57:55 2006
> @@ -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;
>  }
>  

Why is all this tuner programming (below) hardcoded into the card 
driver?  I've noticed a LOT of this in saa7134-dvb.c  Most of these can 
be converted to use dvb-pll, and I see no reason why new code should be 
accepted this way.  We are trying to have consistant looking code, and 
this is counter-productive.  Please re-do this function to use dvb-pll, 
so that other devices that have the same tuner can share its programming.

> +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,
> @@ -151,6 +247,12 @@
>  	.no_tuner      = 1,
>  	.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:
> diff -r c60422d55d2c -r 5d9b4019d44e linux/drivers/media/video/saa7134/saa7134.h
> --- a/linux/drivers/media/video/saa7134/saa7134.h	Sun Jan 29 22:27:06 2006
> +++ b/linux/drivers/media/video/saa7134/saa7134.h	Sun Jan 29 23:57:55 2006
> @@ -68,6 +68,7 @@
>  	TVAUDIO_FM_K_STEREO   = 4,
>  	TVAUDIO_NICAM_AM      = 5,
>  	TVAUDIO_NICAM_FM      = 6,
> +	TVAUDIO_AM_MONO	      = 7
>  };
>  
>  enum saa7134_audio_in {
> @@ -218,6 +219,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
> 
> _______________________________________________
> video4linux-cvs mailing list
> video4linux-cvs at linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/video4linux-cvs




More information about the linux-dvb mailing list