Skip to content

Commit

Permalink
V4L/DVB (8075): stv0299: Uncorrected block count and bit error rate f…
Browse files Browse the repository at this point in the history
…ixed

Fix uncorrected block counter and bit error rate to follow DVB API spec:
- Unsupported controls return -ENOSYS.
- UNC must never be set to 0.

Signed-off-by: Oliver Endriss <o.endriss@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Oliver Endriss authored and Mauro Carvalho Chehab committed Jun 26, 2008
1 parent 0b915e7 commit 7876ad7
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions drivers/media/dvb/frontends/stv0299.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ struct stv0299_state {
u32 symbol_rate;
fe_code_rate_t fec_inner;
int errmode;
u32 ucblocks;
};

#define STATUS_BER 0
Expand Down Expand Up @@ -501,8 +502,10 @@ static int stv0299_read_ber(struct dvb_frontend* fe, u32* ber)
{
struct stv0299_state* state = fe->demodulator_priv;

if (state->errmode != STATUS_BER) return 0;
*ber = (stv0299_readreg (state, 0x1d) << 8) | stv0299_readreg (state, 0x1e);
if (state->errmode != STATUS_BER)
return -ENOSYS;

*ber = stv0299_readreg(state, 0x1e) | (stv0299_readreg(state, 0x1d) << 8);

return 0;
}
Expand Down Expand Up @@ -540,8 +543,12 @@ static int stv0299_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
{
struct stv0299_state* state = fe->demodulator_priv;

if (state->errmode != STATUS_UCBLOCKS) *ucblocks = 0;
else *ucblocks = (stv0299_readreg (state, 0x1d) << 8) | stv0299_readreg (state, 0x1e);
if (state->errmode != STATUS_UCBLOCKS)
return -ENOSYS;

state->ucblocks += stv0299_readreg(state, 0x1e);
state->ucblocks += (stv0299_readreg(state, 0x1d) << 8);
*ucblocks = state->ucblocks;

return 0;
}
Expand Down

0 comments on commit 7876ad7

Please sign in to comment.