summaryrefslogtreecommitdiffstats
path: root/kernel/drivers/iio/humidity/si7020.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/drivers/iio/humidity/si7020.c')
-rw-r--r--kernel/drivers/iio/humidity/si7020.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/kernel/drivers/iio/humidity/si7020.c b/kernel/drivers/iio/humidity/si7020.c
index fa3b809af..71991b5c0 100644
--- a/kernel/drivers/iio/humidity/si7020.c
+++ b/kernel/drivers/iio/humidity/si7020.c
@@ -50,15 +50,19 @@ static int si7020_read_raw(struct iio_dev *indio_dev,
switch (mask) {
case IIO_CHAN_INFO_RAW:
- ret = i2c_smbus_read_word_data(*client,
- chan->type == IIO_TEMP ?
- SI7020CMD_TEMP_HOLD :
- SI7020CMD_RH_HOLD);
+ ret = i2c_smbus_read_word_swapped(*client,
+ chan->type == IIO_TEMP ?
+ SI7020CMD_TEMP_HOLD :
+ SI7020CMD_RH_HOLD);
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)