forked from Minki/linux
[media] lmedm04: fix the range for relative measurements
Relative measurements are typically between 0 and 0xffff. However, for some tuners (TUNER_S7395 and TUNER_S0194), the range were from 0 to 0xff00, with means that 100% is never archived. Also, TUNER_RS2000 uses a more complex math. So, create a macro that does the conversion using bit operations and use it for all conversions. The code is also easier to read with is a bonus. While here, remove a bogus comment. Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
5ae65db547
commit
faebbd8f13
@ -257,6 +257,9 @@ static int lme2510_enable_pid(struct dvb_usb_device *d, u8 index, u16 pid_out)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Convert range from 0x00-0xff to 0x0000-0xffff */
|
||||||
|
#define reg_to_16bits(x) ((x) | ((x) << 8))
|
||||||
|
|
||||||
static void lme2510_update_stats(struct dvb_usb_adapter *adap)
|
static void lme2510_update_stats(struct dvb_usb_adapter *adap)
|
||||||
{
|
{
|
||||||
struct lme2510_state *st = adap_to_priv(adap);
|
struct lme2510_state *st = adap_to_priv(adap);
|
||||||
@ -288,23 +291,17 @@ static void lme2510_update_stats(struct dvb_usb_adapter *adap)
|
|||||||
|
|
||||||
switch (st->tuner_config) {
|
switch (st->tuner_config) {
|
||||||
case TUNER_LG:
|
case TUNER_LG:
|
||||||
s_tmp = 0xff - st->signal_level;
|
s_tmp = reg_to_16bits(0xff - st->signal_level);
|
||||||
s_tmp |= s_tmp << 8;
|
c_tmp = reg_to_16bits(0xff - st->signal_sn);
|
||||||
|
|
||||||
c_tmp = 0xff - st->signal_sn;
|
|
||||||
c_tmp |= c_tmp << 8;
|
|
||||||
break;
|
break;
|
||||||
/* fall through */
|
|
||||||
case TUNER_S7395:
|
case TUNER_S7395:
|
||||||
case TUNER_S0194:
|
case TUNER_S0194:
|
||||||
s_tmp = 0xffff - (((st->signal_level * 2) << 8) * 5 / 4);
|
s_tmp = 0xffff - (((st->signal_level * 2) << 8) * 5 / 4);
|
||||||
|
c_tmp = reg_to_16bits((0xff - st->signal_sn - 0xa1) * 3);
|
||||||
c_tmp = ((0xff - st->signal_sn - 0xa1) * 3) << 8;
|
|
||||||
break;
|
break;
|
||||||
case TUNER_RS2000:
|
case TUNER_RS2000:
|
||||||
s_tmp = st->signal_level * 0xffff / 0xff;
|
s_tmp = reg_to_16bits(st->signal_level);
|
||||||
|
c_tmp = reg_to_16bits(st->signal_sn);
|
||||||
c_tmp = st->signal_sn * 0xffff / 0x7f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c->strength.len = 1;
|
c->strength.len = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user