Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7903fbe3 authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab
Browse files

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: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 35ecf2b4
Loading
Loading
Loading
Loading
+27 −28
Original line number Diff line number Diff line
@@ -752,46 +752,45 @@ 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))
	) {
	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;
	} 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) {
		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;

			if ((utmp >> 3) & 0x01)
			*status |= FE_HAS_SIGNAL | FE_HAS_CARRIER |
				utmp1 = FE_HAS_SIGNAL | FE_HAS_CARRIER |
					FE_HAS_VITERBI;
			else
				utmp1 = 0;
		}

	state->fe_status = *status;
		dev_dbg(&client->dev, "fe_status %02x\n", utmp1);

		state->read_status_jiffies = jiffies;

		state->fe_status = utmp1;
		*status = utmp1;
	}

	return 0;
err:
	dev_dbg(&client->dev, "failed %d\n", ret);