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

Commit bf8de2d3 authored by Jemma Denson's avatar Jemma Denson Committed by Mauro Carvalho Chehab
Browse files

[media] cx24120: Assume ucb registers is a counter



The ucblocks register is probably a counter and not a rate; assume
it is so and change the calculations as required.

Signed-off-by: default avatarJemma Denson <jdenson@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 2a80f296
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -154,7 +154,7 @@ struct cx24120_state {
	u32 bitrate;
	u32 berw_usecs;
	u32 ber_prev;
	u32 per_prev;
	u32 ucb_offset;
	unsigned long ber_jiffies_stats;
	unsigned long per_jiffies_stats;
};
@@ -698,8 +698,12 @@ static void cx24120_get_stats(struct cx24120_state *state)
		ucb |= cx24120_readreg(state, CX24120_REG_UCB_L);
		dev_dbg(&state->i2c->dev, "ucblocks = %d\n", ucb);

		/* handle reset */
		if (ucb < state->ucb_offset)
			state->ucb_offset = c->block_error.stat[0].uvalue;

		c->block_error.stat[0].scale = FE_SCALE_COUNTER;
		c->block_error.stat[0].uvalue += ucb;
		c->block_error.stat[0].uvalue = ucb + state->ucb_offset;

		c->block_count.stat[0].scale = FE_SCALE_COUNTER;
		c->block_count.stat[0].uvalue += state->bitrate / 8 / 208;
@@ -1541,8 +1545,7 @@ static int cx24120_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
		return 0;
	}

	*ucblocks = c->block_error.stat[0].uvalue - state->per_prev;
	state->per_prev = c->block_error.stat[0].uvalue;
	*ucblocks = c->block_error.stat[0].uvalue - state->ucb_offset;

	return 0;
}