[linux-dvb] some questions on cx23885/xc3028

Steven Toth stoth at linuxtv.org
Tue Dec 25 16:09:35 CET 2007


Zdenek Kabelac wrote:
> 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.
>>>

Please don't top post, it get's annoying for everyone. Either start a 
new thread or quote below the original email.

AverTV Hybrid Volar HX, shows up on google images as either a USB 
product or a PCI express product.

If this board has silicon that linuxtv.org has drivers for, then yes we 
can probably make it work.

Check the wiki. If it does not have pictures then please take some and 
try to identify which parts the product uses. Once you have an accurate 
wiki pages we can try adding support after that.

Regards,

Steve



More information about the linux-dvb mailing list