rendered paste bodystatic int tda10021_read_signal_strength(struct dvb_frontend* fe, u16* strength)
{
struct tda10021_state* state = fe->demodulator_priv;
u8 gain = tda10021_readreg(state, 0x17);
*strength = (gain << 8) | gain;
return 0;
}
static int tda10023_read_signal_strength(struct dvb_frontend* fe, u16* strength)
{
struct tda10023_state* state = fe->demodulator_priv;
u8 ifgain=tda10023_readreg(state, 0x2f);
u16 gain = ((255-tda10023_readreg(state, 0x17))) + (255-ifgain)/16;
// Max raw value is about 0xb0 -> Normalize to >0xf0 after 0x90
if (gain>0x90)
gain=gain+2*(gain-0x90);
if (gain>255)
gain=255;
*strength = (gain<<8)|gain;
return 0;
}
static int cu1216_read_strength(struct dvb_frontend *fe, u16 *strength)
{
struct cu1216_state *state = fe->demodulator_priv;
u8 tempagc;
tempagc = cu1216_readreg(state, AC_VAGC1_IND);
if (tempagc > 0xF0)
*strength = 2;
else if (tempagc > 0xE5)
*strength = 4;
else if (tempagc < 0x6E)
*strength = 98;
else if (tempagc < 0x96)
*strength = 70 + (0x96 - tempagc) / 2 * 7 / 5;
else if (tempagc < 0xCD)
*strength = 14 + (0xCD - tempagc);
else
*strength = 2 + (0xE5 - tempagc) / 2;
return 0;