Re: Re: [PATCH] m88ts2022: fix high symbol rate transponders missing on32bit platform.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>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

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux