Lines Matching +full:boot +full:- +full:delay +full:- +full:ms

1 /* bme680.c - Driver for Bosch Sensortec's BME680 temperature, pressure,
4 * https://www.bosch-sensortec.com/bst/products/all_products/bme680
11 * SPDX-License-Identifier: Apache-2.0
38 const struct bme680_config *config = dev->config; in bme680_is_on_spi()
40 return config->bus_io == &bme680_bus_io_spi; in bme680_is_on_spi()
46 const struct bme680_config *config = dev->config; in bme680_bus_check()
48 return config->bus_io->check(&config->bus); in bme680_bus_check()
54 const struct bme680_config *config = dev->config; in bme680_reg_read()
56 return config->bus_io->read(dev, start, buf, size); in bme680_reg_read()
62 const struct bme680_config *config = dev->config; in bme680_reg_write()
64 return config->bus_io->write(dev, reg, val); in bme680_reg_write()
71 var1 = ((int32_t)adc_temp >> 3) - ((int32_t)data->par_t1 << 1); in bme680_calc_temp()
72 var2 = (var1 * (int32_t)data->par_t2) >> 11; in bme680_calc_temp()
74 var3 = ((var3) * ((int32_t)data->par_t3 << 4)) >> 14; in bme680_calc_temp()
75 data->t_fine = var2 + var3; in bme680_calc_temp()
76 data->calc_temp = ((data->t_fine * 5) + 128) >> 8; in bme680_calc_temp()
83 var1 = (((int32_t)data->t_fine) >> 1) - 64000; in bme680_calc_press()
85 (int32_t)data->par_p6) >> 2; in bme680_calc_press()
86 var2 = var2 + ((var1 * (int32_t)data->par_p5) << 1); in bme680_calc_press()
87 var2 = (var2 >> 2) + ((int32_t)data->par_p4 << 16); in bme680_calc_press()
89 ((int32_t)data->par_p3 << 5)) >> 3) in bme680_calc_press()
90 + (((int32_t)data->par_p2 * var1) >> 1); in bme680_calc_press()
92 var1 = ((32768 + var1) * (int32_t)data->par_p1) >> 15; in bme680_calc_press()
93 calc_press = 1048576 - adc_press; in bme680_calc_press()
94 calc_press = (calc_press - (var2 >> 12)) * ((uint32_t)3125); in bme680_calc_press()
105 var1 = ((int32_t)data->par_p9 * in bme680_calc_press()
108 var2 = ((int32_t)(calc_press >> 2) * (int32_t)data->par_p8) >> 13; in bme680_calc_press()
111 * (int32_t)data->par_p10) >> 17; in bme680_calc_press()
113 data->calc_press = calc_press in bme680_calc_press()
115 + ((int32_t)data->par_p7 << 7)) >> 4); in bme680_calc_press()
123 temp_scaled = (((int32_t)data->t_fine * 5) + 128) >> 8; in bme680_calc_humidity()
124 var1 = (int32_t)(adc_humidity - ((int32_t)((int32_t)data->par_h1 * 16))) - in bme680_calc_humidity()
125 (((temp_scaled * (int32_t)data->par_h3) in bme680_calc_humidity()
127 var2_1 = (int32_t)data->par_h2; in bme680_calc_humidity()
128 var2_2 = ((temp_scaled * (int32_t)data->par_h4) / (int32_t)100) in bme680_calc_humidity()
129 + (((temp_scaled * ((temp_scaled * (int32_t)data->par_h5) in bme680_calc_humidity()
134 var4 = (int32_t)data->par_h6 << 7; in bme680_calc_humidity()
135 var4 = ((var4) + ((temp_scaled * (int32_t)data->par_h7) / in bme680_calc_humidity()
147 data->calc_humidity = calc_hum; in bme680_calc_humidity()
167 var1 = (int64_t)((1340 + (5 * (int64_t)data->range_sw_err)) * in bme680_calc_gas_resistance()
169 var2 = (((int64_t)((int64_t)adc_gas_res << 15) - (int64_t)(16777216)) + var1); in bme680_calc_gas_resistance()
171 data->calc_gas_resistance = (uint32_t)((var3 + ((int64_t)var2 >> 1)) in bme680_calc_gas_resistance()
186 var1 = ((amb_temp * data->par_gh3) / 1000) * 256; in bme680_calc_res_heat()
187 var2 = (data->par_gh1 + 784) * (((((data->par_gh2 + 154009) in bme680_calc_res_heat()
191 var4 = (var3 / (data->res_heat_range + 4)); in bme680_calc_res_heat()
192 var5 = (131 * data->res_heat_val) + 65536; in bme680_calc_res_heat()
193 heatr_res_x100 = ((var4 / var5) - 250) * 34; in bme680_calc_res_heat()
221 struct bme680_data *data = dev->data; in bme680_sample_fetch()
239 /* Wait for a maximum of 250ms for data. in bme680_sample_fetch()
240 * Initial delay after boot has been measured at 170ms. in bme680_sample_fetch()
241 * Subequent triggers are < 1ms. in bme680_sample_fetch()
244 return -EAGAIN; in bme680_sample_fetch()
252 LOG_DBG("New data after %d ms", cnt); in bme680_sample_fetch()
263 data->heatr_stab = data_regs.gas[1] & BME680_MSK_HEATR_STAB; in bme680_sample_fetch()
277 struct bme680_data *data = dev->data; in bme680_channel_get()
282 * data->calc_temp has a resolution of 0.01 degC. in bme680_channel_get()
285 val->val1 = data->calc_temp / 100; in bme680_channel_get()
286 val->val2 = data->calc_temp % 100 * 10000; in bme680_channel_get()
290 * data->calc_press has a resolution of 1 Pa. in bme680_channel_get()
293 val->val1 = data->calc_press / 1000; in bme680_channel_get()
294 val->val2 = (data->calc_press % 1000) * 1000; in bme680_channel_get()
298 * data->calc_humidity has a resolution of 0.001 %RH. in bme680_channel_get()
301 val->val1 = data->calc_humidity / 1000; in bme680_channel_get()
302 val->val2 = (data->calc_humidity % 1000) * 1000; in bme680_channel_get()
306 * data->calc_gas_resistance has a resolution of 1 ohm. in bme680_channel_get()
309 val->val1 = data->calc_gas_resistance; in bme680_channel_get()
310 val->val2 = 0; in bme680_channel_get()
313 return -ENOTSUP; in bme680_channel_get()
321 struct bme680_data *data = dev->data; in bme680_read_compensation()
325 if (data->has_read_compensation) { in bme680_read_compensation()
348 data->par_t1 = (uint16_t)(BME680_CONCAT_BYTES(buff[32], buff[31])); in bme680_read_compensation()
349 data->par_t2 = (int16_t)(BME680_CONCAT_BYTES(buff[1], buff[0])); in bme680_read_compensation()
350 data->par_t3 = (uint8_t)(buff[2]); in bme680_read_compensation()
353 data->par_p1 = (uint16_t)(BME680_CONCAT_BYTES(buff[5], buff[4])); in bme680_read_compensation()
354 data->par_p2 = (int16_t)(BME680_CONCAT_BYTES(buff[7], buff[6])); in bme680_read_compensation()
355 data->par_p3 = (int8_t)buff[8]; in bme680_read_compensation()
356 data->par_p4 = (int16_t)(BME680_CONCAT_BYTES(buff[11], buff[10])); in bme680_read_compensation()
357 data->par_p5 = (int16_t)(BME680_CONCAT_BYTES(buff[13], buff[12])); in bme680_read_compensation()
358 data->par_p6 = (int8_t)(buff[15]); in bme680_read_compensation()
359 data->par_p7 = (int8_t)(buff[14]); in bme680_read_compensation()
360 data->par_p8 = (int16_t)(BME680_CONCAT_BYTES(buff[19], buff[18])); in bme680_read_compensation()
361 data->par_p9 = (int16_t)(BME680_CONCAT_BYTES(buff[21], buff[20])); in bme680_read_compensation()
362 data->par_p10 = (uint8_t)(buff[22]); in bme680_read_compensation()
365 data->par_h1 = (uint16_t)(((uint16_t)buff[25] << 4) | (buff[24] & 0x0f)); in bme680_read_compensation()
366 data->par_h2 = (uint16_t)(((uint16_t)buff[23] << 4) | ((buff[24]) >> 4)); in bme680_read_compensation()
367 data->par_h3 = (int8_t)buff[26]; in bme680_read_compensation()
368 data->par_h4 = (int8_t)buff[27]; in bme680_read_compensation()
369 data->par_h5 = (int8_t)buff[28]; in bme680_read_compensation()
370 data->par_h6 = (uint8_t)buff[29]; in bme680_read_compensation()
371 data->par_h7 = (int8_t)buff[30]; in bme680_read_compensation()
374 data->par_gh1 = (int8_t)buff[35]; in bme680_read_compensation()
375 data->par_gh2 = (int16_t)(BME680_CONCAT_BYTES(buff[34], buff[33])); in bme680_read_compensation()
376 data->par_gh3 = (int8_t)buff[36]; in bme680_read_compensation()
378 data->res_heat_val = (int8_t)buff[37]; in bme680_read_compensation()
379 data->res_heat_range = ((buff[39] & BME680_MSK_RH_RANGE) >> 4); in bme680_read_compensation()
380 data->range_sw_err = ((int8_t)(buff[41] & BME680_MSK_RANGE_SW_ERR)) / 16; in bme680_read_compensation()
382 data->has_read_compensation = true; in bme680_read_compensation()
388 struct bme680_data *data = dev->data; in bme680_power_up()
400 data->mem_page = (mem_page & BME680_SPI_MEM_PAGE_MSK) >> BME680_SPI_MEM_PAGE_POS; in bme680_power_up()
404 err = bme680_reg_read(dev, BME680_REG_CHIP_ID, &data->chip_id, 1); in bme680_power_up()
409 if (data->chip_id == BME680_CHIP_ID) { in bme680_power_up()
412 LOG_ERR("Bad BME680 chip id: 0x%x", data->chip_id); in bme680_power_up()
413 return -ENOTSUP; in bme680_power_up()
464 return -ENOTSUP; in bme680_pm_control()
476 LOG_ERR("Bus not ready for '%s'", dev->name); in bme680_init()
504 * Main instantiation macro, which selects the correct bus-specific