iio: humidity: si7020: replaced bitmask on humidity values with range check
authorNicola Corna <nicola@corna.info>
Sun, 23 Aug 2015 21:06:19 +0000 (23:06 +0200)
committerJonathan Cameron <jic23@kernel.org>
Mon, 24 Aug 2015 18:41:16 +0000 (19:41 +0100)
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>
drivers/iio/humidity/si7020.c

index fa3b809aff5efd425ce96031aec1c066b644feb2..12128d1ca570fc4dd93461219628b6ab6461d95d 100644 (file)
@@ -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)