mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 01:51:34 +00:00
[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: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
d12b791e3d
commit
313a7dfb23
@ -1746,7 +1746,7 @@ static void cxd2841er_read_signal_strength(struct dvb_frontend *fe)
|
||||
{
|
||||
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||
struct cxd2841er_priv *priv = fe->demodulator_priv;
|
||||
u32 strength;
|
||||
s32 strength;
|
||||
|
||||
dev_dbg(&priv->i2c->dev, "%s()\n", __func__);
|
||||
switch (p->delivery_system) {
|
||||
@ -1763,7 +1763,7 @@ static void cxd2841er_read_signal_strength(struct dvb_frontend *fe)
|
||||
p->delivery_system);
|
||||
p->strength.stat[0].scale = FE_SCALE_DECIBEL;
|
||||
/* 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 */
|
||||
case SYS_DVBC_ANNEX_A:
|
||||
strength = cxd2841er_read_agc_gain_t_t2(priv,
|
||||
@ -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
|
||||
* stream modulated with QAM64
|
||||
*/
|
||||
p->strength.stat[0].uvalue = ((s32)strength) * 4045 / 1000 - 85224;
|
||||
p->strength.stat[0].uvalue = strength * 4045 / 1000 - 85224;
|
||||
break;
|
||||
case SYS_ISDBT:
|
||||
strength = 65535 - cxd2841er_read_agc_gain_i(
|
||||
priv, p->delivery_system);
|
||||
p->strength.stat[0].scale = FE_SCALE_RELATIVE;
|
||||
p->strength.stat[0].uvalue = strength;
|
||||
strength = cxd2841er_read_agc_gain_i(priv, p->delivery_system);
|
||||
p->strength.stat[0].scale = FE_SCALE_DECIBEL;
|
||||
/*
|
||||
* 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;
|
||||
case SYS_DVBS:
|
||||
case SYS_DVBS2:
|
||||
|
Loading…
Reference in New Issue
Block a user