[linux-dvb] some questions on cx23885/xc3028

Zdenek Kabelac zdenek.kabelac at gmail.com
Tue Dec 25 02:10:35 CET 2007


Hello

As I can see - these chips look quite similar to mine AverTV Hybrid
Volar HX. I've checked the official drivers from Aver (version 0.7) -
I've even patched/upgraded the source to compile with 2.6.24 kernels -
but never get pass the moment where driver is loadad - no device has
been ever created on my T61. (no A828 device in the log)
(even when I installed some Ubuntu6.06 which should be natively
supported by their driver - module worked - but as with my patched
2.6.24 - no DVB device appeared in my system with 2.6.15)

So I'd also like to make it working at least with DVB-T tuner.
Is there any chance I could use similar steps and succeed ?
Anyone had already tried ?
Or is this Aver USB device somehow unsable with generic linux
driver?

Thanks for any hints

Regards,

Zdenek

2007/12/24, Steven Toth <stoth at linuxtv.org>:
> Ronald DELOBEL wrote:
> > On Sun, 23 Dec 2007 16:53:03 -0500
> > Steven Toth <stoth at linuxtv.org> wrote:
> >
> >> Ronald DELOBEL wrote:
> >>> Hi,
> >>>
> >>> I have bought a tv/dvb-t card which is unsupported at this time, this
> >>> is a leadtek winfast PxDVR 3200 H.
> >>> Product summary (as far as i can tell): cx23885 bridge, cx23417 encoder,
> >>> xc3028 tuner, zl10353 demod.
> >>>
> >>> I have looked around the v4l-dvb tree, and finally got some results
> >>> today (ok, actually, I have just copied the parts I suspected to match
> >>> the card, I don't *really* now what I am doing).
> >> Welcome, you've come to the right place to learn. :)
> >>
> >> I would say this, the very best you can hope to achieve right now with
> >> the card is to get DVB-T working. This should easily be acheivable.
> >> Drivers for the analog parts are under development.
> >>
> >>> So I have some questions:
> >>>
> >>> Shouldn't the tuner (0xc2) be shown by the i2c scan?
> >> No. This does not surprise me.
> >>
> >> The tuner will not show up in an i2c scan if it's being held
> >> electrically in reset using a GPIO between the '885 and the tuner, or if
> >> it's located behind an I2C gate which is closed on the 353.
> >>
> >> The best way to determine GPIO configuration is described below.
> >
> > I have followed your advice and created a small wiki page
> > http://www.linuxtv.org/wiki/index.php/Leadtek_Winfast_PxDVR_3200_H
> >
> > with the 3 regspy's dumps (external links because I can't upload *.txt
> > files or didn't found how)
>
> Hmm, can't you paste the content directly into the wiki page, they're
> pretty small.
>
> >
> >>> I've tried w_scan, unsucceffuly :
> >>> w_scan version 20070909
> >>> Info: using DVB adapter auto detection.
> >>>    Found DVB-T frontend. Using adapter /dev/dvb/adapter0/frontend0
> >>> -_-_-_-_ Getting frontend capabilities-_-_-_-_
> >>> frontend Zarlink ZL10353 DVB-T supports
> >>> INVERSION_AUTO
> >>> QAM_AUTO
> >>> TRANSMISSION_MODE_AUTO
> >>> GUARD_INTERVAL_AUTO
> >>> HIERARCHY_AUTO
> >>> FEC_AUTO
> >>>
> >>> the frontend seems to be correctly recognized (no?) but a full scan show nothing.
> >>> In the dmesg output there is nothing about firmware loading, doesn't xc3028 need one?
> >> Yes, the 3028 expects to load firmware, but the 3028 driver is lot being
> >> attached - so you're not seeing errors - yet.
> >>
> >>> About firmware, I have two *.rom files which I got from windows install:  wf23885C.rom and wf416enc.rom,
> >>> maybe xc2028 one is in this first, how to extract/use it?
> >> No, neither of these files are for the 3028. The first is for the
> >> bridge, but you don't need it yet. The second is for the encoder, and
> >> you don't need that yet either.
> >>
> >> The 3028 firmware will be compiled directly into the leadtek driver.
> >> However, that firmware is available on the web for download in other
> >> places. I think the wiki at linuxtv.org describes this. If not, ask here.
> >
> > The v4l wiki doesn't provide much informations about this, the em2880
> > page redirects me to  http://mcentral.de/wiki/index.php/Em2880 which I
> > already know (I own a A16D card too), should I download firmwares from
> > there?
> > There is a firmware-tool in v4l2-apps/util/xc3028-firmware/ but I don't
> > know what to provide to it.
>
> I'm not sure. You really need to use the xc3028 driver from linuxtv.org,
> but I don't know where that firmware is - or can be downloaded from.
>
> Mauro, any comments here?
>
> >
> >>> Last question: how can I know what to use portb or portc?
> >> This will be answered along with my GPIO reference below.
> >
> > I think that's portc : VID_C_INT_MSK is 00011101 for digital whereas
> > the same value is affected to VID_A_INT_MSK when in analog, am I on
> > right track?
>
> Yes.
>
> >
> >>> The following is dmesg output after modprobe cx23885 and tveeprom:
> >>>
> >>> cx23885 driver version 0.0.1 loaded
> >>> ACPI: PCI Interrupt 0000:02:00.0[A] -> GSI 18 (level, low) -> IRQ 18
> >>> CORE cx23885[0]: subsystem: 107d:6681, board: Leadtek Winfast PxDVR
> >>> 3200 H [card=7,autodetected] cx23885[0]: i2c bus 0 registered
> >>> cx23885[0]: i2c scan: found device @ 0x1e  [???]
> >>> cx23885[0]: i2c scan: found device @ 0xa0  [eeprom]
> >>> cx23885[0]: i2c bus 1 registered
> >>> cx23885[0]: i2c bus 2 registered
> >>> cx23885[0]: i2c scan: found device @ 0x66  [???]
> >>> cx23885[0]: i2c scan: found device @ 0x88  [cx25837]
> >>> cx23885[0]: i2c scan: found device @ 0x98  [???]
> >>> tveeprom 1-0050: full 256-byte eeprom dump:
> >>> tveeprom 1-0050: 00: 08 00 18 03 00 00 03 ff 20 00 13 00 00 00 00 00
> >>> tveeprom 1-0050: 10: 20 00 13 00 00 00 00 00 20 00 13 00 00 00 00 00
> >>> tveeprom 1-0050: 20: 20 00 13 00 00 00 00 00 20 00 13 00 00 00 00 00
> >>> tveeprom 1-0050: 30: 20 00 13 00 00 00 00 00 20 00 13 00 00 00 00 13
> >>> tveeprom 1-0050: 40: 20 00 13 00 00 00 00 00 20 00 13 00 00 00 00 00
> >>> tveeprom 1-0050: 50: 08 00 18 03 00 00 03 9d 0c 03 05 00 0e 01 00 00
> >>> tveeprom 1-0050: 60: 20 00 13 00 00 00 00 00 50 03 05 00 04 80 00 08
> >>> tveeprom 1-0050: 70: 2c 00 05 00 7d 10 81 66 0c 03 05 80 0e 01 00 00
> >>> tveeprom 1-0050: 80: 82 01 00 22 78 00 00 00 ff ff ff ff ff ff ff ff
> >>> tveeprom 1-0050: 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> >>> tveeprom 1-0050: a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> >>> tveeprom 1-0050: b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> >>> tveeprom 1-0050: c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> >>> tveeprom 1-0050: d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> >>> tveeprom 1-0050: e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> >>> tveeprom 1-0050: f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> >>> cx23885[0]: cx23885 based dvb card
> >>> xc2028 1-0061: type set to XCeive xc2028/xc3028 tuner
> >>> DVB: registering new adapter (cx23885[0])
> >>> DVB: registering frontend 0 (Zarlink ZL10353 DVB-T)...
> >>> cx23885[0]/0: found at 0000:02:00.0, rev: 2, irq: 18, latency: 0, mmio:
> >>> 0xfda00000
> >>> PCI: Setting latency timer of device 0000:02:00.0 to 64
> >>>
> >>> And result of messing around:
> >>>
> >>> diff -r 3683fd95d4ad linux/drivers/media/video/cx23885/cx23885-cards.c
> >>> --- a/linux/drivers/media/video/cx23885/cx23885-cards.c Sun Dec 23 08:15:42 2007 -0200
> >>> +++ b/linux/drivers/media/video/cx23885/cx23885-cards.c Sun Dec 23 20:57:57 2007 +0100
> >>> @@ -122,6 +122,22 @@ struct cx23885_board cx23885_boards[] =
> >>>                 .name           = "Hauppauge WinTV-HVR1500",
> >>>                 .portc          = CX23885_MPEG_DVB,
> >>>         },
> >>> +       [CX23885_BOARD_LEADTEK_WINFAST3200] = {
> >>> +               .name           = "Leadtek Winfast PxDVR 3200 H",
> >>> +               .portc          = CX23885_MPEG_DVB,
> >>> +               /*
> >>> +               .input          = {{
> >>> +                       .type   = CX23885_VMUX_TELEVISION,
> >>> +                       .vmux   = 2,
> >>> +               },{
> >>> +                       .type   = CX23885_VMUX_COMPOSITE1,
> >>> +                       .vmux   = 1,
> >>> +               },{
> >>> +                       .type   = CX23885_VMUX_SVIDEO,
> >>> +                       .vmux   = 3,
> >>> +               }},
> >>> +               */
> >>> +       },
> >>>  };
> >> For the time being, you don't need to define .input, they are not used
> >> in the digital driver - although they will be used by analog.
> >
> > Ok, I  leave this part aside for the moment.
> >
> >>>  const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
> >>>
> >>> @@ -161,7 +177,11 @@ struct cx23885_subid cx23885_subids[] =
> >>>                 .subvendor = 0x0070,
> >>>                 .subdevice = 0x7717,
> >>>                 .card      = CX23885_BOARD_HAUPPAUGE_HVR1500,
> >>> -       },
> >>> +       },{
> >>> +               .subvendor = 0x107d,
> >>> +               .subdevice = 0x6681,
> >>> +               .card      = CX23885_BOARD_LEADTEK_WINFAST3200,
> >>> +       }
> >>>  };
> >>>  const unsigned int cx23885_idcount = ARRAY_SIZE(cx23885_subids);
> >>>
> >>> @@ -250,6 +270,9 @@ void cx23885_gpio_setup(struct cx23885_d
> >>>
> >>>                 cx_set(GP0_IO, 0x00040004); /* Bring the tuner out of reset */
> >>>                 break;
> >>> +       case CX23885_BOARD_LEADTEK_WINFAST3200:
> >>> +               cx_set(GP0_IO, 0x00040004);
> >>> +               break;
> >>>         }
> >>>  }
> >> This is a guess, right? It's a bad idea to guess with GPIO's unless you
> >> know what you're doing, you could be driving current into a part that
> >> doesn't like it. This can break hardware.
> >
> > Yes this was a guess based on the content of the inf file:
> >
> > HKR,"DriverData","tuner_reset_gpio_bit", 0x00010001, 0x02, 0x00, 0x00,
> > 0x00
> >
> > and the following in cx23885-cards.c:
> >
> >  /* GPIO-0 cx24227 demodulator */
> >                 /* GPIO-2 xc3028 tuner */
> >
> > /* Put the parts into reset */
> >                 cx_set(GP0_IO, 0x00050000);
> >                 cx_clear(GP0_IO, 0x00000005);
> >
> > for me this was 2^0 2^2, and since there is only an xc3028 on my card I
> > have tried 2^2 alone.
> >
> > Hopefully this didn't break anything, but now I know it's better not to
> > play with that.
> >
> > Now, I obtained GP0_IO value (00070404) from RegSpy,  could it be as
> > simple as using this 'as is'?
>
> Yes, cx_write(GP0_IO, 0x00070004) should be fine.
>
> >
> > [....]
> >
> >>> Thanks for any help.
> >>>
> >> The first thing you need to do is download this project and install it
> >> on a windows box with your leadtek card:
> >>
> >> http://deinterlace.sourceforge.net/
> >>
> >> Then download this:
> >>
> >> http://www.steventoth.net/anonfiles/RegSpy.exe
> >>
> >> Start the regspy tool and then start the leadtek Tv application and
> >> switch to DVB-T mode, make sure video is playing then use the regspy
> >> tool to dump the register contents to file.
> >>
> >> Then switch to analog mode, ensure the encoder is running and use regspy
> >> to dump the register values again, to another file.
> >>
> >> Finally, stop the TV application, and dump the register values again.
> >>
> >> Perhaps you could create a page on the WIKI and upload these files?
> >> Among other things, these files will us what GPIO values should be used,
> >> and whether it's using portb or c for DVB-T.
> >>
> >> Please ensure all email traffic is posted to this list.
> >>
> >> Regards,
> >>
> >> Steve
> >>
> >
> > Thanks to read this until the end.
> >
> > Merry christmas to everybody.
> >
>
> Regards,
>
> Steve
>
>
> _______________________________________________
> 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