Commit 0e377819 authored by Klaus Schmidinger's avatar Klaus Schmidinger Committed by Mauro Carvalho Chehab

[media] stb0899: fix the limits for signal strength values

stb0899: fix the limits for signal strength values

stb0899_read_signal_strength() adds an offset to the result of the table lookup.
That offset must correspond to the lowest value in the lookup table, to make sure
the result doesn't get below 0, which would mean a "very high" value since the
parameter is unsigned.
'strength' and 'snr' need to be initialized to 0 to make sure they have a
defined result in case there is no "internal->lock".
Signed-off-by: default avatarKlaus Schmidinger <Klaus.Schmidinger@tvdr.de>
Cc: Manu Abraham <abraham.manu@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent fa5527cd
...@@ -67,7 +67,7 @@ static const struct stb0899_tab stb0899_cn_tab[] = { ...@@ -67,7 +67,7 @@ static const struct stb0899_tab stb0899_cn_tab[] = {
* Crude linear extrapolation below -84.8dBm and above -8.0dBm. * Crude linear extrapolation below -84.8dBm and above -8.0dBm.
*/ */
static const struct stb0899_tab stb0899_dvbsrf_tab[] = { static const struct stb0899_tab stb0899_dvbsrf_tab[] = {
{ -950, -128 }, { -750, -128 },
{ -748, -94 }, { -748, -94 },
{ -745, -92 }, { -745, -92 },
{ -735, -90 }, { -735, -90 },
...@@ -131,7 +131,7 @@ static const struct stb0899_tab stb0899_dvbs2rf_tab[] = { ...@@ -131,7 +131,7 @@ static const struct stb0899_tab stb0899_dvbs2rf_tab[] = {
{ -730, 13645 }, { -730, 13645 },
{ -750, 13909 }, { -750, 13909 },
{ -766, 14153 }, { -766, 14153 },
{ -999, 16383 } { -950, 16383 }
}; };
/* DVB-S2 Es/N0 quant in dB/100 vs read value * 100*/ /* DVB-S2 Es/N0 quant in dB/100 vs read value * 100*/
...@@ -964,6 +964,7 @@ static int stb0899_read_signal_strength(struct dvb_frontend *fe, u16 *strength) ...@@ -964,6 +964,7 @@ static int stb0899_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
int val; int val;
u32 reg; u32 reg;
*strength = 0;
switch (state->delsys) { switch (state->delsys) {
case SYS_DVBS: case SYS_DVBS:
case SYS_DSS: case SYS_DSS:
...@@ -987,7 +988,7 @@ static int stb0899_read_signal_strength(struct dvb_frontend *fe, u16 *strength) ...@@ -987,7 +988,7 @@ static int stb0899_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
val = STB0899_GETFIELD(IF_AGC_GAIN, reg); val = STB0899_GETFIELD(IF_AGC_GAIN, reg);
*strength = stb0899_table_lookup(stb0899_dvbs2rf_tab, ARRAY_SIZE(stb0899_dvbs2rf_tab) - 1, val); *strength = stb0899_table_lookup(stb0899_dvbs2rf_tab, ARRAY_SIZE(stb0899_dvbs2rf_tab) - 1, val);
*strength += 750; *strength += 950;
dprintk(state->verbose, FE_DEBUG, 1, "IF_AGC_GAIN = 0x%04x, C = %d * 0.1 dBm", dprintk(state->verbose, FE_DEBUG, 1, "IF_AGC_GAIN = 0x%04x, C = %d * 0.1 dBm",
val & 0x3fff, *strength); val & 0x3fff, *strength);
} }
...@@ -1009,6 +1010,7 @@ static int stb0899_read_snr(struct dvb_frontend *fe, u16 *snr) ...@@ -1009,6 +1010,7 @@ static int stb0899_read_snr(struct dvb_frontend *fe, u16 *snr)
u8 buf[2]; u8 buf[2];
u32 reg; u32 reg;
*snr = 0;
reg = stb0899_read_reg(state, STB0899_VSTATUS); reg = stb0899_read_reg(state, STB0899_VSTATUS);
switch (state->delsys) { switch (state->delsys) {
case SYS_DVBS: case SYS_DVBS:
......
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