dvb-frontends/cxd2841er: require FE_HAS_SYNC for agc readout
Subsystems (2)
PATCH 1/1 dvb-frontends/cxd2841er: require FE_HAS_SYNC for agc readout
From: Daniel Scheller <[email protected]>
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.
--- drivers/media/dvb-frontends/cxd2841er.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/media/dvb-frontends/cxd2841er.c +4 -1
@@ -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);
Signature · 1 line
2.13.0
Em Thu, 22 Jun 2017 22:03:28 +0200
Daniel Scheller <[email protected]> escreveu:
Quoted 18 lines
From: Daniel Scheller <[email protected]>
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=26and if it was DVB-C:
cxd2841er: i2c wr failed=-5 addr=6c reg=00 len=1
cxd2841er: i2c rd failed=-5 addr=6c reg=49This happens when
read_statusunconditionally calls into theread_signal_strength()function which triggers the read_agc_gain_*() functions, where these registered are polled.
Quoted 6 lines
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_statusFE_HAS_SYNCto be sure the demod is not put asleep or shut down. IfFE_HAS_SYNCisn't set, additionally set the strength scale toNOT_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
Quoted 12 lines
Signed-off-by Daniel Scheller <[email protected]>--- drivers/media/dvb-frontends/cxd2841er.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)drivers/media/dvb-frontends/cxd2841er.c +0
-0@@ -3279,7 +3279,10 @@ static int cxd2841er_get_frontend(struct dvb_frontend *fe,else if (priv->state ==STATE_ACTIVE_TC )
drivers/media/dvb-frontends/cxd2841er.c static int cxd2841er_get_frontend(struct dvb_frontend *fe, · line 3288
Quoted 10 lines
drivers/media/dvb-frontends/cxd2841er.c +4
-1cxd2841er_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
Hi,
Yes, make sense.
2017-06-24 14:35 GMT-04:00 Mauro Carvalho Chehab <[email protected]>:
Quoted 63 lines
Em Thu, 22 Jun 2017 22:03:28 +0200
Daniel Scheller <[email protected]> escreveu:Quoted 18 lines
From: Daniel Scheller <[email protected]>
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=26and if it was DVB-C:
cxd2841er: i2c wr failed=-5 addr=6c reg=00 len=1
cxd2841er: i2c rd failed=-5 addr=6c reg=49This happens when
read_statusunconditionally calls into theread_signal_strength()function which triggers the read_agc_gain_*() functions, where these registered are polled.Quoted 6 lines
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_statusFE_HAS_SYNCto be sure the demod is not put asleep or shut down. IfFE_HAS_SYNCisn't set, additionally set the strength scale toNOT_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,
MauroQuoted 12 lines
Signed-off-by Daniel Scheller <[email protected]>--- drivers/media/dvb-frontends/cxd2841er.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)drivers/media/dvb-frontends/cxd2841er.c +0
-0@@ -3279,7 +3279,10 @@ static int cxd2841er_get_frontend(struct dvb_frontend *fe,else if (priv->state ==STATE_ACTIVE_TC )drivers/media/dvb-frontends/cxd2841er.c static int cxd2841er_get_frontend(struct dvb_frontend *fe, · line 3288
Quoted 10 lines
drivers/media/dvb-frontends/cxd2841er.c +4
-1cxd2841er_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
Signature · 3 lines
Abylay Ospan, NetUP Inc. http://www.netup.tv