#define   BME680_NB_CONV_MASK                  GENMASK(3, 0)
 
 #define BME680_REG_MEAS_STAT_0                 0x1D
+#define   BME680_NEW_DATA_BIT                  BIT(7)
 #define   BME680_GAS_MEAS_BIT                  BIT(6)
+#define   BME680_MEAS_BIT                      BIT(5)
 
 /* Calibration Parameters */
 #define BME680_T2_LSB_REG      0x8A
 
  */
 #include <linux/acpi.h>
 #include <linux/bitfield.h>
+#include <linux/delay.h>
 #include <linux/device.h>
 #include <linux/module.h>
 #include <linux/log2.h>
        return ilog2(val) + 1;
 }
 
+/*
+ * Taken from Bosch BME680 API:
+ * https://github.com/boschsensortec/BME68x_SensorAPI/blob/v4.4.8/bme68x.c#L490
+ */
+static int bme680_wait_for_eoc(struct bme680_data *data)
+{
+       struct device *dev = regmap_get_device(data->regmap);
+       unsigned int check;
+       int ret;
+       /*
+        * (Sum of oversampling ratios * time per oversampling) +
+        * TPH measurement + gas measurement + wait transition from forced mode
+        * + heater duration
+        */
+       int wait_eoc_us = ((data->oversampling_temp + data->oversampling_press +
+                          data->oversampling_humid) * 1936) + (477 * 4) +
+                          (477 * 5) + 1000 + (data->heater_dur * 1000);
+
+       usleep_range(wait_eoc_us, wait_eoc_us + 100);
+
+       ret = regmap_read(data->regmap, BME680_REG_MEAS_STAT_0, &check);
+       if (ret) {
+               dev_err(dev, "failed to read measurement status register.\n");
+               return ret;
+       }
+       if (check & BME680_MEAS_BIT) {
+               dev_err(dev, "Device measurement cycle incomplete.\n");
+               return -EBUSY;
+       }
+       if (!(check & BME680_NEW_DATA_BIT)) {
+               dev_err(dev, "No new data available from the device.\n");
+               return -ENODATA;
+       }
+
+       return 0;
+}
+
 static int bme680_chip_config(struct bme680_data *data)
 {
        struct device *dev = regmap_get_device(data->regmap);
        if (ret < 0)
                return ret;
 
+       ret = bme680_wait_for_eoc(data);
+       if (ret)
+               return ret;
+
        ret = regmap_bulk_read(data->regmap, BME680_REG_TEMP_MSB,
                               &tmp, 3);
        if (ret < 0) {
        if (ret < 0)
                return ret;
 
+       ret = bme680_wait_for_eoc(data);
+       if (ret)
+               return ret;
+
        ret = regmap_read(data->regmap, BME680_REG_MEAS_STAT_0, &check);
        if (check & BME680_GAS_MEAS_BIT) {
                dev_err(dev, "gas measurement incomplete\n");