| From 9d3f4ec761ce0b67e7552aaf054ed19827024700 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 4 May 2020 20:10:34 +0200 |
| Subject: iio: bmp280: fix compensation of humidity |
| |
| From: Andreas Klinger <ak@it-klinger.de> |
| |
| [ Upstream commit dee2dabc0e4115b80945fe2c91603e634f4b4686 ] |
| |
| Limit the output of humidity compensation to the range between 0 and 100 |
| percent. |
| |
| Depending on the calibration parameters of the individual sensor it |
| happens, that a humidity above 100 percent or below 0 percent is |
| calculated, which don't make sense in terms of relative humidity. |
| |
| Add a clamp to the compensation formula as described in the datasheet of |
| the sensor in chapter 4.2.3. |
| |
| Although this clamp is documented, it was never in the driver of the |
| kernel. |
| |
| It depends on the circumstances (calibration parameters, temperature, |
| humidity) if one can see a value above 100 percent without the clamp. |
| The writer of this patch was working with this type of sensor without |
| noting this error. So it seems to be a rare event when this bug occures. |
| |
| Signed-off-by: Andreas Klinger <ak@it-klinger.de> |
| Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/iio/pressure/bmp280-core.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| diff --git a/drivers/iio/pressure/bmp280-core.c b/drivers/iio/pressure/bmp280-core.c |
| index 3204dff34e0ad..ae415b4e381af 100644 |
| --- a/drivers/iio/pressure/bmp280-core.c |
| +++ b/drivers/iio/pressure/bmp280-core.c |
| @@ -182,6 +182,8 @@ static u32 bmp280_compensate_humidity(struct bmp280_data *data, |
| + (s32)2097152) * H2 + 8192) >> 14); |
| var -= ((((var >> 15) * (var >> 15)) >> 7) * (s32)H1) >> 4; |
| |
| + var = clamp_val(var, 0, 419430400); |
| + |
| return var >> 12; |
| }; |
| |
| -- |
| 2.25.1 |
| |