Hi.
Trent Piepho schrieb:
> On Mon, 12 Mar 2007, Hartmut Hackmann wrote:
>>> On Sunday 11 March 2007 09:40, Trent Piepho wrote:
>>>> In dvb-pll, the frequency offset, which is the IF frequency the tuner will
>>>> output at, is set to 36.213333 MHz. It looks like this code was written
>>>> about two years ago by Patrick as part of the reverse engineered cxusb
>>>> driver.
>>>>
>>>> In saa7134-dvb, there is some totally different code from programming
>>>> fmd1216 tuners, and it uses an IF frequency of 36.13 MHz.
>>>>
>>>> So, why the difference?
>
> After looking at dvb-pll some more, I'm pretty sure the difference between
> the saa7134 and the dvb-pll IF frequency is that the dvb-pll version has
> 1/2 the step size added in, so the result will be rounded correctly.
>
> I think that should be done is adjust the IF values in in the dvb-pll
> config structs to NOT include step-size/2 for rounding. Just use the IF
> frequency. This is how most of the PLL definitions are already. The code
> which calculates the divisor should be changed to round to the nearest
> integer, rather than round down.
>
Jep
>> I wrote the code in saa7134-dvb. The FMD1216 has an integrated SAW filter
>> for DVB-T, the data sheet says 36.13MHz. This is strange because the
>> data sheet also recommends a tuning step size of 167 kHz (4 MHz / 24),
>> so it should be 36.167MHz....
>
> Maybe the person who picked the SAW filter and the person who recommended
> the step size should have talked to each other...
>
>> When i started writing it, there was no dvb-pll module. And the reason
>> why i didn't move to dvb-pll yet is that this module has no means to
>> control the RF AGC. Philips recommends different setting for analog and
>> DVB-T.
>
> dvb-pll can do this now. These are the notes I've made about converting
> fmd1216 to use dvb-pll wrt the saa7134 driver.
>
ok that's new
> saa7134 driver
>
> tda10046 demod, driver supports IF 36.13 Mhz (used here) or 36.17 MHz
> SAA7134_BOARD_MD7134 Medion 7134
> SAA7134_BOARD_ASUS_EUROPA2_HYBRID Asus Europa2 OEM
>
> tuner_ops.init = philips_fmd1216_tuner_init
> tuner_ops.sleep = philips_fmd1216_tuner_sleep
> tuner_ops.set_params = philips_fmd1216_tuner_set_params
>
> 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
> philips_fmd1216_tuner_set_params() does not use dvb_pll_configure(), but is
> totally different code. I've looked through it, and it will end up sending
> almost the same data to the tuner. The only difference is that dvb-pll
> uses a IF frequency of 36.213333 MHz while the code in saa7134 uses 36.13
> MHz. In this case, I think dvb-pll is wrong. It looks like the 26.213 MHz
> value was written by Patrick Boettcher in 2005 when he wrote the cxusb
> driver. Actually, what I think now is that the dvb-pll value is offset by
> stepsize/2 for rounding, since dvb-pll rounds down while saa7143 rounds to
> nearest. I should make a patch to fix rounding in dvb-pll.
>
> philips_fmd1216_tuner_sleep() is buggy! The _first_ time it is called
> after _module loading_ it will send {0x0b, 0xdc, 0x9c, 0x60} and then
> {0x0b, 0xdc, 0x86, 0x54} to the tuner. The first sequence sets AGC to
> analog mode (IMHO, the v4l tuner driver should do this for tuner init,
> but it doesn't). The second sequence just tunes to some random frequency
> for no apparent reason. Neither actually turns the tuner off!
>
AFIK the v4l tuner driver can't do this since init is called only one at
module initialization. Maybe the sequence is overdone but the intention is:
- set up RF AGC
- set the PLL to a valid frequency. I was told that this is important.
- turn on the tda9887. This is invisible on the I2C bus in DVB mode.
I am not aware that the tuner actually has a sleep mode. I used the sleep
call be cause it simply was there.
> After the first time it is called, philips_fmd1216_tuner_sleep() will just
> send {0x0b, 0xdc, 0x86, 0x54} twice! The array the sequence is in
> shouldn't be static, or there should just be two static arrays for each
> sequence. IMHO, using static locals that are not const is almost always
> wrong in the kernel.
>
Thats right, it is a bug.
> I think this could be replaced with the dvb-pll sleep function, if a
> sleep sequence was added to dvb_pll_fmd1216me. We should send {0x9d,
> 0x60}, which will turn the tuner off and set the AGC back to the analog
> recommended value.
>
Hm, the sequence is incomplete.. Do you have more information about the
PLL chip?
I will be happy to remove the tuning code from saa7134-dvb as soon as
dvb-pll fulfills the needs - and things look like we are close to this.
Are you aware that there is also the td1316?
Hartmut
_______________________________________________
linux-dvb mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb