diff options
author | Antti Palosaari <crope@iki.fi> | 2014-09-02 04:03:21 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2014-09-21 18:45:27 -0400 |
commit | 6b45778609dbe4e7d03abe9482a1a5621e2a3e64 (patch) | |
tree | 5a87ee95610b0b839800b02fc1dd9eea596639dc | |
parent | 3e41313aeadfc5e3b3f827519f3840bca1b98f6d (diff) |
[media] af9033: wrap DVBv3 read SNR to DVBv5 CNR
Remove 'duplicate' DVBv3 read SNR implementation and return value,
calculated already by DVBv5 CNR, from the cache.
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.c | 52 | ||||
-rw-r--r-- | drivers/media/dvb-frontends/af9033_priv.h | 1 |
2 files changed, 7 insertions, 46 deletions
diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c index 576e9b5f4bbf..4c2061676bbe 100644 --- a/drivers/media/dvb-frontends/af9033.c +++ b/drivers/media/dvb-frontends/af9033.c | |||
@@ -832,55 +832,15 @@ err: | |||
832 | static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr) | 832 | static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr) |
833 | { | 833 | { |
834 | struct af9033_dev *dev = fe->demodulator_priv; | 834 | struct af9033_dev *dev = fe->demodulator_priv; |
835 | int ret, i, len; | 835 | struct dtv_frontend_properties *c = &dev->fe.dtv_property_cache; |
836 | u8 buf[3], tmp; | ||
837 | u32 snr_val; | ||
838 | const struct val_snr *snr_lut; | ||
839 | |||
840 | /* read value */ | ||
841 | ret = af9033_rd_regs(dev, 0x80002c, buf, 3); | ||
842 | if (ret < 0) | ||
843 | goto err; | ||
844 | |||
845 | snr_val = (buf[2] << 16) | (buf[1] << 8) | buf[0]; | ||
846 | |||
847 | /* read current modulation */ | ||
848 | ret = af9033_rd_reg(dev, 0x80f903, &tmp); | ||
849 | if (ret < 0) | ||
850 | goto err; | ||
851 | |||
852 | switch ((tmp >> 0) & 3) { | ||
853 | case 0: | ||
854 | len = ARRAY_SIZE(qpsk_snr_lut); | ||
855 | snr_lut = qpsk_snr_lut; | ||
856 | break; | ||
857 | case 1: | ||
858 | len = ARRAY_SIZE(qam16_snr_lut); | ||
859 | snr_lut = qam16_snr_lut; | ||
860 | break; | ||
861 | case 2: | ||
862 | len = ARRAY_SIZE(qam64_snr_lut); | ||
863 | snr_lut = qam64_snr_lut; | ||
864 | break; | ||
865 | default: | ||
866 | goto err; | ||
867 | } | ||
868 | |||
869 | for (i = 0; i < len; i++) { | ||
870 | tmp = snr_lut[i].snr; | ||
871 | |||
872 | if (snr_val < snr_lut[i].val) | ||
873 | break; | ||
874 | } | ||
875 | 836 | ||
876 | *snr = tmp * 10; /* dB/10 */ | 837 | /* use DVBv5 CNR */ |
838 | if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL) | ||
839 | *snr = div_s64(c->cnr.stat[0].svalue, 100); /* 1000x => 10x */ | ||
840 | else | ||
841 | *snr = 0; | ||
877 | 842 | ||
878 | return 0; | 843 | return 0; |
879 | |||
880 | err: | ||
881 | dev_dbg(&dev->client->dev, "failed=%d\n", ret); | ||
882 | |||
883 | return ret; | ||
884 | } | 844 | } |
885 | 845 | ||
886 | static int af9033_read_signal_strength(struct dvb_frontend *fe, u16 *strength) | 846 | static int af9033_read_signal_strength(struct dvb_frontend *fe, u16 *strength) |
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h index ded7b67d7526..c12c92cb5855 100644 --- a/drivers/media/dvb-frontends/af9033_priv.h +++ b/drivers/media/dvb-frontends/af9033_priv.h | |||
@@ -24,6 +24,7 @@ | |||
24 | 24 | ||
25 | #include "dvb_frontend.h" | 25 | #include "dvb_frontend.h" |
26 | #include "af9033.h" | 26 | #include "af9033.h" |
27 | #include <linux/math64.h> | ||
27 | 28 | ||
28 | struct reg_val { | 29 | struct reg_val { |
29 | u32 reg; | 30 | u32 reg; |