[linux-dvb] fmd1216 integration

Trent Piepho xyzzy at speakeasy.org
Wed Mar 14 01:56:54 CET 2007

On Wed, 14 Mar 2007, Hartmut Hackmann wrote:
> Trent Piepho schrieb:
> >>> philips_fmd1216_tuner_init() just sends { 0x0b, 0xdc, 0x9c, 0xa0 } to the
> >>> tuner.  It could be replaced with the dvb-pll version, which will have
> >>> the same effect.
> >>>
> >> I will have a look
> >
> > My fmd1216 patch will have the tuner init function send {0xdd, 0xa0} to the
> > tuner.  That will set the agc value (byte AB) to 0xa0, the same thing.
> >
> That's new for me. But if the data go to the upper bytes first, you are right.

The way the PLL works is that if the first bit of data sent is a 1, then
the next two bytes are CB+BB (or CB+AB).  If the first bit is a 0, then the
next two bytes are the divisor bytes.  You can send the divisor first then
the control bytes (as dvb-pll does), or the control bytes first and then
the divisor bytes.  Or just the control bytes, or just divisor bytes.

If you look in the v4l tuner module, there is a special case hack to send
the divisor first or second depending on if the new frequency is less than
or greater than the old frequency.

> > Anyway, I don't think the frequency is valid either:
> >
> > divisor = 0x0bdc, ratio bits = 1,1 = 62.5 kHz, so freq = 189.75 MHz
> > But, BB = 0x54, which is analog mode HIGH band.  189.75 MHz would be in the
> > LOW band.  (remember to subtract the IF frequency to compare to the
> > bandswitch points used in the code)
> >
> Ratio bits are 1,0 so 167kHz. But i don't think ath this is so important..

No, they are 1,1.

CB is 0x86 = 1 0 000 11 0
             ^ identifies this as the control bytes
	       ^ selects low charge pump current
	         ^^^ sets the test mode to "normal" mode
		     ^^ Ratio select 1,1 = 62.5 kHz
		        ^ Turn the tuning voltage on

> > How does that happen?  I figured P4 just changed the SAW filters, but it
> > enables/disables the tda9887 too?
> >
> I have no idea why and how this is done, i just observed that...

I wonder if this is a problem for the v4l tuner module.  If one doesn't
start and then stop the dvb frontend before using analog, how does the
tda9887 get turned on?

> > The documentation for the Infineon TUA6034 should be easy to find if you
> > don't have it.  It's pretty clear that you don't need to send the divisor
> > bytes each time.  You can just send CB+BB or in this case CB+AB.  And I've
> > verified that indeed you can set the AGC values with just two bytes.
> >
> If this is the used PLL chip, i should have a look.
> Did you check whether it is allowed to cut off the lo?

I've been told that the fmd1216 uses the TUA6034.  But in this case it
doesn't really matter, all these I2C PLLs work this way.  I have an 11 year
old datasheet for a Philips tuner, and it's the same way.

> Ack
> I'd like to proceed this way:
> - first i correct the bug in the sleep function.
> - When your changes in dvb-pll are in mainstream, i will adapt the code in
>   saa7134-dvb. (you might decide to kick me)
> OK?

My plan was to come up with a patch that converted all the users of fmd1216
at once.

More information about the linux-dvb mailing list