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,
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,
s32 *pSignalToNoise)
{
......@@ -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 (totalGain > 0)
*strength = (65535UL * atten / totalGain);
*strength = (65535UL * atten / totalGain / 100);
else
*strength = 65535;
......@@ -6633,7 +6607,7 @@ static int drxk_read_signal_strength(struct dvb_frontend *fe,
u16 *strength)
{
struct drxk_state *state = fe->demodulator_priv;
u32 val = 0;
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
dprintk(1, "\n");
......@@ -6642,8 +6616,7 @@ static int drxk_read_signal_strength(struct dvb_frontend *fe,
if (state->m_DrxkState == DRXK_UNINITIALIZED)
return -EAGAIN;
ReadIFAgc(state, &val);
*strength = val & 0xffff;
*strength = c->strength.stat[0].uvalue;
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