mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-11 20:26:46 +07:00
[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: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
59a7a23c47
commit
340e76965c
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user