From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: unlisted-recipients:; (no To-header on input)@casper.infradead.org
Cc: Mauro Carvalho Chehab <mchehab@redhat.com>,
Linux Media Mailing List <linux-media@vger.kernel.org>
Subject: [PATCH 05/11] [media] mb86a20s: don't allow updating signal strength too fast
Date: Sun, 3 Mar 2013 12:58:45 -0300 [thread overview]
Message-ID: <1362326331-17541-6-git-send-email-mchehab@redhat.com> (raw)
In-Reply-To: <1362326331-17541-1-git-send-email-mchehab@redhat.com>
Getting signal strength requires some loop poking with I2C.
Don't let it happen too fast.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
drivers/media/dvb-frontends/mb86a20s.c | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/drivers/media/dvb-frontends/mb86a20s.c b/drivers/media/dvb-frontends/mb86a20s.c
index 983fb3b..82fa2af 100644
--- a/drivers/media/dvb-frontends/mb86a20s.c
+++ b/drivers/media/dvb-frontends/mb86a20s.c
@@ -34,6 +34,7 @@ struct mb86a20s_state {
u32 if_freq;
u32 estimated_rate[3];
+ unsigned long get_strength_time;
bool need_init;
};
@@ -318,9 +319,17 @@ static int mb86a20s_read_status(struct dvb_frontend *fe, fe_status_t *status)
static int mb86a20s_read_signal_strength(struct dvb_frontend *fe)
{
struct mb86a20s_state *state = fe->demodulator_priv;
+ struct dtv_frontend_properties *c = &fe->dtv_property_cache;
int rc;
unsigned rf_max, rf_min, rf;
+ if (state->get_strength_time &&
+ (!time_after(jiffies, state->get_strength_time)))
+ return c->strength.stat[0].uvalue;
+
+ /* Reset its value if an error happen */
+ c->strength.stat[0].uvalue = 0;
+
/* Does a binary search to get RF strength */
rf_max = 0xfff;
rf_min = 0;
@@ -350,15 +359,19 @@ static int mb86a20s_read_signal_strength(struct dvb_frontend *fe)
rf = (rf_max + rf_min) / 2;
/* Rescale it from 2^12 (4096) to 2^16 */
- rf <<= (16 - 12);
+ rf = rf << (16 - 12);
+ if (rf)
+ rf |= (1 << 12) - 1;
+
dev_dbg(&state->i2c->dev,
"%s: signal strength = %d (%d < RF=%d < %d)\n",
__func__, rf, rf_min, rf >> 4, rf_max);
- return rf;
+ c->strength.stat[0].uvalue = rf;
+ state->get_strength_time = jiffies +
+ msecs_to_jiffies(1000);
+ return 0;
}
} while (1);
-
- return 0;
}
static int mb86a20s_get_modulation(struct mb86a20s_state *state,
@@ -1882,7 +1895,6 @@ static int mb86a20s_read_status_and_stats(struct dvb_frontend *fe,
fe_status_t *status)
{
struct mb86a20s_state *state = fe->demodulator_priv;
- struct dtv_frontend_properties *c = &fe->dtv_property_cache;
int rc, status_nr;
dev_dbg(&state->i2c->dev, "%s called.\n", __func__);
@@ -1913,8 +1925,6 @@ static int mb86a20s_read_status_and_stats(struct dvb_frontend *fe,
rc = 0; /* Status is OK */
goto error;
}
- /* Fill signal strength */
- c->strength.stat[0].uvalue = rc;
if (status_nr >= 7) {
/* Get TMCC info*/
--
1.8.1.4
next prev parent reply other threads:[~2013-03-03 15:59 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-03 15:58 [PATCH 00/11] Do some improvements/fixups on mb86a20s, cx231xx and em28xx Mauro Carvalho Chehab
2013-03-03 15:58 ` [PATCH 01/11] [media] mb86a20s: don't pollute dmesg with debug messages Mauro Carvalho Chehab
2013-03-03 15:58 ` [PATCH 02/11] [media] mb86a20s: adjust IF based on what's set on the tuner Mauro Carvalho Chehab
2013-03-03 15:58 ` [PATCH 03/11] [media] mb86a20s: provide CNR stats before FE_HAS_SYNC Mauro Carvalho Chehab
2013-03-04 11:23 ` Mauro Carvalho Chehab
2013-03-03 15:58 ` [PATCH 04/11] [media] mb86a20s: Fix signal strength calculus Mauro Carvalho Chehab
2013-03-03 15:58 ` Mauro Carvalho Chehab [this message]
2013-03-03 15:58 ` [PATCH 06/11] [media] mb86a20s: change AGC tuning parameters Mauro Carvalho Chehab
2013-03-03 15:58 ` [PATCH 07/11] [media] mb86a20s: Always reset the frontend with set_frontend Mauro Carvalho Chehab
2013-03-03 15:58 ` [PATCH 08/11] [media] mb86a20s: Don't reset strength with the other stats Mauro Carvalho Chehab
2013-03-03 15:58 ` [PATCH 09/11] [media] mb86a20s: cleanup the status at set_frontend() Mauro Carvalho Chehab
2013-03-03 15:58 ` [PATCH 10/11] [media] cx231xx: Improve signal reception for PV SBTVD Mauro Carvalho Chehab
2013-03-03 15:58 ` [PATCH 11/11] [media] em28xx-dvb: Don't put device in suspend mode at feed stop Mauro Carvalho Chehab
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=1362326331-17541-6-git-send-email-mchehab@redhat.com \
--to=mchehab@redhat.com \
--cc=linux-media@vger.kernel.org \
/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.