diff options
author | Oliver Endriss <o.endriss@gmx.de> | 2007-10-31 06:04:16 +0100 |
---|---|---|
committer | Oliver Endriss <o.endriss@gmx.de> | 2007-10-31 06:04:16 +0100 |
commit | b9311eb8cce1ff6e214edd27ca2ad41ffa5cbeb2 (patch) | |
tree | 1791356579c2eb57180f52835a35c3eb2f2f96dd /linux/drivers/media/dvb | |
parent | f5d1f46b23c95589967bec81e4e60ff51b56b4d7 (diff) | |
download | mediapointer-dvb-s2-b9311eb8cce1ff6e214edd27ca2ad41ffa5cbeb2.tar.gz mediapointer-dvb-s2-b9311eb8cce1ff6e214edd27ca2ad41ffa5cbeb2.tar.bz2 |
stv0297: Signal strength fixes
From: Hartmut Birr <e9hack@googlemail.com>
Fixes the signal strength value (higher value = higher signal strength)
and scales the value to the range of 0..ffff. The characteristic itself
is wrong. To get proper values on a TT-C2300 in the range of 40..60%
real signal strength, the values from the patch should be divide by two.
The attached patch doesn't fix the characteristic.
Signed-off-by: Hartmut Birr <e9hack@googlemail.com>
Signed-off-by: Oliver Endriss <o.endriss@gmx.de>
Diffstat (limited to 'linux/drivers/media/dvb')
-rw-r--r-- | linux/drivers/media/dvb/frontends/stv0297.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/linux/drivers/media/dvb/frontends/stv0297.c b/linux/drivers/media/dvb/frontends/stv0297.c index a09f3ef1c..cd8f74b57 100644 --- a/linux/drivers/media/dvb/frontends/stv0297.c +++ b/linux/drivers/media/dvb/frontends/stv0297.c @@ -358,11 +358,23 @@ static int stv0297_read_ber(struct dvb_frontend *fe, u32 * ber) static int stv0297_read_signal_strength(struct dvb_frontend *fe, u16 * strength) { struct stv0297_state *state = fe->demodulator_priv; - u8 STRENGTH[2]; - - stv0297_readregs(state, 0x41, STRENGTH, 2); - *strength = (STRENGTH[1] & 0x03) << 8 | STRENGTH[0]; - + u8 STRENGTH[3]; + u16 tmp; + + stv0297_readregs(state, 0x41, STRENGTH, 3); + tmp = (STRENGTH[1] & 0x03) << 8 | STRENGTH[0]; + if (STRENGTH[2] & 0x20) { + if (tmp < 0x200) + tmp = 0; + else + tmp = tmp - 0x200; + } else { + if (tmp > 0x1ff) + tmp = 0; + else + tmp = 0x1ff - tmp; + } + *strength = (tmp << 7) | (tmp >> 2); return 0; } |