diff options
author | Jemma Denson <jdenson@gmail.com> | 2015-05-05 17:47:55 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-05-18 16:37:41 -0300 |
commit | 34ce475d3272f3645561eb67048faf5537bae621 (patch) | |
tree | 91dc72c07ded6dacf945717549f9603d20abafea /drivers | |
parent | 1462612cb3172068c3f4dca1778e5fb115191c70 (diff) | |
download | linux-34ce475d3272f3645561eb67048faf5537bae621.tar.gz linux-34ce475d3272f3645561eb67048faf5537bae621.tar.bz2 linux-34ce475d3272f3645561eb67048faf5537bae621.zip |
[media] cx24120: Return DVBv3 signal strength from cache
This patch changes DVBv3 signal strength to read from the cache by
moving the signal strength reading routine into get_stat, and
reducing read_signal_strength to just returning the cached value.
Signed-off-by: Jemma Denson <jdenson@gmail.com>
Signed-off-by: Patrick Boettcher <patrick.boettcher@posteo.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/dvb-frontends/cx24120.c | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/drivers/media/dvb-frontends/cx24120.c b/drivers/media/dvb-frontends/cx24120.c index dfa2b6de481c..eecfe2284c91 100644 --- a/drivers/media/dvb-frontends/cx24120.c +++ b/drivers/media/dvb-frontends/cx24120.c @@ -422,28 +422,14 @@ static int cx24120_read_signal_strength(struct dvb_frontend *fe, u16 *signal_strength) { struct cx24120_state *state = fe->demodulator_priv; - struct cx24120_cmd cmd; - int ret, sigstr_h, sigstr_l; - - cmd.id = CMD_READ_SNR; - cmd.len = 1; - cmd.arg[0] = 0x00; - - ret = cx24120_message_send(state, &cmd); - if (ret != 0) { - err("error reading signal strength\n"); - return -EREMOTEIO; - } + struct dtv_frontend_properties *c = &fe->dtv_property_cache; - /* raw */ - sigstr_h = (cx24120_readreg(state, CX24120_REG_SIGSTR_H) >> 6) << 8; - sigstr_l = cx24120_readreg(state, CX24120_REG_SIGSTR_L); - dev_dbg(&state->i2c->dev, "%s: Signal strength from firmware= 0x%x\n", - __func__, (sigstr_h | sigstr_l)); + if (c->strength.stat[0].scale != FE_SCALE_RELATIVE) + *signal_strength = 0; + else + *signal_strength = c->strength.stat[0].uvalue; - /* cooked */ - *signal_strength = ((sigstr_h | sigstr_l) << 5) & 0x0000ffff; - dev_dbg(&state->i2c->dev, "%s: Signal strength= 0x%x\n", + dev_dbg(&state->i2c->dev, "%s: Signal strength from cache: 0x%x\n", __func__, *signal_strength); return 0; @@ -621,16 +607,34 @@ static void cx24120_get_stats(struct cx24120_state *state) { struct dvb_frontend *fe = &state->frontend; struct dtv_frontend_properties *c = &fe->dtv_property_cache; - int ret; + struct cx24120_cmd cmd; + int ret, sigstr_h, sigstr_l; u16 u16tmp; dev_dbg(&state->i2c->dev, "%s()\n", __func__); /* signal strength */ if (state->fe_status & FE_HAS_SIGNAL) { - ret = cx24120_read_signal_strength(fe, &u16tmp); - if (ret != 0) + cmd.id = CMD_READ_SNR; + cmd.len = 1; + cmd.arg[0] = 0x00; + + ret = cx24120_message_send(state, &cmd); + if (ret != 0) { + err("error reading signal strength\n"); return; + } + + /* raw */ + sigstr_h = (cx24120_readreg(state, CX24120_REG_SIGSTR_H) >> 6) << 8; + sigstr_l = cx24120_readreg(state, CX24120_REG_SIGSTR_L); + dev_dbg(&state->i2c->dev, "%s: Signal strength from firmware= 0x%x\n", + __func__, (sigstr_h | sigstr_l)); + + /* cooked */ + u16tmp = ((sigstr_h | sigstr_l) << 5) & 0x0000ffff; + dev_dbg(&state->i2c->dev, "%s: Signal strength= 0x%x\n", + __func__, u16tmp); c->strength.stat[0].scale = FE_SCALE_RELATIVE; c->strength.stat[0].uvalue = u16tmp; |