[linux-dvb] pinnacle pctv310i

Hartmut Hackmann hartmut.hackmann at t-online.de
Thu Feb 16 00:27:11 CET 2006



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?

> tuner 0-004b: type set to tda8290+75a
> 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