Commit 340e7696 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

[media] drxk: Fix bogus signal strength indicator

The DVBv3 signal strength indicator is bogus: it doesn't range
from 0 to 65535 as it would be expected. Also, 0 means the max
signal strength.
Now that a better way to estimate it was added, use the new
way.
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 59a7a23c
...@@ -2490,32 +2490,6 @@ static int SetAgcIf(struct drxk_state *state, ...@@ -2490,32 +2490,6 @@ static int SetAgcIf(struct drxk_state *state,
return status; return status;
} }
static int ReadIFAgc(struct drxk_state *state, u32 *pValue)
{
u16 agcDacLvl;
int status;
u16 Level = 0;
dprintk(1, "\n");
status = read16(state, IQM_AF_AGC_IF__A, &agcDacLvl);
if (status < 0) {
printk(KERN_ERR "drxk: Error %d on %s\n", status, __func__);
return status;
}
*pValue = 0;
if (agcDacLvl > DRXK_AGC_DAC_OFFSET)
Level = agcDacLvl - DRXK_AGC_DAC_OFFSET;
if (Level < 14000)
*pValue = (14000 - Level) / 4;
else
*pValue = 0;
return status;
}
static int GetQAMSignalToNoise(struct drxk_state *state, static int GetQAMSignalToNoise(struct drxk_state *state,
s32 *pSignalToNoise) s32 *pSignalToNoise)
{ {
...@@ -6484,7 +6458,7 @@ static int get_strength(struct drxk_state *state, u64 *strength) ...@@ -6484,7 +6458,7 @@ static int get_strength(struct drxk_state *state, u64 *strength)
* If it can't be measured (AGC is disabled), just show 100%. * If it can't be measured (AGC is disabled), just show 100%.
*/ */
if (totalGain > 0) if (totalGain > 0)
*strength = (65535UL * atten / totalGain); *strength = (65535UL * atten / totalGain / 100);
else else
*strength = 65535; *strength = 65535;
...@@ -6633,7 +6607,7 @@ static int drxk_read_signal_strength(struct dvb_frontend *fe, ...@@ -6633,7 +6607,7 @@ static int drxk_read_signal_strength(struct dvb_frontend *fe,
u16 *strength) u16 *strength)
{ {
struct drxk_state *state = fe->demodulator_priv; struct drxk_state *state = fe->demodulator_priv;
u32 val = 0; struct dtv_frontend_properties *c = &fe->dtv_property_cache;
dprintk(1, "\n"); dprintk(1, "\n");
...@@ -6642,8 +6616,7 @@ static int drxk_read_signal_strength(struct dvb_frontend *fe, ...@@ -6642,8 +6616,7 @@ static int drxk_read_signal_strength(struct dvb_frontend *fe,
if (state->m_DrxkState == DRXK_UNINITIALIZED) if (state->m_DrxkState == DRXK_UNINITIALIZED)
return -EAGAIN; return -EAGAIN;
ReadIFAgc(state, &val); *strength = c->strength.stat[0].uvalue;
*strength = val & 0xffff;
return 0; return 0;
} }
......
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