mirror of
https://github.com/DigitalDevices/dddvb.git
synced 2023-10-10 13:37:43 +02:00
first support for new status API
This commit is contained in:
parent
fa66a70a35
commit
472cacb0c4
@ -1269,11 +1269,38 @@ static int get_tune_settings(struct dvb_frontend *fe,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int read_snr(struct dvb_frontend *fe, u16 *snr);
|
||||||
|
|
||||||
|
static int get_stats(struct dvb_frontend *fe)
|
||||||
|
{
|
||||||
|
struct cxd_state *state = fe->demodulator_priv;
|
||||||
|
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||||
|
u16 val;
|
||||||
|
|
||||||
|
if (fe->ops.tuner_ops.get_rf_strength)
|
||||||
|
fe->ops.tuner_ops.get_rf_strength(fe, &val);
|
||||||
|
else
|
||||||
|
val = 0;
|
||||||
|
|
||||||
|
p->strength.len = 1;
|
||||||
|
p->strength.stat[0].scale = FE_SCALE_DECIBEL;
|
||||||
|
p->strength.stat[0].uvalue = 1000 * (s64) (s16) val;
|
||||||
|
|
||||||
|
read_snr(fe, &val);
|
||||||
|
p->cnr.len = 1;
|
||||||
|
p->cnr.stat[0].scale = FE_SCALE_DECIBEL;
|
||||||
|
p->cnr.stat[0].uvalue = 100 * (s64) (s16) val;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int read_status(struct dvb_frontend *fe, fe_status_t *status)
|
static int read_status(struct dvb_frontend *fe, fe_status_t *status)
|
||||||
{
|
{
|
||||||
struct cxd_state *state = fe->demodulator_priv;
|
struct cxd_state *state = fe->demodulator_priv;
|
||||||
u8 rdata;
|
u8 rdata;
|
||||||
|
|
||||||
|
get_stats(fe);
|
||||||
|
|
||||||
*status = 0;
|
*status = 0;
|
||||||
switch (state->state) {
|
switch (state->state) {
|
||||||
case ActiveC:
|
case ActiveC:
|
||||||
|
@ -222,6 +222,7 @@ static int send_command(struct mxl *state, u32 size, u8 *buf)
|
|||||||
}
|
}
|
||||||
if (!count) {
|
if (!count) {
|
||||||
pr_info("mxl5xx: send_command busy\n");
|
pr_info("mxl5xx: send_command busy\n");
|
||||||
|
mutex_unlock(&state->base->i2c_lock);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -516,6 +517,8 @@ static int set_parameters(struct dvb_frontend *fe)
|
|||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_stats(struct dvb_frontend *fe);
|
||||||
|
|
||||||
static int read_status(struct dvb_frontend *fe, fe_status_t *status)
|
static int read_status(struct dvb_frontend *fe, fe_status_t *status)
|
||||||
{
|
{
|
||||||
struct mxl *state = fe->demodulator_priv;
|
struct mxl *state = fe->demodulator_priv;
|
||||||
@ -532,7 +535,7 @@ static int read_status(struct dvb_frontend *fe, fe_status_t *status)
|
|||||||
mutex_unlock(&state->base->status_lock);
|
mutex_unlock(&state->base->status_lock);
|
||||||
|
|
||||||
*status = (regData == 1) ? 0x1f : 0;
|
*status = (regData == 1) ? 0x1f : 0;
|
||||||
|
get_stats(fe);
|
||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -599,6 +602,7 @@ static int read_snr(struct dvb_frontend *fe, u16 *snr)
|
|||||||
struct mxl *state = fe->demodulator_priv;
|
struct mxl *state = fe->demodulator_priv;
|
||||||
int stat;
|
int stat;
|
||||||
u32 regData = 0;
|
u32 regData = 0;
|
||||||
|
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||||
|
|
||||||
mutex_lock(&state->base->status_lock);
|
mutex_lock(&state->base->status_lock);
|
||||||
HYDRA_DEMOD_STATUS_LOCK(state, state->demod);
|
HYDRA_DEMOD_STATUS_LOCK(state, state->demod);
|
||||||
@ -607,7 +611,10 @@ static int read_snr(struct dvb_frontend *fe, u16 *snr)
|
|||||||
®Data);
|
®Data);
|
||||||
HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
|
HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
|
||||||
mutex_unlock(&state->base->status_lock);
|
mutex_unlock(&state->base->status_lock);
|
||||||
*snr = (s16) (regData & 0xFFFF);
|
*snr = (s16) (regData & 0xFFFF); /* 100x dB */
|
||||||
|
p->cnr.len = 1;
|
||||||
|
p->cnr.stat[0].scale = FE_SCALE_DECIBEL;
|
||||||
|
p->cnr.stat[0].uvalue = 10 * (s64) *snr;
|
||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -621,6 +628,7 @@ static int read_ber(struct dvb_frontend *fe, u32 *ber)
|
|||||||
static int read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
static int read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
||||||
{
|
{
|
||||||
struct mxl *state = fe->demodulator_priv;
|
struct mxl *state = fe->demodulator_priv;
|
||||||
|
struct dtv_frontend_properties *p = &fe->dtv_property_cache;
|
||||||
int stat;
|
int stat;
|
||||||
u32 regData = 0;
|
u32 regData = 0;
|
||||||
|
|
||||||
@ -631,7 +639,10 @@ static int read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
|||||||
®Data);
|
®Data);
|
||||||
HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
|
HYDRA_DEMOD_STATUS_UNLOCK(state, state->demod);
|
||||||
mutex_unlock(&state->base->status_lock);
|
mutex_unlock(&state->base->status_lock);
|
||||||
*strength = (u16) (regData & 0xFFFF);
|
*strength = (u16) (regData & 0xFFFF); /* 10x dBm */
|
||||||
|
p->strength.len = 1;
|
||||||
|
p->strength.stat[0].scale = FE_SCALE_DECIBEL;
|
||||||
|
p->strength.stat[0].uvalue = 10 * (s64) (s16) (regData & 0xFFFF);
|
||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -640,6 +651,16 @@ static int read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_stats(struct dvb_frontend *fe)
|
||||||
|
{
|
||||||
|
u16 val;
|
||||||
|
|
||||||
|
read_signal_strength(fe, &val);
|
||||||
|
read_snr(fe, &val);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int get_frontend(struct dvb_frontend *fe)
|
static int get_frontend(struct dvb_frontend *fe)
|
||||||
{
|
{
|
||||||
//struct mxl *state = fe->demodulator_priv;
|
//struct mxl *state = fe->demodulator_priv;
|
||||||
|
Loading…
Reference in New Issue
Block a user