media: si2165: Add DVBv3 wrapper for ber statistics
Add read_ber function that reads from property cache to support DVBv3. The implementation is inspired by the cx24120 driver. Signed-off-by: Matthias Schwarzott <zzam@gentoo.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
2e687a6d3d
commit
e9c7d19a38
@ -57,6 +57,9 @@ struct si2165_state {
|
||||
u32 sys_clk;
|
||||
u32 adc_clk;
|
||||
|
||||
/* DVBv3 stats */
|
||||
u64 ber_prev;
|
||||
|
||||
bool has_dvbc;
|
||||
bool has_dvbt;
|
||||
bool firmware_loaded;
|
||||
@ -757,6 +760,12 @@ static int si2165_read_status(struct dvb_frontend *fe, enum fe_status *status)
|
||||
c->post_bit_error.stat[0].uvalue = 0;
|
||||
c->post_bit_count.stat[0].uvalue = 0;
|
||||
|
||||
/*
|
||||
* reset DVBv3 value to deliver a good result
|
||||
* for the first call
|
||||
*/
|
||||
state->ber_prev = 0;
|
||||
|
||||
} else {
|
||||
ret = si2165_readreg8(state, REG_BER_AVAIL, &u8tmp);
|
||||
if (ret < 0)
|
||||
@ -805,6 +814,22 @@ static int si2165_read_snr(struct dvb_frontend *fe, u16 *snr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int si2165_read_ber(struct dvb_frontend *fe, u32 *ber)
|
||||
{
|
||||
struct si2165_state *state = fe->demodulator_priv;
|
||||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
|
||||
if (c->post_bit_error.stat[0].scale != FE_SCALE_COUNTER) {
|
||||
*ber = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*ber = c->post_bit_error.stat[0].uvalue - state->ber_prev;
|
||||
state->ber_prev = c->post_bit_error.stat[0].uvalue;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int si2165_set_oversamp(struct si2165_state *state, u32 dvb_rate)
|
||||
{
|
||||
u64 oversamp;
|
||||
@ -1123,6 +1148,7 @@ static const struct dvb_frontend_ops si2165_ops = {
|
||||
.set_frontend = si2165_set_frontend,
|
||||
.read_status = si2165_read_status,
|
||||
.read_snr = si2165_read_snr,
|
||||
.read_ber = si2165_read_ber,
|
||||
};
|
||||
|
||||
static int si2165_probe(struct i2c_client *client,
|
||||
|
Loading…
Reference in New Issue
Block a user