[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