]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iio: chemical: bme680: Fix measurement wait duration calculation
authorChris Spencer <spencercw@gmail.com>
Thu, 5 Feb 2026 14:55:45 +0000 (14:55 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 Mar 2026 15:15:29 +0000 (16:15 +0100)
commit f55b9510cd9437da3a0efa08b089caeb47595ff1 upstream.

This function refers to the Bosch BME680 API as the source of the
calculation, but one of the constants does not match the Bosch
implementation. This appears to be a simple transposition of two digits,
resulting in a wait time that is too short. This can cause the following
'device measurement cycle incomplete' check to occasionally fail, returning
EBUSY to user space.

Adjust the constant to match the Bosch implementation and resolve the EBUSY
errors.

Fixes: 4241665e6ea0 ("iio: chemical: bme680: Fix sensor data read operation")
Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L521
Signed-off-by: Chris Spencer <spencercw@gmail.com>
Acked-by: Vasileios Amoiridis <vassilisamir@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iio/chemical/bme680_core.c

index 70f81c4a96bacdf823de1697d564da143c9fe304..24e0b59e2fdf0b6664ba6b9d2dcc9aa009fe7033 100644 (file)
@@ -613,7 +613,7 @@ static int bme680_wait_for_eoc(struct bme680_data *data)
         * + heater duration
         */
        int wait_eoc_us = ((data->oversampling_temp + data->oversampling_press +
-                          data->oversampling_humid) * 1936) + (477 * 4) +
+                          data->oversampling_humid) * 1963) + (477 * 4) +
                           (477 * 5) + 1000 + (data->heater_dur * 1000);
 
        fsleep(wait_eoc_us);