forked from Minki/linux
V4L/DVB (6501): stv0297: Signal strength fixes
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> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
7cccccc33a
commit
85085ad7b2
@ -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)
|
static int stv0297_read_signal_strength(struct dvb_frontend *fe, u16 * strength)
|
||||||
{
|
{
|
||||||
struct stv0297_state *state = fe->demodulator_priv;
|
struct stv0297_state *state = fe->demodulator_priv;
|
||||||
u8 STRENGTH[2];
|
u8 STRENGTH[3];
|
||||||
|
u16 tmp;
|
||||||
stv0297_readregs(state, 0x41, STRENGTH, 2);
|
|
||||||
*strength = (STRENGTH[1] & 0x03) << 8 | STRENGTH[0];
|
|
||||||
|
|
||||||
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user