>Em Sat, 16 Aug 2014 14:12:32 +0800
>"nibble.max" <nibble.max@xxxxxxxxx> escreveu:
>
>> The current m88ts2022 driver will miss the following high symbol rate transponders on Telstar 18 138.0.
>> 12385 H 43200,
>> 12690 H 43200,
>> 12538 V 41250...
>> the code for f_3db_hz will overflow for the high symbol rate.
>> for example, symbol rate=41250 KS/s
>> symbol_rate * 135UL = 5568750000(1 4BEC 61B0), the value is larger than unsigned int on 32bit platform.
>> that makes the wrong result.
>> Exchanging the div and mul position fixs it.
>>
>> Signed-off-by: Nibble Max <nibble.max@xxxxxxxxx>
>> ---
>> drivers/media/tuners/m88ts2022.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/media/tuners/m88ts2022.c b/drivers/media/tuners/m88ts2022.c
>> index 40c42de..65c8acc 100644
>> --- a/drivers/media/tuners/m88ts2022.c
>> +++ b/drivers/media/tuners/m88ts2022.c
>> @@ -314,7 +314,7 @@ static int m88ts2022_set_params(struct dvb_frontend *fe)
>> div_min = gdiv28 * 78 / 100;
>> div_max = clamp_val(div_max, 0U, 63U);
>>
>> - f_3db_hz = c->symbol_rate * 135UL / 200UL;
>> + f_3db_hz = (c->symbol_rate / 200UL) * 135UL;
>
>Hmm... wouldn't this make worse for low symbol rates?
>
The unit of symbol rate for Satellite is KS/s(1000S/s).
So it is safe to divide 200 at the first.
>IMHO, the better is to use a u64 instead, and do_div64().
>
>> f_3db_hz += 2000000U + (frequency_offset_khz * 1000U);
>> f_3db_hz = clamp(f_3db_hz, 7000000U, 40000000U);
>>
>
>Regards,
>--
>
>Cheers,
>Mauro
BEGIN:VCARD
VERSION:2.1
N:nibble.max;
FN:nibble.max
EMAIL;PREF;INTERNET:nibble.max@xxxxxxxxx
REV:20140816T213101Z
END:VCARD