Instead of using a relative frequency range, calibrate it to
show the results in dB. The callibration was done getting
samples with a signal generated from -50dBm to -12dBm,
incremented in steps of 0.5 dB, using 3 frequencies:
175 MHz, 410 MHz and 800 MHz. The modulated signal was
using QAM64, and it was used a linear interpolation of all
the results.

Signed-off-by: Mauro Carvalho Chehab <mche...@s-opensource.com>
---
 drivers/media/dvb-frontends/cxd2841er.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/media/dvb-frontends/cxd2841er.c 
b/drivers/media/dvb-frontends/cxd2841er.c
index e2f3ea55897b..6c660761563d 100644
--- a/drivers/media/dvb-frontends/cxd2841er.c
+++ b/drivers/media/dvb-frontends/cxd2841er.c
@@ -1746,8 +1746,13 @@ static void cxd2841er_read_signal_strength(struct 
dvb_frontend *fe)
        case SYS_DVBC_ANNEX_A:
                strength = cxd2841er_read_agc_gain_t_t2(priv,
                                                        p->delivery_system);
-               p->strength.stat[0].scale = FE_SCALE_RELATIVE;
-               p->strength.stat[0].uvalue = strength;
+               p->strength.stat[0].scale = FE_SCALE_DECIBEL;
+               /*
+                * Formula was empirically determinated via linear regression,
+                * 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;
                break;
        case SYS_ISDBT:
                strength = 65535 - cxd2841er_read_agc_gain_i(
-- 
2.7.4

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to