From 34ce475d3272f3645561eb67048faf5537bae621 Mon Sep 17 00:00:00 2001 From: Jemma Denson Date: Tue, 5 May 2015 17:47:55 -0300 Subject: [PATCH] [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 Signed-off-by: Patrick Boettcher Signed-off-by: Mauro Carvalho Chehab --- drivers/media/dvb-frontends/cx24120.c | 50 +++++++++++++++------------ 1 file 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; -- 2.34.1