summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2014-11-03 21:53:05 -0300
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-11-04 18:20:51 -0200
commitc3a80cd024527381c4020ae38252ce34867b5f73 (patch)
tree755aa1f6dd6b45e8957381bde41f39eebf761042
parent6d03f6a875467d924ae4a57c26418810192d842e (diff)
[media] af9033: return 0.1 dB DVBv3 SNR for AF9030 family
Previous patch changed both AF9030 and IT9130 SNR reporting from dB to relative. Restore AF9030 to old behavior as it has been always returning 0.1 dB value. Leave IT9130 relative as old IT9130 was returning relative values. Cc: Bimow Chen <Bimow.Chen@ite.com.tw> Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
-rw-r--r--drivers/media/dvb-frontends/af9033.c43
1 files changed, 25 insertions, 18 deletions
diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index a490033e3a7c..e64070156247 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -854,26 +854,33 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
/* use DVBv5 CNR */
if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL) {
- *snr = div_s64(c->cnr.stat[0].svalue, 1000);
+ /* Return 0.1 dB for AF9030 and 0-0xffff for IT9130. */
+ if (dev->is_af9035) {
+ /* 1000x => 10x (0.1 dB) */
+ *snr = div_s64(c->cnr.stat[0].svalue, 100);
+ } else {
+ /* 1000x => 1x (1 dB) */
+ *snr = div_s64(c->cnr.stat[0].svalue, 1000);
- /* read current modulation */
- ret = af9033_rd_reg(dev, 0x80f903, &u8tmp);
- if (ret)
- goto err;
+ /* read current modulation */
+ ret = af9033_rd_reg(dev, 0x80f903, &u8tmp);
+ if (ret)
+ goto err;
- /* scale value to 0x0000-0xffff */
- switch ((u8tmp >> 0) & 3) {
- case 0:
- *snr = *snr * 0xFFFF / 23;
- break;
- case 1:
- *snr = *snr * 0xFFFF / 26;
- break;
- case 2:
- *snr = *snr * 0xFFFF / 32;
- break;
- default:
- goto err;
+ /* scale value to 0x0000-0xffff */
+ switch ((u8tmp >> 0) & 3) {
+ case 0:
+ *snr = *snr * 0xffff / 23;
+ break;
+ case 1:
+ *snr = *snr * 0xffff / 26;
+ break;
+ case 2:
+ *snr = *snr * 0xffff / 32;
+ break;
+ default:
+ goto err;
+ }
}
} else {
*snr = 0;