forked from Minki/linux
media: af9013: change lock detection slightly
Whilst rewritten largely, the basic logic remains same with one exception: do not return immediately on success case. We are going to add statistics that function and cannot return too early. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
35ecf2b4d2
commit
7903fbe3a6
@ -752,45 +752,44 @@ static int af9013_read_status(struct dvb_frontend *fe, enum fe_status *status)
|
||||
struct af9013_state *state = fe->demodulator_priv;
|
||||
struct i2c_client *client = state->client;
|
||||
int ret;
|
||||
unsigned int utmp;
|
||||
unsigned int utmp, utmp1;
|
||||
|
||||
/*
|
||||
* Return status from the cache if it is younger than 2000ms with the
|
||||
* exception of last tune is done during 4000ms.
|
||||
*/
|
||||
if (time_is_after_jiffies(
|
||||
state->read_status_jiffies + msecs_to_jiffies(2000)) &&
|
||||
time_is_before_jiffies(
|
||||
state->set_frontend_jiffies + msecs_to_jiffies(4000))
|
||||
) {
|
||||
*status = state->fe_status;
|
||||
return 0;
|
||||
if (time_is_after_jiffies(state->read_status_jiffies + msecs_to_jiffies(2000)) &&
|
||||
time_is_before_jiffies(state->set_frontend_jiffies + msecs_to_jiffies(4000))) {
|
||||
*status = state->fe_status;
|
||||
} else {
|
||||
*status = 0;
|
||||
}
|
||||
|
||||
/* MPEG2 lock */
|
||||
ret = regmap_read(state->regmap, 0xd507, &utmp);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
if ((utmp >> 6) & 0x01)
|
||||
*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI |
|
||||
FE_HAS_SYNC | FE_HAS_LOCK;
|
||||
|
||||
if (!*status) {
|
||||
/* TPS lock */
|
||||
ret = regmap_read(state->regmap, 0xd330, &utmp);
|
||||
/* MPEG2 lock */
|
||||
ret = regmap_read(state->regmap, 0xd507, &utmp);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
if ((utmp >> 3) & 0x01)
|
||||
*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
|
||||
FE_HAS_VITERBI;
|
||||
}
|
||||
if ((utmp >> 6) & 0x01) {
|
||||
utmp1 = FE_HAS_SIGNAL | FE_HAS_CARRIER |
|
||||
FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
|
||||
} else {
|
||||
/* TPS lock */
|
||||
ret = regmap_read(state->regmap, 0xd330, &utmp);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
state->fe_status = *status;
|
||||
state->read_status_jiffies = jiffies;
|
||||
if ((utmp >> 3) & 0x01)
|
||||
utmp1 = FE_HAS_SIGNAL | FE_HAS_CARRIER |
|
||||
FE_HAS_VITERBI;
|
||||
else
|
||||
utmp1 = 0;
|
||||
}
|
||||
|
||||
dev_dbg(&client->dev, "fe_status %02x\n", utmp1);
|
||||
|
||||
state->read_status_jiffies = jiffies;
|
||||
|
||||
state->fe_status = utmp1;
|
||||
*status = utmp1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err:
|
||||
|
Loading…
Reference in New Issue
Block a user