summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasileios Amoiridis <vassilisamir@gmail.com>2024-06-10 01:38:22 +0200
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2024-08-03 10:13:35 +0100
commitfe358e57afebc33b083551aed5e0093a7ec6db14 (patch)
tree50a31b050e50d08001b625f9aac0d20baf104115
parent8bc1f428ba1f1312107b24a367a7c80881bd3cc0 (diff)
downloadlinux-fe358e57afebc33b083551aed5e0093a7ec6db14.tar.gz
linux-fe358e57afebc33b083551aed5e0093a7ec6db14.tar.bz2
linux-fe358e57afebc33b083551aed5e0093a7ec6db14.zip
iio: chemical: bme680: Modify startup procedure
Modify the startup procedure to reflect the procedure of the Bosch BME68x Sensor API. The initial readings and configuration of the sensor need to happen in the following order: 1) Read calibration data [1,2] 2) Chip general configuration [3] 3) Gas configuration [4] After the chip configuration it is necessary to ensure that the sensor is in sleeping mode, in order to apply the gas configuration settings [5]. Also, after the soft reset, it is advised to wait for 5ms [6]. Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L162 # [1] Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/examples/forced_mode/forced_mode.c#L44 # [2] Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/examples/forced_mode/forced_mode.c#L53 # [3] Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/examples/forced_mode/forced_mode.c#L60 # [4] Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L640 # [5] Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L294 # [6] Signed-off-by: Vasileios Amoiridis <vassilisamir@gmail.com> Link: https://patch.msgid.link/20240609233826.330516-12-vassilisamir@gmail.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
-rw-r--r--drivers/iio/chemical/bme680.h2
-rw-r--r--drivers/iio/chemical/bme680_core.c21
2 files changed, 16 insertions, 7 deletions
diff --git a/drivers/iio/chemical/bme680.h b/drivers/iio/chemical/bme680.h
index 7d0ff294725a..b2c547ac8d34 100644
--- a/drivers/iio/chemical/bme680.h
+++ b/drivers/iio/chemical/bme680.h
@@ -63,6 +63,8 @@
#define BME680_MEAS_TRIM_MASK GENMASK(24, 4)
+#define BME680_STARTUP_TIME_US 5000
+
/* Calibration Parameters */
#define BME680_T2_LSB_REG 0x8A
#define BME680_H2_MSB_REG 0xE1
diff --git a/drivers/iio/chemical/bme680_core.c b/drivers/iio/chemical/bme680_core.c
index a54460fddc91..0390c298fdd8 100644
--- a/drivers/iio/chemical/bme680_core.c
+++ b/drivers/iio/chemical/bme680_core.c
@@ -531,6 +531,11 @@ static int bme680_gas_config(struct bme680_data *data)
int ret;
u8 heatr_res, heatr_dur;
+ /* Go to sleep */
+ ret = bme680_set_mode(data, false);
+ if (ret < 0)
+ return ret;
+
heatr_res = bme680_calc_heater_res(data, data->heater_temp);
/* set target heater temperature */
@@ -866,6 +871,8 @@ int bme680_core_probe(struct device *dev, struct regmap *regmap,
return ret;
}
+ usleep_range(BME680_STARTUP_TIME_US, BME680_STARTUP_TIME_US + 1000);
+
ret = regmap_read(regmap, BME680_REG_CHIP_ID, &data->check);
if (ret < 0) {
dev_err(dev, "Error reading chip ID\n");
@@ -878,22 +885,22 @@ int bme680_core_probe(struct device *dev, struct regmap *regmap,
return -ENODEV;
}
- ret = bme680_chip_config(data);
+ ret = bme680_read_calib(data, &data->bme680);
if (ret < 0) {
- dev_err(dev, "failed to set chip_config data\n");
+ dev_err(dev,
+ "failed to read calibration coefficients at probe\n");
return ret;
}
- ret = bme680_gas_config(data);
+ ret = bme680_chip_config(data);
if (ret < 0) {
- dev_err(dev, "failed to set gas config data\n");
+ dev_err(dev, "failed to set chip_config data\n");
return ret;
}
- ret = bme680_read_calib(data, &data->bme680);
+ ret = bme680_gas_config(data);
if (ret < 0) {
- dev_err(dev,
- "failed to read calibration coefficients at probe\n");
+ dev_err(dev, "failed to set gas config data\n");
return ret;
}