Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+3 −30
Original line number Diff line number Diff line
@@ -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;
}