diff options
author | Antti Palosaari <crope@iki.fi> | 2014-12-14 08:05:49 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-02-03 13:07:01 -0500 |
commit | f7caf93fb8ed299c1f9a3d2713c8d588c938316e (patch) | |
tree | 23b9f648eb32bdec8de1086fb61097000c469254 /drivers/media/dvb-frontends/rtl2832.c | |
parent | 6b4fd01804ced75fb1385df5f6b9cf830cbe15d9 (diff) |
[media] rtl2832: wrap DVBv5 CNR to DVBv3 SNR
Change legacy DVBv3 read SNR to return values calculated by DVBv5
statistics.
Signed-off-by: Antti Palosaari <crope@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/dvb-frontends/rtl2832.c')
-rw-r--r-- | drivers/media/dvb-frontends/rtl2832.c | 42 |
1 files changed, 4 insertions, 38 deletions
diff --git a/drivers/media/dvb-frontends/rtl2832.c b/drivers/media/dvb-frontends/rtl2832.c index 0a0899d2a6b2..18f150105438 100644 --- a/drivers/media/dvb-frontends/rtl2832.c +++ b/drivers/media/dvb-frontends/rtl2832.c | |||
@@ -791,49 +791,15 @@ err: | |||
791 | 791 | ||
792 | static int rtl2832_read_snr(struct dvb_frontend *fe, u16 *snr) | 792 | static int rtl2832_read_snr(struct dvb_frontend *fe, u16 *snr) |
793 | { | 793 | { |
794 | struct rtl2832_dev *dev = fe->demodulator_priv; | 794 | struct dtv_frontend_properties *c = &fe->dtv_property_cache; |
795 | struct i2c_client *client = dev->client; | ||
796 | int ret, hierarchy, constellation; | ||
797 | u8 buf[2], tmp; | ||
798 | u16 tmp16; | ||
799 | #define CONSTELLATION_NUM 3 | ||
800 | #define HIERARCHY_NUM 4 | ||
801 | static const u32 snr_constant[CONSTELLATION_NUM][HIERARCHY_NUM] = { | ||
802 | { 85387325, 85387325, 85387325, 85387325 }, | ||
803 | { 86676178, 86676178, 87167949, 87795660 }, | ||
804 | { 87659938, 87659938, 87885178, 88241743 }, | ||
805 | }; | ||
806 | |||
807 | /* reports SNR in resolution of 0.1 dB */ | ||
808 | |||
809 | ret = rtl2832_rd_reg(dev, 0x3c, 3, &tmp); | ||
810 | if (ret) | ||
811 | goto err; | ||
812 | |||
813 | constellation = (tmp >> 2) & 0x03; /* [3:2] */ | ||
814 | if (constellation > CONSTELLATION_NUM - 1) | ||
815 | goto err; | ||
816 | |||
817 | hierarchy = (tmp >> 4) & 0x07; /* [6:4] */ | ||
818 | if (hierarchy > HIERARCHY_NUM - 1) | ||
819 | goto err; | ||
820 | |||
821 | ret = rtl2832_rd_regs(dev, 0x0c, 4, buf, 2); | ||
822 | if (ret) | ||
823 | goto err; | ||
824 | |||
825 | tmp16 = buf[0] << 8 | buf[1]; | ||
826 | 795 | ||
827 | if (tmp16) | 796 | /* report SNR in resolution of 0.1 dB */ |
828 | *snr = (snr_constant[constellation][hierarchy] - | 797 | if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL) |
829 | intlog10(tmp16)) / ((1 << 24) / 100); | 798 | *snr = div_s64(c->cnr.stat[0].svalue, 100); |
830 | else | 799 | else |
831 | *snr = 0; | 800 | *snr = 0; |
832 | 801 | ||
833 | return 0; | 802 | return 0; |
834 | err: | ||
835 | dev_dbg(&client->dev, "failed=%d\n", ret); | ||
836 | return ret; | ||
837 | } | 803 | } |
838 | 804 | ||
839 | static int rtl2832_read_ber(struct dvb_frontend *fe, u32 *ber) | 805 | static int rtl2832_read_ber(struct dvb_frontend *fe, u32 *ber) |