[linux-dvb] DVICO FusionHDTV DVB-T1

frosts1 at hotkey.net.au frosts1 at hotkey.net.au
Tue Jul 5 13:08:06 CEST 2005


I posted previously to this mailing list about the problems with the 
definition of "struct dvb_pll_desc dvb_pll_lg_z201" in dvb-pll.c, but 
got no response. What do I need to do to get this fix included in cvs? 
It appears the the DVICO Fusion HDTV DVB-T1 is the only card that uses
this tuner definition, and the definition is wrong, so I can't see any
problem in just fixing it.

Can someone with cvs update access please patch the file and commit it
to CVS. I have attached the patch.

Thanks (hopefully) in advance,

Greg Frost

> There have been a number of people reporting success with the DVICO cards and
> the 2.6.12 kernel. Unfortunately, these are people with the Plus card and I
> have the T1 card. The differences are highlighted on this page:
> http://www.fusionhdtv.co.kr/eng/Products/DVBT.aspx in the table at the bottom.
> The principal difference is the tuner. T1=LG-Z201 Plus=Thomson 7579.
> 
> So I went hunting in the kernel code to try to see what was different in the
> tuner area for my patched 2.6.11.7 (using Chris Pascoes patches from
> www.itee.uq.edu.au/~chrisp/Linux-DVB/DVICO/) which works and 2.6.12 which
> doesnt.
> 
> This was a lot harder than I thought it would be because the structure of the
> code has been completely changed, but here's what I found:
> 
> This is the bit of code that controls the lg-z201 tuner in my patched 2.6.11.7
> kernel:
> Code:
> static int lg_z201_pll_set(struct dvb_frontend* fe,
>             struct dvb_frontend_parameters* params, u8* pllbuf)
> {
>    u32 div;
>    unsigned char cp = 0;
>    unsigned char bs = 0;
> 
>    printk ("lg_z201_pll_set %dn", params->frequency);
> 
>    div = (((params->frequency + 83333) * 3) / 500000) + IF_FREQUENCYx6;
> 
>    if (params->frequency < 542000000) cp = 0xbc;
>    else if (params->frequency < 830000000) cp = 0xf4;
>    else cp = 0xfc;
> 
>    if (params->frequency == 0) bs = 0x03;
>    else if (params->frequency < 157500000) bs = 0x01;
>    else if (params->frequency < 443250000) bs = 0x02;
>    else bs = 0x04;
> 
>    pllbuf[0] = 0xC2; /* Note: non-linux standard PLL I2C address */
>    pllbuf[1] = div >> 8;
>    pllbuf[2] = div & 0xff;
>    pllbuf[3] = cp;
>    pllbuf[4] = bs;
> 
>    return 0;
> }
> Notice in particular the cp and bs values and how they vary with frequency.
> 
> I then looked in the 2.6.12 code and found the following in
> drivers/media/dvb/fontends/dvb-pll.c:
> Code:
> struct dvb_pll_desc dvb_pll_lg_z201 = {
>    .name  = "LG z201",
>    .min   = 174000000,
>    .max   = 862000000,
>    .count = 5,
>    .entries = {
>       {          0, 36166667, 166666, 0xbc, 0x03 },
>       {  443250000, 36166667, 166666, 0xbc, 0x01 },
>       {  542000000, 36166667, 166666, 0xbc, 0x02 },
>       {  830000000, 36166667, 166666, 0xf4, 0x02 },
>       {  999999999, 36166667, 166666, 0xfc, 0x02 },
>    },
> };
> EXPORT_SYMBOL(dvb_pll_lg_z201);
> 
> 
> So it looks like the same stuff is represented in a table and there must be
> some
> generic bit of code that uses the info in the table to tune the card. It looks
> like the last two fields are the cp and bs values. Looking at some of the 
> other
> tuners, I established that the values are to be used for frequencies below the
> frequency in the first field.
> 
> Now compare this with the code for the lg_z201 from my working kernel and you
> will see that the numbers don't match. The bs value should only be 0x01 below
> 157500000 and 0x02 below 443250000 and then 0x04 for all other frequencies. I
> modified the 2.6.12 (which I have check is the same as cvs at the moment) code
> as shown below:
> Code:
> struct dvb_pll_desc dvb_pll_lg_z201 = {
>    .name  = "LG z201",
>    .min   = 174000000,
>    .max   = 862000000,
>    .count = 6,
>    .entries = {
>       {          0, 36166667, 166666, 0xbc, 0x03 },
>       {  157500000, 36166667, 166666, 0xbc, 0x01 },
>       {  443250000, 36166667, 166666, 0xbc, 0x02 },
>       {  542000000, 36166667, 166666, 0xbc, 0x04 },
>       {  830000000, 36166667, 166666, 0xf4, 0x04 },
>       {  999999999, 36166667, 166666, 0xfc, 0x04 },
>    },
> };
> EXPORT_SYMBOL(dvb_pll_lg_z201);
> Rebuilt the kernel and everything worked!
> 
> Was this just an oversight from the person who re-structured the code, or is
> there a card using an LG ZX201 that needs to be controlled this way. If it is
> the former, it would be nice to have the change incorporated.
> 
> Greg Frost
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch-linux-2.6.12-dvico-dvb-t1.diff
Type: application/x-unknown-application-octet-stream
Size: 966 bytes
Desc: not available
Url : http://www.linuxtv.org/pipermail/linux-dvb/attachments/20050705/0cc9cf63/patch-linux-2.6.12-dvico-dvb-t1.bin


More information about the linux-dvb mailing list