Skip to content

Commit

Permalink
iio:adc:ad799x: Fix reading and writing of event values, apply shift
Browse files Browse the repository at this point in the history
last two bits of ADC and limit values are zero and should not be reported
(ad7993, ad7997); compare with read_raw()

event values are 10 (ad7993, ad7997) or 12 bit max., check the range on write

Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
Cc: Stable@vger.kernel.org
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
  • Loading branch information
Peter Meerwald authored and Jonathan Cameron committed Jun 21, 2014
1 parent e28642c commit 361d795
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions drivers/iio/adc/ad799x.c
Original file line number Diff line number Diff line change
Expand Up @@ -427,9 +427,12 @@ static int ad799x_write_event_value(struct iio_dev *indio_dev,
int ret;
struct ad799x_state *st = iio_priv(indio_dev);

if (val < 0 || val > RES_MASK(chan->scan_type.realbits))
return -EINVAL;

mutex_lock(&indio_dev->mlock);
ret = ad799x_i2c_write16(st, ad799x_threshold_reg(chan, dir, info),
val);
val << chan->scan_type.shift);
mutex_unlock(&indio_dev->mlock);

return ret;
Expand All @@ -452,7 +455,8 @@ static int ad799x_read_event_value(struct iio_dev *indio_dev,
mutex_unlock(&indio_dev->mlock);
if (ret < 0)
return ret;
*val = valin;
*val = (valin >> chan->scan_type.shift) &
RES_MASK(chan->scan_type.realbits);

return IIO_VAL_INT;
}
Expand Down

0 comments on commit 361d795

Please sign in to comment.