aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2012-08-10 12:36:00 -0400
committerJonathan Cameron <jic23@kernel.org>2012-08-16 15:24:37 -0400
commit58cdff6ee71b4ea00a6b822a52ebf9ceb0b6a7d5 (patch)
tree4d0b4004c78dc40078098a41edb924bdccf5149a /drivers/staging
parenta684a0c711d384665b43f9079a035e52a2761eab (diff)
staging:iio:ad7192: Report channel offset
In bipolar mode there is a a binary offset of 2**(N-1) (with N being the number of bits) on the reported value. Currently this value is subtracted when doing a manual read. While this works for manual channel readings it does not work for buffered mode. So report the offset in the channels offset property, which will work in both modes. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/iio/adc/ad7192.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
index 7ba699486326..73483d26a034 100644
--- a/drivers/staging/iio/adc/ad7192.c
+++ b/drivers/staging/iio/adc/ad7192.c
@@ -826,8 +826,6 @@ static int ad7192_read_raw(struct iio_dev *indio_dev,
826 826
827 switch (chan->type) { 827 switch (chan->type) {
828 case IIO_VOLTAGE: 828 case IIO_VOLTAGE:
829 if (!unipolar)
830 *val -= (1 << (chan->scan_type.realbits - 1));
831 break; 829 break;
832 case IIO_TEMP: 830 case IIO_TEMP:
833 *val -= 0x800000; 831 *val -= 0x800000;
@@ -853,6 +851,12 @@ static int ad7192_read_raw(struct iio_dev *indio_dev,
853 default: 851 default:
854 return -EINVAL; 852 return -EINVAL;
855 } 853 }
854 case IIO_CHAN_INFO_OFFSET:
855 if (!unipolar)
856 *val -= (1 << (chan->scan_type.realbits - 1));
857 else
858 *val = 0;
859 return IIO_VAL_INT;
856 } 860 }
857 861
858 return -EINVAL; 862 return -EINVAL;
@@ -942,7 +946,8 @@ static const struct iio_info ad7195_info = {
942 .channel = _chan, \ 946 .channel = _chan, \
943 .channel2 = _chan2, \ 947 .channel2 = _chan2, \
944 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 948 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \
945 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 949 IIO_CHAN_INFO_SCALE_SHARED_BIT | \
950 IIO_CHAN_INFO_OFFSET_SHARED_BIT, \
946 .address = _address, \ 951 .address = _address, \
947 .scan_index = _si, \ 952 .scan_index = _si, \
948 .scan_type = IIO_ST('u', 24, 32, 0)} 953 .scan_type = IIO_ST('u', 24, 32, 0)}
@@ -952,7 +957,8 @@ static const struct iio_info ad7195_info = {
952 .indexed = 1, \ 957 .indexed = 1, \
953 .channel = _chan, \ 958 .channel = _chan, \
954 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 959 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \
955 IIO_CHAN_INFO_SCALE_SHARED_BIT, \ 960 IIO_CHAN_INFO_SCALE_SHARED_BIT | \
961 IIO_CHAN_INFO_OFFSET_SHARED_BIT, \
956 .address = _address, \ 962 .address = _address, \
957 .scan_index = _si, \ 963 .scan_index = _si, \
958 .scan_type = IIO_ST('u', 24, 32, 0)} 964 .scan_type = IIO_ST('u', 24, 32, 0)}