[3/5] tda18218: fix IF frequency for 7MHz bandwidth channels

Message ID 1333401917-27203-4-git-send-email-gennarone@gmail.com (mailing list archive)
State Rejected, archived
Headers

Commit Message

Gianluca Gennari April 2, 2012, 9:25 p.m. UTC
  This is necessary to tune VHF channels with the AVerMedia A835 stick.

Signed-off-by: Gianluca Gennari <gennarone@gmail.com>
---
 drivers/media/common/tuners/tda18218.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
  

Comments

Antti Palosaari April 2, 2012, 10:40 p.m. UTC | #1
On 03.04.2012 00:25, Gianluca Gennari wrote:
> This is necessary to tune VHF channels with the AVerMedia A835 stick.
>
> Signed-off-by: Gianluca Gennari<gennarone@gmail.com>
> ---
>   drivers/media/common/tuners/tda18218.c |    2 +-
>   1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/media/common/tuners/tda18218.c b/drivers/media/common/tuners/tda18218.c
> index dfb3a83..b079696 100644
> --- a/drivers/media/common/tuners/tda18218.c
> +++ b/drivers/media/common/tuners/tda18218.c
> @@ -144,7 +144,7 @@ static int tda18218_set_params(struct dvb_frontend *fe)
>   		priv->if_frequency = 3000000;
>   	} else if (bw<= 7000000) {
>   		LP_Fc = 1;
> -		priv->if_frequency = 3500000;
> +		priv->if_frequency = 4000000;
>   	} else {
>   		LP_Fc = 2;
>   		priv->if_frequency = 4000000;

Kwaak, I will not apply that until I have done background checking. That 
driver is used only by AF9015 currently. And I did that driver as 
reverse-engineering and thus there is some things guessed. I have only 8 
MHz wide signal, thus I never tested 7 and 6 MHz. Have no DVB-T 
modulator either... Maybe some AF9015 user can confirm? Is there any 
AF9015 & TDA18218 bug reports seen in discussion forums...

regards
Antti
  
Gianluca Gennari April 3, 2012, 12:44 a.m. UTC | #2
Il 03/04/2012 00:40, Antti Palosaari ha scritto:
> On 03.04.2012 00:25, Gianluca Gennari wrote:
>> This is necessary to tune VHF channels with the AVerMedia A835 stick.
>>
>> Signed-off-by: Gianluca Gennari<gennarone@gmail.com>
>> ---
>>   drivers/media/common/tuners/tda18218.c |    2 +-
>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/drivers/media/common/tuners/tda18218.c
>> b/drivers/media/common/tuners/tda18218.c
>> index dfb3a83..b079696 100644
>> --- a/drivers/media/common/tuners/tda18218.c
>> +++ b/drivers/media/common/tuners/tda18218.c
>> @@ -144,7 +144,7 @@ static int tda18218_set_params(struct dvb_frontend
>> *fe)
>>           priv->if_frequency = 3000000;
>>       } else if (bw<= 7000000) {
>>           LP_Fc = 1;
>> -        priv->if_frequency = 3500000;
>> +        priv->if_frequency = 4000000;
>>       } else {
>>           LP_Fc = 2;
>>           priv->if_frequency = 4000000;
> 
> Kwaak, I will not apply that until I have done background checking. That
> driver is used only by AF9015 currently. And I did that driver as
> reverse-engineering and thus there is some things guessed. I have only 8
> MHz wide signal, thus I never tested 7 and 6 MHz. Have no DVB-T
> modulator either... Maybe some AF9015 user can confirm? Is there any
> AF9015 & TDA18218 bug reports seen in discussion forums...

A friend has a AF9015+TDA18218 stick and told me that it works fine with
the patch (including VHF), but to be safe I will ask him to double check
with the current media_build tree, with and without the patch. In the
worst case, we can add a new parameter (or an array of parameters) for
the IF frequency to struct tda18218_config.

Regards,
Gianluca

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
poma April 3, 2012, 7:18 a.m. UTC | #3
On 04/03/2012 02:44 AM, Gianluca Gennari wrote:
> Il 03/04/2012 00:40, Antti Palosaari ha scritto:
>> On 03.04.2012 00:25, Gianluca Gennari wrote:
>>> This is necessary to tune VHF channels with the AVerMedia A835 stick.
>>>
>>> Signed-off-by: Gianluca Gennari<gennarone@gmail.com>
>>> ---
>>>   drivers/media/common/tuners/tda18218.c |    2 +-
>>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/drivers/media/common/tuners/tda18218.c
>>> b/drivers/media/common/tuners/tda18218.c
>>> index dfb3a83..b079696 100644
>>> --- a/drivers/media/common/tuners/tda18218.c
>>> +++ b/drivers/media/common/tuners/tda18218.c
>>> @@ -144,7 +144,7 @@ static int tda18218_set_params(struct dvb_frontend
>>> *fe)
>>>           priv->if_frequency = 3000000;
>>>       } else if (bw<= 7000000) {
>>>           LP_Fc = 1;
>>> -        priv->if_frequency = 3500000;
>>> +        priv->if_frequency = 4000000;
>>>       } else {
>>>           LP_Fc = 2;
>>>           priv->if_frequency = 4000000;
>>
>> Kwaak, I will not apply that until I have done background checking. That
>> driver is used only by AF9015 currently. And I did that driver as
>> reverse-engineering and thus there is some things guessed. I have only 8
>> MHz wide signal, thus I never tested 7 and 6 MHz. Have no DVB-T
>> modulator either... Maybe some AF9015 user can confirm? Is there any
>> AF9015 & TDA18218 bug reports seen in discussion forums...
> 
> A friend has a AF9015+TDA18218 stick and told me that it works fine with
> the patch (including VHF), but to be safe I will ask him to double check
> with the current media_build tree, with and without the patch. In the
> worst case, we can add a new parameter (or an array of parameters) for
> the IF frequency to struct tda18218_config.

PASSED on 7MHz bw MUX - 'TerraTec Cinergy T Stick RC'.

rgds,
poma
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Antti Palosaari April 3, 2012, 10:19 a.m. UTC | #4
On 03.04.2012 03:44, Gianluca Gennari wrote:
> Il 03/04/2012 00:40, Antti Palosaari ha scritto:
>> On 03.04.2012 00:25, Gianluca Gennari wrote:
>>> This is necessary to tune VHF channels with the AVerMedia A835 stick.
>>>
>>> Signed-off-by: Gianluca Gennari<gennarone@gmail.com>
>>> ---
>>>    drivers/media/common/tuners/tda18218.c |    2 +-
>>>    1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/drivers/media/common/tuners/tda18218.c
>>> b/drivers/media/common/tuners/tda18218.c
>>> index dfb3a83..b079696 100644
>>> --- a/drivers/media/common/tuners/tda18218.c
>>> +++ b/drivers/media/common/tuners/tda18218.c
>>> @@ -144,7 +144,7 @@ static int tda18218_set_params(struct dvb_frontend
>>> *fe)
>>>            priv->if_frequency = 3000000;
>>>        } else if (bw<= 7000000) {
>>>            LP_Fc = 1;
>>> -        priv->if_frequency = 3500000;
>>> +        priv->if_frequency = 4000000;
>>>        } else {
>>>            LP_Fc = 2;
>>>            priv->if_frequency = 4000000;
>>
>> Kwaak, I will not apply that until I have done background checking. That
>> driver is used only by AF9015 currently. And I did that driver as
>> reverse-engineering and thus there is some things guessed. I have only 8
>> MHz wide signal, thus I never tested 7 and 6 MHz. Have no DVB-T
>> modulator either... Maybe some AF9015 user can confirm? Is there any
>> AF9015&  TDA18218 bug reports seen in discussion forums...
>
> A friend has a AF9015+TDA18218 stick and told me that it works fine with
> the patch (including VHF), but to be safe I will ask him to double check
> with the current media_build tree, with and without the patch. In the
> worst case, we can add a new parameter (or an array of parameters) for
> the IF frequency to struct tda18218_config.

Public short datasheet [1], page 16, says default IFs are BW=8 MHz IF=4 
MHz, BW=7 MHz IF=3.5 MHz, BW=6 MHz IF=3 MHz. I suspect it still locks in 
some cases even IF is off-by 0.5 MHz for BW 7 and 8 but performance is 
reduced. So there is now something wrong, likely bug in the tda18218 driver.

Could someone send me Windows sniff from success tune to 7 MHz BW channel?

[1] http://www.nxp.com/documents/data_sheet/TDA18218HN.pdf
  
Gianluca Gennari April 3, 2012, 4:03 p.m. UTC | #5
Il 03/04/2012 12:19, Antti Palosaari ha scritto:
> On 03.04.2012 03:44, Gianluca Gennari wrote:
>> Il 03/04/2012 00:40, Antti Palosaari ha scritto:
>>> On 03.04.2012 00:25, Gianluca Gennari wrote:
>>>> This is necessary to tune VHF channels with the AVerMedia A835 stick.
>>>>
>>>> Signed-off-by: Gianluca Gennari<gennarone@gmail.com>
>>>> ---
>>>>    drivers/media/common/tuners/tda18218.c |    2 +-
>>>>    1 files changed, 1 insertions(+), 1 deletions(-)
>>>>
>>>> diff --git a/drivers/media/common/tuners/tda18218.c
>>>> b/drivers/media/common/tuners/tda18218.c
>>>> index dfb3a83..b079696 100644
>>>> --- a/drivers/media/common/tuners/tda18218.c
>>>> +++ b/drivers/media/common/tuners/tda18218.c
>>>> @@ -144,7 +144,7 @@ static int tda18218_set_params(struct dvb_frontend
>>>> *fe)
>>>>            priv->if_frequency = 3000000;
>>>>        } else if (bw<= 7000000) {
>>>>            LP_Fc = 1;
>>>> -        priv->if_frequency = 3500000;
>>>> +        priv->if_frequency = 4000000;
>>>>        } else {
>>>>            LP_Fc = 2;
>>>>            priv->if_frequency = 4000000;
>>>
>>> Kwaak, I will not apply that until I have done background checking. That
>>> driver is used only by AF9015 currently. And I did that driver as
>>> reverse-engineering and thus there is some things guessed. I have only 8
>>> MHz wide signal, thus I never tested 7 and 6 MHz. Have no DVB-T
>>> modulator either... Maybe some AF9015 user can confirm? Is there any
>>> AF9015&  TDA18218 bug reports seen in discussion forums...
>>
>> A friend has a AF9015+TDA18218 stick and told me that it works fine with
>> the patch (including VHF), but to be safe I will ask him to double check
>> with the current media_build tree, with and without the patch. In the
>> worst case, we can add a new parameter (or an array of parameters) for
>> the IF frequency to struct tda18218_config.
> 
> Public short datasheet [1], page 16, says default IFs are BW=8 MHz IF=4
> MHz, BW=7 MHz IF=3.5 MHz, BW=6 MHz IF=3 MHz. I suspect it still locks in
> some cases even IF is off-by 0.5 MHz for BW 7 and 8 but performance is
> reduced. So there is now something wrong, likely bug in the tda18218
> driver.
> 
> Could someone send me Windows sniff from success tune to 7 MHz BW channel?
> 
> [1] http://www.nxp.com/documents/data_sheet/TDA18218HN.pdf

Hi Antti,
the situation is a bit confusing.
The A835 always needed the IF frequency modification to tune VHF
channels, even with the famous Xgazza patch based on your old af9035 driver.
Instead, the af9015 was working fine in VHF band with the default 3.5MHz
IF frequency, until the recent rewrite of the tda18218 driver (which I
believe happened around kernel 3.0). After that, the af9015 started
working also with the 4MHz IF frequency (it's not clear if it still
works also with 3.5MHz, I will ask my friend to check this).
So probably you are right, there could be a bug in the tda18218 tuner
that was introduced recently.

A discussion on the A835 and VHF can be found on the Italian Ubuntu
forum (in Italian of course):
http://forum.ubuntu-it.org/index.php/topic,384436.msg3700932.html#msg3700932

Do you have any suggestion on the tool to sniff the windows driver?
Some time ago I tried SnoopyPro 0.22 and I was able to capture the first
~6000 packets of the A835 initialization, then it stopped capturing
before the first picture was displayed. Do you think it's enough? Do you
know any better free tool?

Regards,
Gianluca
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Gianluca Gennari April 4, 2012, 1:15 p.m. UTC | #6
Il 03/04/2012 12:19, Antti Palosaari ha scritto:
> On 03.04.2012 03:44, Gianluca Gennari wrote:
>> Il 03/04/2012 00:40, Antti Palosaari ha scritto:
>>> On 03.04.2012 00:25, Gianluca Gennari wrote:
>>>> This is necessary to tune VHF channels with the AVerMedia A835 stick.
>>>>
>>>> Signed-off-by: Gianluca Gennari<gennarone@gmail.com>
>>>> ---
>>>>    drivers/media/common/tuners/tda18218.c |    2 +-
>>>>    1 files changed, 1 insertions(+), 1 deletions(-)
>>>>
>>>> diff --git a/drivers/media/common/tuners/tda18218.c
>>>> b/drivers/media/common/tuners/tda18218.c
>>>> index dfb3a83..b079696 100644
>>>> --- a/drivers/media/common/tuners/tda18218.c
>>>> +++ b/drivers/media/common/tuners/tda18218.c
>>>> @@ -144,7 +144,7 @@ static int tda18218_set_params(struct dvb_frontend
>>>> *fe)
>>>>            priv->if_frequency = 3000000;
>>>>        } else if (bw<= 7000000) {
>>>>            LP_Fc = 1;
>>>> -        priv->if_frequency = 3500000;
>>>> +        priv->if_frequency = 4000000;
>>>>        } else {
>>>>            LP_Fc = 2;
>>>>            priv->if_frequency = 4000000;
>>>
>>> Kwaak, I will not apply that until I have done background checking. That
>>> driver is used only by AF9015 currently. And I did that driver as
>>> reverse-engineering and thus there is some things guessed. I have only 8
>>> MHz wide signal, thus I never tested 7 and 6 MHz. Have no DVB-T
>>> modulator either... Maybe some AF9015 user can confirm? Is there any
>>> AF9015&  TDA18218 bug reports seen in discussion forums...
>>
>> A friend has a AF9015+TDA18218 stick and told me that it works fine with
>> the patch (including VHF), but to be safe I will ask him to double check
>> with the current media_build tree, with and without the patch. In the
>> worst case, we can add a new parameter (or an array of parameters) for
>> the IF frequency to struct tda18218_config.
> 
> Public short datasheet [1], page 16, says default IFs are BW=8 MHz IF=4
> MHz, BW=7 MHz IF=3.5 MHz, BW=6 MHz IF=3 MHz. I suspect it still locks in
> some cases even IF is off-by 0.5 MHz for BW 7 and 8 but performance is
> reduced. So there is now something wrong, likely bug in the tda18218
> driver.
> 
> Could someone send me Windows sniff from success tune to 7 MHz BW channel?
> 
> [1] http://www.nxp.com/documents/data_sheet/TDA18218HN.pdf

Hi Antti,
I did some testing with the A835 and the findings are interesting. With
the old tda18218 driver the af9015 sticks required IF=3.5MHz to tune VHF
channels, while the A835 required IF=4MHz.

With the current driver, both the af9015 and the A835 are much more
tolerant to IF frequency variations.
In particular, the A835 is capable to successfully tune UHF channels
with IF in the range [3.5,5.5] MHz, and VHF channels with IF in the
range [3.0,6.5] MHz, inclusive.

I don't know if this may be considered the symptom of a bug, but for
sure the patch I posted is useless with the current driver.
If you are still interested in a USB sniff of the Windows driver, just
let me know.

Best regards,
Gianluca
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  
Antti Palosaari April 4, 2012, 1:27 p.m. UTC | #7
On 04.04.2012 16:15, Gianluca Gennari wrote:
> Il 03/04/2012 12:19, Antti Palosaari ha scritto:
>> On 03.04.2012 03:44, Gianluca Gennari wrote:
>>> Il 03/04/2012 00:40, Antti Palosaari ha scritto:
>>>> On 03.04.2012 00:25, Gianluca Gennari wrote:
>>>>> This is necessary to tune VHF channels with the AVerMedia A835 stick.
>>>>>
>>>>> Signed-off-by: Gianluca Gennari<gennarone@gmail.com>
>>>>> ---
>>>>>     drivers/media/common/tuners/tda18218.c |    2 +-
>>>>>     1 files changed, 1 insertions(+), 1 deletions(-)
>>>>>
>>>>> diff --git a/drivers/media/common/tuners/tda18218.c
>>>>> b/drivers/media/common/tuners/tda18218.c
>>>>> index dfb3a83..b079696 100644
>>>>> --- a/drivers/media/common/tuners/tda18218.c
>>>>> +++ b/drivers/media/common/tuners/tda18218.c
>>>>> @@ -144,7 +144,7 @@ static int tda18218_set_params(struct dvb_frontend
>>>>> *fe)
>>>>>             priv->if_frequency = 3000000;
>>>>>         } else if (bw<= 7000000) {
>>>>>             LP_Fc = 1;
>>>>> -        priv->if_frequency = 3500000;
>>>>> +        priv->if_frequency = 4000000;
>>>>>         } else {
>>>>>             LP_Fc = 2;
>>>>>             priv->if_frequency = 4000000;
>>>>
>>>> Kwaak, I will not apply that until I have done background checking. That
>>>> driver is used only by AF9015 currently. And I did that driver as
>>>> reverse-engineering and thus there is some things guessed. I have only 8
>>>> MHz wide signal, thus I never tested 7 and 6 MHz. Have no DVB-T
>>>> modulator either... Maybe some AF9015 user can confirm? Is there any
>>>> AF9015&   TDA18218 bug reports seen in discussion forums...
>>>
>>> A friend has a AF9015+TDA18218 stick and told me that it works fine with
>>> the patch (including VHF), but to be safe I will ask him to double check
>>> with the current media_build tree, with and without the patch. In the
>>> worst case, we can add a new parameter (or an array of parameters) for
>>> the IF frequency to struct tda18218_config.
>>
>> Public short datasheet [1], page 16, says default IFs are BW=8 MHz IF=4
>> MHz, BW=7 MHz IF=3.5 MHz, BW=6 MHz IF=3 MHz. I suspect it still locks in
>> some cases even IF is off-by 0.5 MHz for BW 7 and 8 but performance is
>> reduced. So there is now something wrong, likely bug in the tda18218
>> driver.
>>
>> Could someone send me Windows sniff from success tune to 7 MHz BW channel?
>>
>> [1] http://www.nxp.com/documents/data_sheet/TDA18218HN.pdf
>
> Hi Antti,
> I did some testing with the A835 and the findings are interesting. With
> the old tda18218 driver the af9015 sticks required IF=3.5MHz to tune VHF
> channels, while the A835 required IF=4MHz.
>
> With the current driver, both the af9015 and the A835 are much more
> tolerant to IF frequency variations.
> In particular, the A835 is capable to successfully tune UHF channels
> with IF in the range [3.5,5.5] MHz, and VHF channels with IF in the
> range [3.0,6.5] MHz, inclusive.

IF frequency is frequency used between tuner and demodulator. Thus it 
should be same for the tuner, it is sender Tx, and for demodulator which 
receives it. As you can guess it is like radio channel, it will work if 
it is a little bit wrong but performance will be reduced.

IF frequency is generally more tuner characteristic than demodulator. I 
mean it is likely tuner decides which is optimal IF for signal tuner is 
transferring to demod. Earlier we used configuration option for both 
tuner and demod to set IF. But as the fact is tuner must know it always 
we added new tuner callback .get_if_frequency() demodulator can ask used 
IF from the tuner.

Recently I converted AF9013 driver to use that .get_if_frequency(). I 
think at that point I may have introduced some bug.

And one point to mention, it is sometimes used a little bit different 
IFs that are tuner defaults. It is somehow device design specific, for 
maximum performance device engineers will ran some test to find out 
optimal IF which gives best performance. One reason could be example 
there is RF noise peak (RF spurs) just in used IF which reduces 
performance => lets shift default IF a little bit for maximum performance.

> I don't know if this may be considered the symptom of a bug, but for
> sure the patch I posted is useless with the current driver.
> If you are still interested in a USB sniff of the Windows driver, just
> let me know.

I have used old SniffUSB2.0
http://www.pcausa.com/Utilities/UsbSnoop/
Works fine with Windows XP. Sniff is welcome.

regards
Antti
  
Gianluca Gennari April 6, 2012, 10:40 a.m. UTC | #8
Il 04/04/2012 15:27, Antti Palosaari ha scritto:
> IF frequency is frequency used between tuner and demodulator. Thus it
> should be same for the tuner, it is sender Tx, and for demodulator which
> receives it. As you can guess it is like radio channel, it will work if
> it is a little bit wrong but performance will be reduced.
> 
> IF frequency is generally more tuner characteristic than demodulator. I
> mean it is likely tuner decides which is optimal IF for signal tuner is
> transferring to demod. Earlier we used configuration option for both
> tuner and demod to set IF. But as the fact is tuner must know it always
> we added new tuner callback .get_if_frequency() demodulator can ask used
> IF from the tuner.
> 
> Recently I converted AF9013 driver to use that .get_if_frequency(). I
> think at that point I may have introduced some bug.
> 
> And one point to mention, it is sometimes used a little bit different
> IFs that are tuner defaults. It is somehow device design specific, for
> maximum performance device engineers will ran some test to find out
> optimal IF which gives best performance. One reason could be example
> there is RF noise peak (RF spurs) just in used IF which reduces
> performance => lets shift default IF a little bit for maximum performance.

I found out the origin of the problem: in the old "hacked" driver the
demodulator IF frequency was erroneously hard-coded to 4.57 MHz (like
with the mxl5007t tuner) so there was a mismatch between the tuner and
the demodulator IF setting.

In UHF band, the difference was only 0.57 MHz, so it still worked
(probably with reduced performance). Instead, in VHF band the difference
was over 1 MHz so it was not working. Hacking the tuner IF frequency to
4 MHz in VHF band was enough to get it working, but of course it was not
optimal.

In the end, there is no bug in the current code. Sorry for all the
unnecessary noise about this issue.

Regards,
Gianluca
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  

Patch

diff --git a/drivers/media/common/tuners/tda18218.c b/drivers/media/common/tuners/tda18218.c
index dfb3a83..b079696 100644
--- a/drivers/media/common/tuners/tda18218.c
+++ b/drivers/media/common/tuners/tda18218.c
@@ -144,7 +144,7 @@  static int tda18218_set_params(struct dvb_frontend *fe)
 		priv->if_frequency = 3000000;
 	} else if (bw <= 7000000) {
 		LP_Fc = 1;
-		priv->if_frequency = 3500000;
+		priv->if_frequency = 4000000;
 	} else {
 		LP_Fc = 2;
 		priv->if_frequency = 4000000;