]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: chemical: bme680: Modify startup procedure
authorVasileios Amoiridis <vassilisamir@gmail.com>
Sun, 9 Jun 2024 23:38:22 +0000 (01:38 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 3 Aug 2024 09:13:35 +0000 (10:13 +0100)
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
Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/examples/forced_mode/forced_mode.c#L44
Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/examples/forced_mode/forced_mode.c#L53
Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/examples/forced_mode/forced_mode.c#L60
Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L640
Link: https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L294
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>
drivers/iio/chemical/bme680.h
drivers/iio/chemical/bme680_core.c

index 7d0ff294725a9b420cc3a87a57c14c0ac1323ea9..b2c547ac8d34995266621487914f2cb41b25e6d5 100644 (file)
@@ -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
index a54460fddc918323fefa81d3847643cf5be67e6d..0390c298fdd8a7e83e38049bc8c814900629468e 100644 (file)
@@ -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;
        }