From: Daniel Scheller <d.scheller.oss@gmail.com>
To: linux-media@vger.kernel.org, mchehab@kernel.org,
mchehab@s-opensource.com
Cc: jasmin@anw.at, rjkm@metzlerbros.de
Subject: [PATCH v3 04/10] [media] dvb-frontends/stv0910: Add demod-only signal strength reporting
Date: Mon, 3 Jul 2017 19:20:57 +0200 [thread overview]
Message-ID: <20170703172104.27283-5-d.scheller.oss@gmail.com> (raw)
In-Reply-To: <20170703172104.27283-1-d.scheller.oss@gmail.com>
From: Daniel Scheller <d.scheller@gmx.net>
Original code at least has some signed/unsigned issues, resulting in
values like 32dBm. Implement signal strength readout to work without
asking the attached tuner, and use a lookup table instead of log calc.
Values reported appear plausible, gathered from feedback from several
testers.
Signed-off-by: Daniel Scheller <d.scheller@gmx.net>
Tested-by: Richard Scobie <r.scobie@clear.net.nz>
---
drivers/media/dvb-frontends/stv0910.c | 48 ++++++++++++++++++++++++++++++++---
1 file changed, 44 insertions(+), 4 deletions(-)
diff --git a/drivers/media/dvb-frontends/stv0910.c b/drivers/media/dvb-frontends/stv0910.c
index dc848ebe1a44..dc4d829bb47a 100644
--- a/drivers/media/dvb-frontends/stv0910.c
+++ b/drivers/media/dvb-frontends/stv0910.c
@@ -135,7 +135,7 @@ struct sinit_table {
struct slookup {
s16 value;
- u16 reg_value;
+ u32 reg_value;
};
static inline int i2c_write(struct i2c_adapter *adap, u8 adr,
@@ -327,6 +327,25 @@ struct slookup s2_sn_lookup[] = {
{ 510, 463 }, /*C/N=51.0dB*/
};
+struct slookup padc_lookup[] = {
+ { 0, 118000 }, /* PADC=+0dBm */
+ { -100, 93600 }, /* PADC=-1dBm */
+ { -200, 74500 }, /* PADC=-2dBm */
+ { -300, 59100 }, /* PADC=-3dBm */
+ { -400, 47000 }, /* PADC=-4dBm */
+ { -500, 37300 }, /* PADC=-5dBm */
+ { -600, 29650 }, /* PADC=-6dBm */
+ { -700, 23520 }, /* PADC=-7dBm */
+ { -900, 14850 }, /* PADC=-9dBm */
+ { -1100, 9380 }, /* PADC=-11dBm */
+ { -1300, 5910 }, /* PADC=-13dBm */
+ { -1500, 3730 }, /* PADC=-15dBm */
+ { -1700, 2354 }, /* PADC=-17dBm */
+ { -1900, 1485 }, /* PADC=-19dBm */
+ { -2000, 1179 }, /* PADC=-20dBm */
+ { -2100, 1000 }, /* PADC=-21dBm */
+};
+
/*********************************************************************
* Tracking carrier loop carrier QPSK 1/4 to 8PSK 9/10 long Frame
*********************************************************************/
@@ -567,7 +586,7 @@ static int tracking_optimization(struct stv *state)
}
static s32 table_lookup(struct slookup *table,
- int table_size, u16 reg_value)
+ int table_size, u32 reg_value)
{
s32 value;
int imin = 0;
@@ -1300,11 +1319,32 @@ static int read_ber(struct dvb_frontend *fe)
static void read_signal_strength(struct dvb_frontend *fe)
{
- /* FIXME: add signal strength algo */
struct stv *state = fe->demodulator_priv;
struct dtv_frontend_properties *p = &state->fe.dtv_property_cache;
+ s64 strength;
+ u8 reg[2];
+ u16 agc;
+ s32 padc, power = 0;
+ int i;
- p->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE;
+ read_regs(state, RSTV0910_P2_AGCIQIN1 + state->regoff, reg, 2);
+
+ agc = (((u32) reg[0]) << 8) | reg[1];
+
+ for (i = 0; i < 5; i += 1) {
+ read_regs(state, RSTV0910_P2_POWERI + state->regoff, reg, 2);
+ power += (u32) reg[0] * (u32) reg[0]
+ + (u32) reg[1] * (u32) reg[1];
+ usleep_range(3000, 4000);
+ }
+ power /= 5;
+
+ padc = table_lookup(padc_lookup, ARRAY_SIZE(padc_lookup), power) + 352;
+
+ strength = (padc - agc);
+
+ p->strength.stat[0].scale = FE_SCALE_DECIBEL;
+ p->strength.stat[0].uvalue = strength;
}
static int read_status(struct dvb_frontend *fe, enum fe_status *status)
--
2.13.0
next prev parent reply other threads:[~2017-07-03 17:21 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-03 17:20 [PATCH v3 00/10] STV0910/STV6111 drivers, ddbridge CineS2 V7 support Daniel Scheller
2017-07-03 17:20 ` [PATCH v3 01/10] [media] dvb-frontends: add ST STV0910 DVB-S/S2 demodulator frontend driver Daniel Scheller
2017-07-20 17:21 ` Mauro Carvalho Chehab
2017-07-20 18:04 ` Daniel Scheller
2017-07-03 17:20 ` [PATCH v3 02/10] [media] dvb-frontends/stv0910: Fix possible buffer overflow Daniel Scheller
2017-07-03 17:20 ` [PATCH v3 03/10] [media] dvb-frontends/stv0910: add multistream (ISI) and PLS capabilities Daniel Scheller
2017-07-03 17:20 ` Daniel Scheller [this message]
2017-07-03 17:20 ` [PATCH v3 05/10] [media] dvb-frontends/stv0910: Add missing set_frontend fe-op Daniel Scheller
2017-07-03 17:20 ` [PATCH v3 06/10] [media] dvb-frontends: add ST STV6111 DVB-S/S2 tuner frontend driver Daniel Scheller
2017-07-03 17:21 ` [PATCH v3 07/10] [media] ddbridge: return stv09xx id in port_has_stv0900_aa() Daniel Scheller
2017-07-03 17:21 ` [PATCH v3 08/10] [media] ddbridge: support for CineS2 V7(A) and DuoFlex S2 V4 hardware Daniel Scheller
2017-07-03 17:21 ` [PATCH v3 09/10] [media] ddbridge: stv0910 single demod mode module option Daniel Scheller
2017-07-03 17:21 ` [PATCH v3 10/10] [media] MAINTAINERS: add entries for stv0910 and stv6111 Daniel Scheller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170703172104.27283-5-d.scheller.oss@gmail.com \
--to=d.scheller.oss@gmail.com \
--cc=jasmin@anw.at \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=mchehab@s-opensource.com \
--cc=rjkm@metzlerbros.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.