[PATCH] iio: chemical: bme680: Fix measurement wait duration calculation

Chris Spencer posted 1 patch 5 days, 10 hours ago
There is a newer version of this series
drivers/iio/chemical/bme680_core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] iio: chemical: bme680: Fix measurement wait duration calculation
Posted by Chris Spencer 5 days, 10 hours ago
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.

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>
---
 drivers/iio/chemical/bme680_core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iio/chemical/bme680_core.c b/drivers/iio/chemical/bme680_core.c
index 70f81c4a96ba..24e0b59e2fdf 100644
--- a/drivers/iio/chemical/bme680_core.c
+++ b/drivers/iio/chemical/bme680_core.c
@@ -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);
-- 
2.43.0
Re: [PATCH] iio: chemical: bme680: Fix measurement wait duration calculation
Posted by Vasileios Amoiridis 3 days, 20 hours ago
On Mon, Feb 02, 2026 at 07:38:42AM +0000, Chris Spencer wrote:
> 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.
> 

Hi Chris,

This is a good catch! I didn't have problems with measurements in the
past but that is also because of the entropy of the sensor plus there
were some series with "buggy" sensors that were behaving a bit
differently. In any case, thanks for finding this!

Here is my tag, in case it is of any worth:

Acked-by: Vasileios Amoiridis <vassilisamir@gmail.com>

Cheers,
Vasilis

> 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>
> ---
>  drivers/iio/chemical/bme680_core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/chemical/bme680_core.c b/drivers/iio/chemical/bme680_core.c
> index 70f81c4a96ba..24e0b59e2fdf 100644
> --- a/drivers/iio/chemical/bme680_core.c
> +++ b/drivers/iio/chemical/bme680_core.c
> @@ -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);
> -- 
> 2.43.0
>