Skip to contentSkip to conversation

dvb-frontends/cxd2841er: require FE_HAS_SYNC for agc readout

PATCH In review Daniel Scheller 3 participants 3 messages Jun 22, 2017 – Jun 24, 2017

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
index 08f67d60a7d9..9fff031436f1 100644
@@ -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
#1 lore raw

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=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.

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_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

Quoted 12 lines
---
 drivers/media/dvb-frontends/cxd2841er.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/media/dvb-frontends/cxd2841er.c +0 -0
index 08f67d60a7d9..9fff031436f1 100644
@@ -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 -1
 		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

#2 lore raw

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=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.

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_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

Quoted 12 lines
---
 drivers/media/dvb-frontends/cxd2841er.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/media/dvb-frontends/cxd2841er.c +0 -0
index 08f67d60a7d9..9fff031436f1 100644
@@ -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 -1
              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

Signature · 3 lines
Abylay Ospan,
NetUP Inc.
http://www.netup.tv