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

Commit fdaaee6c authored by Klaus Schmidinger's avatar Klaus Schmidinger Committed by Mauro Carvalho Chehab
Browse files

[media] DVB: stb0899: speed up getting BER values



stb0899_read_ber() takes 500ms (half a second!) to deliver the current
BER value. Apparently it takes 5 subsequent readings, with a 100ms pause
between them (and even before the first one). This is a real performance
brake if an application freqeuently reads the BER of several devices.
The attached patch reduces this to a single reading, with no more pausing.
I didn't observe any negative side effects of this change.

Signed-off-by: default avatarKlaus Schmidinger <Klaus.Schmidinger@tvdr.de>
Cc: Manu Abraham <abraham.manu@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 4a628170
Loading
Loading
Loading
Loading
+6 −16
Original line number Diff line number Diff line
@@ -1129,7 +1129,6 @@ static int stb0899_read_ber(struct dvb_frontend *fe, u32 *ber)
	struct stb0899_internal *internal	= &state->internal;

	u8  lsb, msb;
	u32 i;

	*ber = 0;

@@ -1137,14 +1136,9 @@ static int stb0899_read_ber(struct dvb_frontend *fe, u32 *ber)
	case SYS_DVBS:
	case SYS_DSS:
		if (internal->lock) {
			/* average 5 BER values	*/
			for (i = 0; i < 5; i++) {
				msleep(100);
			lsb = stb0899_read_reg(state, STB0899_ECNT1L);
			msb = stb0899_read_reg(state, STB0899_ECNT1M);
				*ber += MAKEWORD16(msb, lsb);
			}
			*ber /= 5;
			*ber = MAKEWORD16(msb, lsb);
			/* Viterbi Check	*/
			if (STB0899_GETFIELD(VSTATUS_PRFVIT, internal->v_status)) {
				/* Error Rate		*/
@@ -1157,13 +1151,9 @@ static int stb0899_read_ber(struct dvb_frontend *fe, u32 *ber)
		break;
	case SYS_DVBS2:
		if (internal->lock) {
			/* Average 5 PER values	*/
			for (i = 0; i < 5; i++) {
				msleep(100);
			lsb = stb0899_read_reg(state, STB0899_ECNT1L);
			msb = stb0899_read_reg(state, STB0899_ECNT1M);
				*ber += MAKEWORD16(msb, lsb);
			}
			*ber = MAKEWORD16(msb, lsb);
			/* ber = ber * 10 ^ 7	*/
			*ber *= 10000000;
			*ber /= (-1 + (1 << (4 + 2 * STB0899_GETFIELD(NOE, internal->err_ctrl))));