From 632d6b9416c1c1813f3304ef29a6eda7954af3c3 Mon Sep 17 00:00:00 2001 From: Jordan Yates Date: Mon, 15 Jul 2024 21:10:37 +1000 Subject: [PATCH] sensor: bme680: only read compensation params once Only read the compensation parameters from the chip on first power up, as they are static on the device. Signed-off-by: Jordan Yates --- drivers/sensor/bosch/bme680/bme680.c | 5 +++++ drivers/sensor/bosch/bme680/bme680.h | 1 + 2 files changed, 6 insertions(+) diff --git a/drivers/sensor/bosch/bme680/bme680.c b/drivers/sensor/bosch/bme680/bme680.c index 5e46ddcf26c..27ee3134157 100644 --- a/drivers/sensor/bosch/bme680/bme680.c +++ b/drivers/sensor/bosch/bme680/bme680.c @@ -320,6 +320,10 @@ static int bme680_read_compensation(const struct device *dev) uint8_t buff[BME680_LEN_COEFF_ALL]; int err = 0; + if (data->has_read_compensation) { + return 0; + } + err = bme680_reg_read(dev, BME680_REG_COEFF1, buff, BME680_LEN_COEFF1); if (err < 0) { return err; @@ -373,6 +377,7 @@ static int bme680_read_compensation(const struct device *dev) data->res_heat_range = ((buff[39] & BME680_MSK_RH_RANGE) >> 4); data->range_sw_err = ((int8_t)(buff[41] & BME680_MSK_RANGE_SW_ERR)) / 16; + data->has_read_compensation = true; return 0; } diff --git a/drivers/sensor/bosch/bme680/bme680.h b/drivers/sensor/bosch/bme680/bme680.h index a0f63fc4078..6a4a4aef52b 100644 --- a/drivers/sensor/bosch/bme680/bme680.h +++ b/drivers/sensor/bosch/bme680/bme680.h @@ -196,6 +196,7 @@ struct bme680_data { uint8_t res_heat_range; int8_t res_heat_val; int8_t range_sw_err; + bool has_read_compensation; /* Calculated sensor values. */ int32_t calc_temp;