}
 
        adc_temp = be32_to_cpu(tmp) >> 12;
+       if (adc_temp == BMP280_TEMP_SKIPPED) {
+               /* reading was skipped */
+               dev_err(data->dev, "reading temperature skipped\n");
+               return -EIO;
+       }
        comp_temp = bmp280_compensate_temp(data, adc_temp);
 
        /*
        }
 
        adc_press = be32_to_cpu(tmp) >> 12;
+       if (adc_press == BMP280_PRESS_SKIPPED) {
+               /* reading was skipped */
+               dev_err(data->dev, "reading pressure skipped\n");
+               return -EIO;
+       }
        comp_press = bmp280_compensate_press(data, adc_press);
 
        *val = comp_press;
        }
 
        adc_humidity = be16_to_cpu(tmp);
+       if (adc_humidity == BMP280_HUMIDITY_SKIPPED) {
+               /* reading was skipped */
+               dev_err(data->dev, "reading humidity skipped\n");
+               return -EIO;
+       }
        comp_humidity = bmp280_compensate_humidity(data, adc_humidity);
 
        *val = comp_humidity;
 
 static int bme280_chip_config(struct bmp280_data *data)
 {
-       int ret = bmp280_chip_config(data);
+       int ret;
        u8 osrs = BMP280_OSRS_HUMIDITIY_X(data->oversampling_humid + 1);
 
+       /*
+        * Oversampling of humidity must be set before oversampling of
+        * temperature/pressure is set to become effective.
+        */
+       ret = regmap_update_bits(data->regmap, BMP280_REG_CTRL_HUMIDITY,
+                                 BMP280_OSRS_HUMIDITY_MASK, osrs);
+
        if (ret < 0)
                return ret;
 
-       return regmap_update_bits(data->regmap, BMP280_REG_CTRL_HUMIDITY,
-                                 BMP280_OSRS_HUMIDITY_MASK, osrs);
+       return bmp280_chip_config(data);
 }
 
 static const struct bmp280_chip_info bme280_chip_info = {
 
 #define BME280_CHIP_ID                 0x60
 #define BMP280_SOFT_RESET_VAL          0xB6
 
+/* BMP280 register skipped special values */
+#define BMP280_TEMP_SKIPPED            0x80000
+#define BMP280_PRESS_SKIPPED           0x80000
+#define BMP280_HUMIDITY_SKIPPED                0x8000
+
 /* Regmap configurations */
 extern const struct regmap_config bmp180_regmap_config;
 extern const struct regmap_config bmp280_regmap_config;