Hi, Yes, make sense. 2017-06-24 14:35 GMT-04:00 Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx>: > Em Thu, 22 Jun 2017 22:03:28 +0200 > Daniel Scheller <d.scheller.oss@xxxxxxxxx> escreveu: > >> From: Daniel Scheller <d.scheller@xxxxxxx> >> >> When the demod driver puts the demod into sleep or shutdown state and it's >> status is then polled e.g. via "dvb-fe-tool -m", i2c errors are printed >> to the kernel log. If the last delsys was DVB-T/T2: >> >> cxd2841er: i2c wr failed=-5 addr=6c reg=00 len=1 >> cxd2841er: i2c rd failed=-5 addr=6c reg=26 >> >> and if it was DVB-C: >> >> cxd2841er: i2c wr failed=-5 addr=6c reg=00 len=1 >> cxd2841er: i2c rd failed=-5 addr=6c reg=49 >> >> This happens when read_status unconditionally calls into the >> read_signal_strength() function which triggers the read_agc_gain_*() >> functions, where these registered are polled. >> >> This isn't a critical thing since when the demod is active again, no more >> such errors are logged, however this might make users suspecting defects. >> >> Fix this by requiring fe_status FE_HAS_SYNC to be sure the demod is not >> put asleep or shut down. If FE_HAS_SYNC isn't set, additionally set the >> strength scale to NOT_AVAILABLE. > > Requiring full lock for signal strength seems too much, as people usually > rely on signal strength to adjust antenna. > > You should, instead, just check if the demod is shut down. > > Regards, > Mauro > >> >> Signed-off-by: Daniel Scheller <d.scheller@xxxxxxx> >> --- >> drivers/media/dvb-frontends/cxd2841er.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/media/dvb-frontends/cxd2841er.c b/drivers/media/dvb-frontends/cxd2841er.c >> index 08f67d60a7d9..9fff031436f1 100644 >> --- a/drivers/media/dvb-frontends/cxd2841er.c >> +++ b/drivers/media/dvb-frontends/cxd2841er.c >> @@ -3279,7 +3279,10 @@ static int cxd2841er_get_frontend(struct dvb_frontend *fe, >> else if (priv->state == STATE_ACTIVE_TC) >> cxd2841er_read_status_tc(fe, &status); >> >> - cxd2841er_read_signal_strength(fe); >> + if (status & FE_HAS_SYNC) >> + cxd2841er_read_signal_strength(fe); >> + else >> + p->strength.stat[0].scale = FE_SCALE_NOT_AVAILABLE; >> >> if (status & FE_HAS_LOCK) { >> cxd2841er_read_snr(fe); > > > > Thanks, > Mauro -- Abylay Ospan, NetUP Inc. http://www.netup.tv