Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

authored by

Antti Palosaari and committed by
Mauro Carvalho Chehab
c3a80cd0 6d03f6a8

+25 -18
+25 -18
drivers/media/dvb-frontends/af9033.c
··· 854 854 855 855 /* use DVBv5 CNR */ 856 856 if (c->cnr.stat[0].scale == FE_SCALE_DECIBEL) { 857 - *snr = div_s64(c->cnr.stat[0].svalue, 1000); 857 + /* Return 0.1 dB for AF9030 and 0-0xffff for IT9130. */ 858 + if (dev->is_af9035) { 859 + /* 1000x => 10x (0.1 dB) */ 860 + *snr = div_s64(c->cnr.stat[0].svalue, 100); 861 + } else { 862 + /* 1000x => 1x (1 dB) */ 863 + *snr = div_s64(c->cnr.stat[0].svalue, 1000); 858 864 859 - /* read current modulation */ 860 - ret = af9033_rd_reg(dev, 0x80f903, &u8tmp); 861 - if (ret) 862 - goto err; 865 + /* read current modulation */ 866 + ret = af9033_rd_reg(dev, 0x80f903, &u8tmp); 867 + if (ret) 868 + goto err; 863 869 864 - /* scale value to 0x0000-0xffff */ 865 - switch ((u8tmp >> 0) & 3) { 866 - case 0: 867 - *snr = *snr * 0xFFFF / 23; 868 - break; 869 - case 1: 870 - *snr = *snr * 0xFFFF / 26; 871 - break; 872 - case 2: 873 - *snr = *snr * 0xFFFF / 32; 874 - break; 875 - default: 876 - goto err; 870 + /* scale value to 0x0000-0xffff */ 871 + switch ((u8tmp >> 0) & 3) { 872 + case 0: 873 + *snr = *snr * 0xffff / 23; 874 + break; 875 + case 1: 876 + *snr = *snr * 0xffff / 26; 877 + break; 878 + case 2: 879 + *snr = *snr * 0xffff / 32; 880 + break; 881 + default: 882 + goto err; 883 + } 877 884 } 878 885 } else { 879 886 *snr = 0;