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
1 changed files with 16 additions and 4 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue