Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: tda10086: cleanup symbol_rate setting logic

The original logic had an integer to unsigned integer
conversion, plus a float-point math. While gcc should be
able to do the match at compile time, other compilers might
not do the same. Also, those produce the following warnings
with static code analyzers:

drivers/media/dvb-frontends/tda10086.c:300 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.
drivers/media/dvb-frontends/tda10086.c:303 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.
drivers/media/dvb-frontends/tda10086.c:306 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.
drivers/media/dvb-frontends/tda10086.c:309 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.
drivers/media/dvb-frontends/tda10086.c:312 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.
drivers/media/dvb-frontends/tda10086.c:315 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.
drivers/media/dvb-frontends/tda10086.c:318 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.
drivers/media/dvb-frontends/tda10086.c:321 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.
drivers/media/dvb-frontends/tda10086.c:324 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.
drivers/media/dvb-frontends/tda10086.c:327 tda10086_set_symbol_rate() warn: unsigned 'symbol_rate' is never less than zero.

Change the logic to declare the reference constant as unsigned
and to not use float point math.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

+11 -11
+11 -11
drivers/media/dvb-frontends/tda10086.c
··· 17 17 #include <media/dvb_frontend.h> 18 18 #include "tda10086.h" 19 19 20 - #define SACLK 96000000 20 + #define SACLK 96000000U 21 21 22 22 struct tda10086_state { 23 23 struct i2c_adapter* i2c; ··· 297 297 dprintk ("%s %i\n", __func__, symbol_rate); 298 298 299 299 /* setup the decimation and anti-aliasing filters.. */ 300 - if (symbol_rate < (u32) (SACLK * 0.0137)) { 300 + if (symbol_rate < SACLK / 10000 * 137) { 301 301 dfn=4; 302 302 afs=1; 303 - } else if (symbol_rate < (u32) (SACLK * 0.0208)) { 303 + } else if (symbol_rate < SACLK / 10000 * 208) { 304 304 dfn=4; 305 305 afs=0; 306 - } else if (symbol_rate < (u32) (SACLK * 0.0270)) { 306 + } else if (symbol_rate < SACLK / 10000 * 270) { 307 307 dfn=3; 308 308 afs=1; 309 - } else if (symbol_rate < (u32) (SACLK * 0.0416)) { 309 + } else if (symbol_rate < SACLK / 10000 * 416) { 310 310 dfn=3; 311 311 afs=0; 312 - } else if (symbol_rate < (u32) (SACLK * 0.0550)) { 312 + } else if (symbol_rate < SACLK / 10000 * 550) { 313 313 dfn=2; 314 314 afs=1; 315 - } else if (symbol_rate < (u32) (SACLK * 0.0833)) { 315 + } else if (symbol_rate < SACLK / 10000 * 833) { 316 316 dfn=2; 317 317 afs=0; 318 - } else if (symbol_rate < (u32) (SACLK * 0.1100)) { 318 + } else if (symbol_rate < SACLK / 10000 * 1100) { 319 319 dfn=1; 320 320 afs=1; 321 - } else if (symbol_rate < (u32) (SACLK * 0.1666)) { 321 + } else if (symbol_rate < SACLK / 10000 * 1666) { 322 322 dfn=1; 323 323 afs=0; 324 - } else if (symbol_rate < (u32) (SACLK * 0.2200)) { 324 + } else if (symbol_rate < SACLK / 10000 * 2200) { 325 325 dfn=0; 326 326 afs=1; 327 - } else if (symbol_rate < (u32) (SACLK * 0.3333)) { 327 + } else if (symbol_rate < SACLK / 10000 * 3333) { 328 328 dfn=0; 329 329 afs=0; 330 330 } else {