Commit 313a7dfb authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

[media] cxd2841er: fix signal strength scale for ISDB-T

The scale for ISDB-T was wrong too: it was inverted, and
on a relative scale.

Use a linear interpolation to make it look better.
The formula was empirically determined, using 3 frequencies
(175 MHz, 410 MHz and 800 MHz), measuring from -50dBm to
-12dBm in steps of 0.5dB.
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent d12b791e
...@@ -1746,7 +1746,7 @@ static void cxd2841er_read_signal_strength(struct dvb_frontend *fe) ...@@ -1746,7 +1746,7 @@ static void cxd2841er_read_signal_strength(struct dvb_frontend *fe)
{ {
struct dtv_frontend_properties *p = &fe->dtv_property_cache; struct dtv_frontend_properties *p = &fe->dtv_property_cache;
struct cxd2841er_priv *priv = fe->demodulator_priv; struct cxd2841er_priv *priv = fe->demodulator_priv;
u32 strength; s32 strength;
dev_dbg(&priv->i2c->dev, "%s()\n", __func__); dev_dbg(&priv->i2c->dev, "%s()\n", __func__);
switch (p->delivery_system) { switch (p->delivery_system) {
...@@ -1763,7 +1763,7 @@ static void cxd2841er_read_signal_strength(struct dvb_frontend *fe) ...@@ -1763,7 +1763,7 @@ static void cxd2841er_read_signal_strength(struct dvb_frontend *fe)
p->delivery_system); p->delivery_system);
p->strength.stat[0].scale = FE_SCALE_DECIBEL; p->strength.stat[0].scale = FE_SCALE_DECIBEL;
/* Formula was empirically determinated @ 410 MHz */ /* Formula was empirically determinated @ 410 MHz */
p->strength.stat[0].uvalue = ((s32)strength) * 366 / 100 - 89520; p->strength.stat[0].uvalue = strength * 366 / 100 - 89520;
break; /* Code moved out of the function */ break; /* Code moved out of the function */
case SYS_DVBC_ANNEX_A: case SYS_DVBC_ANNEX_A:
strength = cxd2841er_read_agc_gain_t_t2(priv, strength = cxd2841er_read_agc_gain_t_t2(priv,
...@@ -1774,13 +1774,16 @@ static void cxd2841er_read_signal_strength(struct dvb_frontend *fe) ...@@ -1774,13 +1774,16 @@ static void cxd2841er_read_signal_strength(struct dvb_frontend *fe)
* using frequencies: 175 MHz, 410 MHz and 800 MHz, and a * using frequencies: 175 MHz, 410 MHz and 800 MHz, and a
* stream modulated with QAM64 * stream modulated with QAM64
*/ */
p->strength.stat[0].uvalue = ((s32)strength) * 4045 / 1000 - 85224; p->strength.stat[0].uvalue = strength * 4045 / 1000 - 85224;
break; break;
case SYS_ISDBT: case SYS_ISDBT:
strength = 65535 - cxd2841er_read_agc_gain_i( strength = cxd2841er_read_agc_gain_i(priv, p->delivery_system);
priv, p->delivery_system); p->strength.stat[0].scale = FE_SCALE_DECIBEL;
p->strength.stat[0].scale = FE_SCALE_RELATIVE; /*
p->strength.stat[0].uvalue = strength; * Formula was empirically determinated via linear regression,
* using frequencies: 175 MHz, 410 MHz and 800 MHz.
*/
p->strength.stat[0].uvalue = strength * 3775 / 1000 - 90185;
break; break;
case SYS_DVBS: case SYS_DVBS:
case SYS_DVBS2: case SYS_DVBS2:
......
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