diff options
author | Nicola Corna <nicola@corna.info> | 2015-08-23 21:06:19 (GMT) |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2015-08-24 18:41:16 (GMT) |
commit | ecf7e207a55d8760734a9de5fba1a974628b92e5 (patch) | |
tree | 1403fc200aa6d632046dcdd717a68ae45282ecc2 | |
parent | ab6ff6c6ca1b4739b2af07501bc333b85d7381d8 (diff) | |
download | linux-ecf7e207a55d8760734a9de5fba1a974628b92e5.tar.xz |
iio: humidity: si7020: replaced bitmask on humidity values with range check
The maximum possible value for the relative humidity is 55575 (100%RH).
This value, if shifted right by 2 bits, uses 14 bits and masking it with
a 12 bit mask removes 2 meaningful bits.
The masking has been replaced with a range check that sets the minimum
value at 786 (0%RH) and the maximum at 13893 (99.998%RH).
Signed-off-by: Nicola Corna <nicola@corna.info>
Reviewed-by: Hartmut Knaack <knaack.h@gmx.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r-- | drivers/iio/humidity/si7020.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/iio/humidity/si7020.c b/drivers/iio/humidity/si7020.c index fa3b809..12128d1 100644 --- a/drivers/iio/humidity/si7020.c +++ b/drivers/iio/humidity/si7020.c @@ -57,8 +57,12 @@ static int si7020_read_raw(struct iio_dev *indio_dev, if (ret < 0) return ret; *val = ret >> 2; + /* + * Humidity values can slightly exceed the 0-100%RH + * range and should be corrected by software + */ if (chan->type == IIO_HUMIDITYRELATIVE) - *val &= GENMASK(11, 0); + *val = clamp_val(*val, 786, 13893); return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: if (chan->type == IIO_TEMP) |