[linux-dvb] pinnacle pctv310i

Gabriele Verzeletti gabriele at verzeletti.org
Thu Feb 16 09:58:27 CET 2006



Hartmut Hackmann wrote:

>
>
> Gabriele Verzeletti wrote:
>
>> Hi.
>> I'm trying to make my "pinnacle pctv310i" work.
>> I noticed many are managing to do the same, so I decided to share the 
>> results I've been able to obtain so far.
>> At the moment only non-digital TV signal works.
>> On the card are the following components: TDA8275A Tuner, SAA7131E 
>> decoder and a TDA10046A decoder for earth digital signal.
>> In order to pilot the tuner I had to change the I2C_SCAN addresses 
>> range at the row 533 of TDA8290.C, for the tuner address is at 0xe1.
>>
>>
>> /* probe for tuner chip */
>>        tuners_found = 0;
>>        tuner_addrs = 0;
>>        for (i=0x60; i<= 0xe1; i++) {
>>                msg.addr = i;
>>                ret = i2c_transfer(c->adapter, &msg, 1);
>>
>> Now, loading:
>>
>> eeprom
>> firmware-class
>> saa7134 i2c_scan=1
>>
>> the result is
>>
>> saa7130/34: v4l2 driver version 0.2.14 loaded
>> ACPI: PCI Interrupt 0000:01:00.0[A] -> GSI 21 (level, low) -> IRQ 21
>> saa7133[0]: found at 0000:01:00.0, rev: 208, irq: 21, latency: 64, 
>> mmio: 0xfeafe800
>> saa7133[0]: subsystem: 11bd:002f, board: Pinnacle PCTV 310i 
>> (saa7131E) [card=89,autodetected]
>> saa7133[0]: board init: gpio is 600c000
>> input: Pinnacle PCTV as /class/input/input4
>> ir-kbd-i2c: Pinnacle PCTV detected at i2c-0/0-0047/ir0 [saa7133[0]]
>> saa7133[0]: i2c eeprom 00: bd 11 2f 00 54 20 1c 00 43 43 a9 1c 55 d2 
>> b2 92
>> saa7133[0]: i2c eeprom 10: ff e0 60 06 ff 20 ff ff 00 30 8d 2d 14 35 
>> ff ff
>> saa7133[0]: i2c eeprom 20: 01 2c 01 02 02 01 04 30 98 ff 00 a5 ff 21 
>> 00 c2
>> saa7133[0]: i2c eeprom 30: 96 10 03 32 15 20 ff ff 0c 22 17 88 03 48 
>> e9 3a
>> saa7133[0]: i2c eeprom 40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
>> ff ff
>> saa7133[0]: i2c eeprom 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
>> ff ff
>> saa7133[0]: i2c eeprom 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
>> ff ff
>> saa7133[0]: i2c eeprom 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
>> ff ff
>> saa7133[0]: i2c scan: found device @ 0x10  [???]
>> saa7133[0]: i2c scan: found device @ 0x8e  [???]
>> saa7133[0]: i2c scan: found device @ 0x96  [???]
>> saa7133[0]: i2c scan: found device @ 0xa0  [eeprom]
>> tuner 0-004b: chip found @ 0x96 (saa7133[0])
>> tuner 0-004b: setting tuner address to e1
>
>
> What is this? This can not be correct. Did you change something in the
> probing code in tda8290.c?
>
Yes, i try to change probing code and the module found a tuner at e1... 
the analog tv seems work.

>> tuner 0-004b: type set to tda8290+75a x
>> saa7133[0]: registered device video0 [v4l2]
>> saa7133[0]: registered device vbi0
>> saa7133[0]: registered device radio0
>>
>> As easy to see, I2C is able to find several devices.
>>
>> Device        address        description
>> 0x10        0x08        i2c-controller ???
>> 0x8e        0x47        pctv-irda/ir-kbd-i2c
>> 0x96        0x4b        saa7131E
>> ???        0xe1        tda8290+75a
>> 0xa0        0x50        eeprom
>>
> 0x10 is the tda10046 channel decoder
> 0x8e most probably is the ir chip. On the 300i, it causes a lot of 
> trouble
>      since sometimes it replies without being addressed...
> 0x96 is the tda8290 IF core in the saa7131
> 0xa0 is the saa7131 config eeprom
>
> The tda8275a is not visible here is it is located after a bridge, most
> probably the one in the tda8290. Pierluigi (is that right?) did i already
> tell you this? This is why you first need to talk to the tda8290 before
> you access the tuner yust like it is for the tiger board. It most 
> probably
> has the address 0xc2.
> Again: 0xe1 can not be right, it not even is a valid write address.
>
>>
>> At the moment I'm trying many solutions for DVB-T, but the results ar 
>> quite disappointing.
>> All I obtain is always:
>>
>> tda1004x: pll set failed
>>
>> Here are the changes I made to SAA7134-DVB.C
>>
>> static int pctv310i_pll_set(struct dvb_frontend *fe, struct 
>> dvb_frontend_parameters *params)
>> {
>>        int ret;
>>        ret = philips_tda827xa_pll_set(0xe1, fe, params);
>>        return ret;
>> }
>> static int pctv310i_pll_init(struct dvb_frontend *fe)
>> {
>>        return 0;
>> }
>> static void pctv310i_pll_sleep(struct dvb_frontend *fe)
>> {
>>        philips_tda827xa_pll_sleep( 0xe1, fe);
>> }
>> static int pctv310i_request_firmware(struct dvb_frontend *fe,
>>                                           const struct firmware **fw, 
>> char *name)
>> {
>>        struct saa7134_dev *dev = fe->dvb->priv;
>>        return request_firmware(fw, name, &dev->pci->dev);
>> }
>> static struct tda1004x_config pctv310i_config = {
>>        .demod_address = 0x08,
>>        .invert        = 1,
>>        .invert_oclk   = 0,
>>        .xtal_freq     = TDA10046_XTAL_16M,
>>        .agc_config    = TDA10046_AGC_TDA827X,
>>        .if_freq       = TDA10046_FREQ_045,
>>        .pll_init      = pctv310i_pll_init,
>>        .pll_set       = pctv310i_pll_set,
>>        .pll_sleep     = pctv310i_pll_sleep,
>>        .request_firmware = pctv310i_request_firmware,
>> };
>>
>> Put dvb-fe-tda10046.fw in the firmware directory
>> and at the module loading:
>>
>> modprobe saa7134-dvb
>>
>> DVB: registering new adapter (saa7133[0]).
>> DVB: registering frontend 0 (Philips TDA10046H DVB-T)...
>> tda1004x: setting up plls for 48MHz sampling clock
>> tda1004x: found firmware revision 20 -- ok
>>
>> I also found this post in a forum that made me think I'n not aiming 
>> the correct way...
>>
>> "The tuner is - as far as i know - a TDA8275a. This is supported. But
>> the application of the tuner is different, it has an external 
>> preamplifier.
>> This requires a different strategy for the AGC - which is not 
>> implemented
>> yet. But it might work at least a bit without it.
>> The other issues:
>> I can't belive that there is no firmware eeprom on the card but its 
>> address
>> might be controlled in a different way.
>> You need to use the pll_init and pll_sleep functions to switch the board
>> between analog and dvb mode. This mainly is switching the AGC source
>> between analog IF and the channel decoder. I have no idea how this is
>> done on the pinnacle board. Some boards do this by just setting
>> the outputs to tristate (the chip drivers do this when they go to sleep
>> mode). But most use an analog multiplexer (4052), controlled by some
>> GPIO pin. It is the hard part of the job to find which one."
>>
> Maybe this helps a bit.
>
> Hartmut




More information about the linux-dvb mailing list