Commit 6b3bfe71 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Greg Kroah-Hartman

media: ts2020: avoid integer overflows on 32 bit machines

commit 81742be1 upstream.

Before this patch, when compiled for arm32, the signal strength
were reported as:

Lock   (0x1f) Signal= 4294908.66dBm C/N= 12.79dB

Because of a 32 bit integer overflow. After it, it is properly
reported as:

	Lock   (0x1f) Signal= -58.64dBm C/N= 12.79dB

Fixes: 0f91c9d6 ("[media] TS2020: Calculate tuner gain correctly")
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent febb8673
...@@ -369,7 +369,7 @@ static int ts2020_read_tuner_gain(struct dvb_frontend *fe, unsigned v_agc, ...@@ -369,7 +369,7 @@ static int ts2020_read_tuner_gain(struct dvb_frontend *fe, unsigned v_agc,
gain2 = clamp_t(long, gain2, 0, 13); gain2 = clamp_t(long, gain2, 0, 13);
v_agc = clamp_t(long, v_agc, 400, 1100); v_agc = clamp_t(long, v_agc, 400, 1100);
*_gain = -(gain1 * 2330 + *_gain = -((__s64)gain1 * 2330 +
gain2 * 3500 + gain2 * 3500 +
v_agc * 24 / 10 * 10 + v_agc * 24 / 10 * 10 +
10000); 10000);
...@@ -387,7 +387,7 @@ static int ts2020_read_tuner_gain(struct dvb_frontend *fe, unsigned v_agc, ...@@ -387,7 +387,7 @@ static int ts2020_read_tuner_gain(struct dvb_frontend *fe, unsigned v_agc,
gain3 = clamp_t(long, gain3, 0, 6); gain3 = clamp_t(long, gain3, 0, 6);
v_agc = clamp_t(long, v_agc, 600, 1600); v_agc = clamp_t(long, v_agc, 600, 1600);
*_gain = -(gain1 * 2650 + *_gain = -((__s64)gain1 * 2650 +
gain2 * 3380 + gain2 * 3380 +
gain3 * 2850 + gain3 * 2850 +
v_agc * 176 / 100 * 10 - v_agc * 176 / 100 * 10 -
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment