1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2010 Christoph Mair <christoph.mair@gmail.com>
4 * Copyright (c) 2012 Bosch Sensortec GmbH
5 * Copyright (c) 2012 Unixphere AB
6 * Copyright (c) 2014 Intel Corporation
7 * Copyright (c) 2016 Linus Walleij <linus.walleij@linaro.org>
9 * Driver for Bosch Sensortec BMP180 and BMP280 digital pressure sensor.
12 * https://cdn-shop.adafruit.com/datasheets/BST-BMP180-DS000-09.pdf
13 * https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp280-ds001.pdf
14 * https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme280-ds002.pdf
15 * https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp388-ds001.pdf
16 * https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp390-ds002.pdf
17 * https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp581-ds004.pdf
20 * https://github.com/boschsensortec/BME280_SensorAPI
21 * https://github.com/boschsensortec/BMP3_SensorAPI
22 * https://github.com/boschsensortec/BMP5_SensorAPI
25 * The link to the bmp180 datasheet points to an outdated version missing these changes:
26 * - Changed document referral from ANP015 to BST-MPS-AN004-00 on page 26
27 * - Updated equation for B3 param on section 3.5 to ((((long)AC1 * 4 + X3) << oss) + 2) / 4
28 * - Updated RoHS directive to 2011/65/EU effective 8 June 2011 on page 26
31 #define pr_fmt(fmt) "bmp280: " fmt
33 #include <linux/bitops.h>
34 #include <linux/bitfield.h>
35 #include <linux/cleanup.h>
36 #include <linux/completion.h>
37 #include <linux/delay.h>
38 #include <linux/device.h>
39 #include <linux/gpio/consumer.h>
40 #include <linux/interrupt.h>
41 #include <linux/irq.h> /* For irq_get_irq_data() */
42 #include <linux/module.h>
43 #include <linux/nvmem-provider.h>
44 #include <linux/pm_runtime.h>
45 #include <linux/property.h>
46 #include <linux/random.h>
47 #include <linux/regmap.h>
48 #include <linux/regulator/consumer.h>
50 #include <linux/iio/buffer.h>
51 #include <linux/iio/iio.h>
52 #include <linux/iio/trigger.h>
53 #include <linux/iio/trigger_consumer.h>
54 #include <linux/iio/triggered_buffer.h>
56 #include <linux/unaligned.h>
61 * These enums are used for indexing into the array of calibration
62 * coefficients for BMP180.
64 enum { AC1
, AC2
, AC3
, AC4
, AC5
, AC6
, B1
, B2
, MB
, MC
, MD
};
123 * These enums are used for indexing into the array of compensation
124 * parameters for BMP280.
126 enum { T1
, T2
, T3
, P1
, P2
, P3
, P4
, P5
, P6
, P7
, P8
, P9
};
129 /* Temperature calib indexes */
133 /* Pressure calib indexes */
153 static const struct iio_chan_spec bmp280_channels
[] = {
155 .type
= IIO_PRESSURE
,
156 /* PROCESSED maintained for ABI backwards compatibility */
157 .info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
) |
158 BIT(IIO_CHAN_INFO_RAW
) |
159 BIT(IIO_CHAN_INFO_SCALE
) |
160 BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO
),
166 .endianness
= IIO_CPU
,
171 /* PROCESSED maintained for ABI backwards compatibility */
172 .info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
) |
173 BIT(IIO_CHAN_INFO_RAW
) |
174 BIT(IIO_CHAN_INFO_SCALE
) |
175 BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO
),
181 .endianness
= IIO_CPU
,
184 IIO_CHAN_SOFT_TIMESTAMP(2),
187 static const struct iio_chan_spec bme280_channels
[] = {
189 .type
= IIO_PRESSURE
,
190 /* PROCESSED maintained for ABI backwards compatibility */
191 .info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
) |
192 BIT(IIO_CHAN_INFO_RAW
) |
193 BIT(IIO_CHAN_INFO_SCALE
) |
194 BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO
),
200 .endianness
= IIO_CPU
,
205 /* PROCESSED maintained for ABI backwards compatibility */
206 .info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
) |
207 BIT(IIO_CHAN_INFO_RAW
) |
208 BIT(IIO_CHAN_INFO_SCALE
) |
209 BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO
),
215 .endianness
= IIO_CPU
,
219 .type
= IIO_HUMIDITYRELATIVE
,
220 /* PROCESSED maintained for ABI backwards compatibility */
221 .info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
) |
222 BIT(IIO_CHAN_INFO_RAW
) |
223 BIT(IIO_CHAN_INFO_SCALE
) |
224 BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO
),
230 .endianness
= IIO_CPU
,
233 IIO_CHAN_SOFT_TIMESTAMP(3),
236 static const struct iio_chan_spec bmp380_channels
[] = {
238 .type
= IIO_PRESSURE
,
239 /* PROCESSED maintained for ABI backwards compatibility */
240 .info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
) |
241 BIT(IIO_CHAN_INFO_RAW
) |
242 BIT(IIO_CHAN_INFO_SCALE
) |
243 BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO
),
244 .info_mask_shared_by_all
= BIT(IIO_CHAN_INFO_SAMP_FREQ
) |
245 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
),
251 .endianness
= IIO_CPU
,
256 /* PROCESSED maintained for ABI backwards compatibility */
257 .info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
) |
258 BIT(IIO_CHAN_INFO_RAW
) |
259 BIT(IIO_CHAN_INFO_SCALE
) |
260 BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO
),
261 .info_mask_shared_by_all
= BIT(IIO_CHAN_INFO_SAMP_FREQ
) |
262 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
),
268 .endianness
= IIO_CPU
,
271 IIO_CHAN_SOFT_TIMESTAMP(2),
274 static const struct iio_chan_spec bmp580_channels
[] = {
276 .type
= IIO_PRESSURE
,
277 /* PROCESSED maintained for ABI backwards compatibility */
278 .info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
) |
279 BIT(IIO_CHAN_INFO_RAW
) |
280 BIT(IIO_CHAN_INFO_SCALE
) |
281 BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO
),
282 .info_mask_shared_by_all
= BIT(IIO_CHAN_INFO_SAMP_FREQ
) |
283 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
),
289 .endianness
= IIO_LE
,
294 /* PROCESSED maintained for ABI backwards compatibility */
295 .info_mask_separate
= BIT(IIO_CHAN_INFO_PROCESSED
) |
296 BIT(IIO_CHAN_INFO_RAW
) |
297 BIT(IIO_CHAN_INFO_SCALE
) |
298 BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO
),
299 .info_mask_shared_by_all
= BIT(IIO_CHAN_INFO_SAMP_FREQ
) |
300 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
),
306 .endianness
= IIO_LE
,
309 IIO_CHAN_SOFT_TIMESTAMP(2),
312 static int bmp280_read_calib(struct bmp280_data
*data
)
314 struct bmp280_calib
*calib
= &data
->calib
.bmp280
;
317 /* Read temperature and pressure calibration values. */
318 ret
= regmap_bulk_read(data
->regmap
, BMP280_REG_COMP_TEMP_START
,
319 data
->bmp280_cal_buf
,
320 sizeof(data
->bmp280_cal_buf
));
323 "failed to read calibration parameters\n");
327 /* Toss calibration data into the entropy pool */
328 add_device_randomness(data
->bmp280_cal_buf
,
329 sizeof(data
->bmp280_cal_buf
));
331 /* Parse temperature calibration values. */
332 calib
->T1
= le16_to_cpu(data
->bmp280_cal_buf
[T1
]);
333 calib
->T2
= le16_to_cpu(data
->bmp280_cal_buf
[T2
]);
334 calib
->T3
= le16_to_cpu(data
->bmp280_cal_buf
[T3
]);
336 /* Parse pressure calibration values. */
337 calib
->P1
= le16_to_cpu(data
->bmp280_cal_buf
[P1
]);
338 calib
->P2
= le16_to_cpu(data
->bmp280_cal_buf
[P2
]);
339 calib
->P3
= le16_to_cpu(data
->bmp280_cal_buf
[P3
]);
340 calib
->P4
= le16_to_cpu(data
->bmp280_cal_buf
[P4
]);
341 calib
->P5
= le16_to_cpu(data
->bmp280_cal_buf
[P5
]);
342 calib
->P6
= le16_to_cpu(data
->bmp280_cal_buf
[P6
]);
343 calib
->P7
= le16_to_cpu(data
->bmp280_cal_buf
[P7
]);
344 calib
->P8
= le16_to_cpu(data
->bmp280_cal_buf
[P8
]);
345 calib
->P9
= le16_to_cpu(data
->bmp280_cal_buf
[P9
]);
351 * These enums are used for indexing into the array of humidity parameters
352 * for BME280. Due to some weird indexing, unaligned BE/LE accesses co-exist in
353 * order to prepare the FIELD_{GET/PREP}() fields. Table 16 in Section 4.2.2 of
356 enum { H2
= 0, H3
= 2, H4
= 3, H5
= 4, H6
= 6 };
358 static int bme280_read_calib(struct bmp280_data
*data
)
360 struct bmp280_calib
*calib
= &data
->calib
.bmp280
;
361 struct device
*dev
= data
->dev
;
362 s16 h4_upper
, h4_lower
, tmp_1
, tmp_2
, tmp_3
;
366 /* Load shared calibration params with bmp280 first */
367 ret
= bmp280_read_calib(data
);
371 ret
= regmap_read(data
->regmap
, BME280_REG_COMP_H1
, &tmp
);
373 dev_err(dev
, "failed to read H1 comp value\n");
378 ret
= regmap_bulk_read(data
->regmap
, BME280_REG_COMP_H2
,
379 data
->bme280_humid_cal_buf
,
380 sizeof(data
->bme280_humid_cal_buf
));
382 dev_err(dev
, "failed to read humidity calibration values\n");
386 calib
->H2
= get_unaligned_le16(&data
->bme280_humid_cal_buf
[H2
]);
387 calib
->H3
= data
->bme280_humid_cal_buf
[H3
];
388 tmp_1
= get_unaligned_be16(&data
->bme280_humid_cal_buf
[H4
]);
389 tmp_2
= FIELD_GET(BME280_COMP_H4_GET_MASK_UP
, tmp_1
);
390 h4_upper
= FIELD_PREP(BME280_COMP_H4_PREP_MASK_UP
, tmp_2
);
391 h4_lower
= FIELD_GET(BME280_COMP_H4_MASK_LOW
, tmp_1
);
392 calib
->H4
= sign_extend32(h4_upper
| h4_lower
, 11);
393 tmp_3
= get_unaligned_le16(&data
->bme280_humid_cal_buf
[H5
]);
394 calib
->H5
= sign_extend32(FIELD_GET(BME280_COMP_H5_MASK
, tmp_3
), 11);
395 calib
->H6
= data
->bme280_humid_cal_buf
[H6
];
400 static int bme280_read_humid_adc(struct bmp280_data
*data
, u16
*adc_humidity
)
405 ret
= regmap_bulk_read(data
->regmap
, BME280_REG_HUMIDITY_MSB
,
406 &data
->be16
, BME280_NUM_HUMIDITY_BYTES
);
408 dev_err(data
->dev
, "failed to read humidity\n");
412 value_humidity
= be16_to_cpu(data
->be16
);
413 if (value_humidity
== BMP280_HUMIDITY_SKIPPED
) {
414 dev_err(data
->dev
, "reading humidity skipped\n");
417 *adc_humidity
= value_humidity
;
423 * Returns humidity in percent, resolution is 0.01 percent. Output value of
424 * "47445" represents 47445/1024 = 46.333 %RH.
426 * Taken from BME280 datasheet, Section 4.2.3, "Compensation formula".
428 static u32
bme280_compensate_humidity(struct bmp280_data
*data
,
429 u16 adc_humidity
, s32 t_fine
)
431 struct bmp280_calib
*calib
= &data
->calib
.bmp280
;
434 var
= t_fine
- (s32
)76800;
435 var
= (((((s32
)adc_humidity
<< 14) - (calib
->H4
<< 20) - (calib
->H5
* var
))
436 + (s32
)16384) >> 15) * (((((((var
* calib
->H6
) >> 10)
437 * (((var
* (s32
)calib
->H3
) >> 11) + (s32
)32768)) >> 10)
438 + (s32
)2097152) * calib
->H2
+ 8192) >> 14);
439 var
-= ((((var
>> 15) * (var
>> 15)) >> 7) * (s32
)calib
->H1
) >> 4;
441 var
= clamp_val(var
, 0, 419430400);
446 static int bmp280_read_temp_adc(struct bmp280_data
*data
, u32
*adc_temp
)
451 ret
= regmap_bulk_read(data
->regmap
, BMP280_REG_TEMP_MSB
,
452 data
->buf
, BMP280_NUM_TEMP_BYTES
);
454 dev_err(data
->dev
, "failed to read temperature\n");
458 value_temp
= FIELD_GET(BMP280_MEAS_TRIM_MASK
, get_unaligned_be24(data
->buf
));
459 if (value_temp
== BMP280_TEMP_SKIPPED
) {
460 dev_err(data
->dev
, "reading temperature skipped\n");
463 *adc_temp
= value_temp
;
469 * Returns temperature in DegC, resolution is 0.01 DegC. Output value of
470 * "5123" equals 51.23 DegC. t_fine carries fine temperature as global
473 * Taken from datasheet, Section 3.11.3, "Compensation formula".
475 static s32
bmp280_calc_t_fine(struct bmp280_data
*data
, u32 adc_temp
)
477 struct bmp280_calib
*calib
= &data
->calib
.bmp280
;
480 var1
= (((((s32
)adc_temp
) >> 3) - ((s32
)calib
->T1
<< 1)) *
481 ((s32
)calib
->T2
)) >> 11;
482 var2
= (((((((s32
)adc_temp
) >> 4) - ((s32
)calib
->T1
)) *
483 ((((s32
)adc_temp
>> 4) - ((s32
)calib
->T1
))) >> 12) *
484 ((s32
)calib
->T3
))) >> 14;
485 return var1
+ var2
; /* t_fine = var1 + var2 */
488 static int bmp280_get_t_fine(struct bmp280_data
*data
, s32
*t_fine
)
493 ret
= bmp280_read_temp_adc(data
, &adc_temp
);
497 *t_fine
= bmp280_calc_t_fine(data
, adc_temp
);
502 static s32
bmp280_compensate_temp(struct bmp280_data
*data
, u32 adc_temp
)
504 return (bmp280_calc_t_fine(data
, adc_temp
) * 5 + 128) / 256;
507 static int bmp280_read_press_adc(struct bmp280_data
*data
, u32
*adc_press
)
512 ret
= regmap_bulk_read(data
->regmap
, BMP280_REG_PRESS_MSB
,
513 data
->buf
, BMP280_NUM_PRESS_BYTES
);
515 dev_err(data
->dev
, "failed to read pressure\n");
519 value_press
= FIELD_GET(BMP280_MEAS_TRIM_MASK
, get_unaligned_be24(data
->buf
));
520 if (value_press
== BMP280_PRESS_SKIPPED
) {
521 dev_err(data
->dev
, "reading pressure skipped\n");
524 *adc_press
= value_press
;
530 * Returns pressure in Pa as unsigned 32 bit integer in Q24.8 format (24
531 * integer bits and 8 fractional bits). Output value of "24674867"
532 * represents 24674867/256 = 96386.2 Pa = 963.862 hPa
534 * Taken from datasheet, Section 3.11.3, "Compensation formula".
536 static u32
bmp280_compensate_press(struct bmp280_data
*data
,
537 u32 adc_press
, s32 t_fine
)
539 struct bmp280_calib
*calib
= &data
->calib
.bmp280
;
542 var1
= ((s64
)t_fine
) - 128000;
543 var2
= var1
* var1
* (s64
)calib
->P6
;
544 var2
+= (var1
* (s64
)calib
->P5
) << 17;
545 var2
+= ((s64
)calib
->P4
) << 35;
546 var1
= ((var1
* var1
* (s64
)calib
->P3
) >> 8) +
547 ((var1
* (s64
)calib
->P2
) << 12);
548 var1
= ((((s64
)1) << 47) + var1
) * ((s64
)calib
->P1
) >> 33;
553 p
= ((((s64
)1048576 - (s32
)adc_press
) << 31) - var2
) * 3125;
554 p
= div64_s64(p
, var1
);
555 var1
= (((s64
)calib
->P9
) * (p
>> 13) * (p
>> 13)) >> 25;
556 var2
= ((s64
)(calib
->P8
) * p
) >> 19;
557 p
= ((p
+ var1
+ var2
) >> 8) + (((s64
)calib
->P7
) << 4);
562 static int bmp280_read_temp(struct bmp280_data
*data
, s32
*comp_temp
)
567 ret
= bmp280_read_temp_adc(data
, &adc_temp
);
571 *comp_temp
= bmp280_compensate_temp(data
, adc_temp
);
576 static int bmp280_read_press(struct bmp280_data
*data
, u32
*comp_press
)
582 ret
= bmp280_get_t_fine(data
, &t_fine
);
586 ret
= bmp280_read_press_adc(data
, &adc_press
);
590 *comp_press
= bmp280_compensate_press(data
, adc_press
, t_fine
);
595 static int bme280_read_humid(struct bmp280_data
*data
, u32
*comp_humidity
)
601 ret
= bmp280_get_t_fine(data
, &t_fine
);
605 ret
= bme280_read_humid_adc(data
, &adc_humidity
);
609 *comp_humidity
= bme280_compensate_humidity(data
, adc_humidity
, t_fine
);
614 static int bmp280_read_raw_impl(struct iio_dev
*indio_dev
,
615 struct iio_chan_spec
const *chan
,
616 int *val
, int *val2
, long mask
)
618 struct bmp280_data
*data
= iio_priv(indio_dev
);
622 guard(mutex
)(&data
->lock
);
625 case IIO_CHAN_INFO_PROCESSED
:
626 ret
= data
->chip_info
->set_mode(data
, BMP280_FORCED
);
630 ret
= data
->chip_info
->wait_conv(data
);
634 switch (chan
->type
) {
635 case IIO_HUMIDITYRELATIVE
:
636 ret
= data
->chip_info
->read_humid(data
, &chan_value
);
640 *val
= data
->chip_info
->humid_coeffs
[0] * chan_value
;
641 *val2
= data
->chip_info
->humid_coeffs
[1];
642 return data
->chip_info
->humid_coeffs_type
;
644 ret
= data
->chip_info
->read_press(data
, &chan_value
);
648 *val
= data
->chip_info
->press_coeffs
[0] * chan_value
;
649 *val2
= data
->chip_info
->press_coeffs
[1];
650 return data
->chip_info
->press_coeffs_type
;
652 ret
= data
->chip_info
->read_temp(data
, &chan_value
);
656 *val
= data
->chip_info
->temp_coeffs
[0] * chan_value
;
657 *val2
= data
->chip_info
->temp_coeffs
[1];
658 return data
->chip_info
->temp_coeffs_type
;
662 case IIO_CHAN_INFO_RAW
:
663 ret
= data
->chip_info
->set_mode(data
, BMP280_FORCED
);
667 ret
= data
->chip_info
->wait_conv(data
);
671 switch (chan
->type
) {
672 case IIO_HUMIDITYRELATIVE
:
673 ret
= data
->chip_info
->read_humid(data
, &chan_value
);
680 ret
= data
->chip_info
->read_press(data
, &chan_value
);
687 ret
= data
->chip_info
->read_temp(data
, &chan_value
);
696 case IIO_CHAN_INFO_SCALE
:
697 switch (chan
->type
) {
698 case IIO_HUMIDITYRELATIVE
:
699 *val
= data
->chip_info
->humid_coeffs
[0];
700 *val2
= data
->chip_info
->humid_coeffs
[1];
701 return data
->chip_info
->humid_coeffs_type
;
703 *val
= data
->chip_info
->press_coeffs
[0];
704 *val2
= data
->chip_info
->press_coeffs
[1];
705 return data
->chip_info
->press_coeffs_type
;
707 *val
= data
->chip_info
->temp_coeffs
[0];
708 *val2
= data
->chip_info
->temp_coeffs
[1];
709 return data
->chip_info
->temp_coeffs_type
;
713 case IIO_CHAN_INFO_OVERSAMPLING_RATIO
:
714 switch (chan
->type
) {
715 case IIO_HUMIDITYRELATIVE
:
716 *val
= 1 << data
->oversampling_humid
;
719 *val
= 1 << data
->oversampling_press
;
722 *val
= 1 << data
->oversampling_temp
;
727 case IIO_CHAN_INFO_SAMP_FREQ
:
728 if (!data
->chip_info
->sampling_freq_avail
)
731 *val
= data
->chip_info
->sampling_freq_avail
[data
->sampling_freq
][0];
732 *val2
= data
->chip_info
->sampling_freq_avail
[data
->sampling_freq
][1];
733 return IIO_VAL_INT_PLUS_MICRO
;
734 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
:
735 if (!data
->chip_info
->iir_filter_coeffs_avail
)
738 *val
= (1 << data
->iir_filter_coeff
) - 1;
745 static int bmp280_read_raw(struct iio_dev
*indio_dev
,
746 struct iio_chan_spec
const *chan
,
747 int *val
, int *val2
, long mask
)
749 struct bmp280_data
*data
= iio_priv(indio_dev
);
752 pm_runtime_get_sync(data
->dev
);
753 ret
= bmp280_read_raw_impl(indio_dev
, chan
, val
, val2
, mask
);
754 pm_runtime_mark_last_busy(data
->dev
);
755 pm_runtime_put_autosuspend(data
->dev
);
760 static int bme280_write_oversampling_ratio_humid(struct bmp280_data
*data
,
763 const int *avail
= data
->chip_info
->oversampling_humid_avail
;
764 const int n
= data
->chip_info
->num_oversampling_humid_avail
;
768 for (i
= 0; i
< n
; i
++) {
769 if (avail
[i
] == val
) {
770 prev
= data
->oversampling_humid
;
771 data
->oversampling_humid
= ilog2(val
);
773 ret
= data
->chip_info
->chip_config(data
);
775 data
->oversampling_humid
= prev
;
776 data
->chip_info
->chip_config(data
);
785 static int bmp280_write_oversampling_ratio_temp(struct bmp280_data
*data
,
788 const int *avail
= data
->chip_info
->oversampling_temp_avail
;
789 const int n
= data
->chip_info
->num_oversampling_temp_avail
;
793 for (i
= 0; i
< n
; i
++) {
794 if (avail
[i
] == val
) {
795 prev
= data
->oversampling_temp
;
796 data
->oversampling_temp
= ilog2(val
);
798 ret
= data
->chip_info
->chip_config(data
);
800 data
->oversampling_temp
= prev
;
801 data
->chip_info
->chip_config(data
);
810 static int bmp280_write_oversampling_ratio_press(struct bmp280_data
*data
,
813 const int *avail
= data
->chip_info
->oversampling_press_avail
;
814 const int n
= data
->chip_info
->num_oversampling_press_avail
;
818 for (i
= 0; i
< n
; i
++) {
819 if (avail
[i
] == val
) {
820 prev
= data
->oversampling_press
;
821 data
->oversampling_press
= ilog2(val
);
823 ret
= data
->chip_info
->chip_config(data
);
825 data
->oversampling_press
= prev
;
826 data
->chip_info
->chip_config(data
);
835 static int bmp280_write_sampling_frequency(struct bmp280_data
*data
,
838 const int (*avail
)[2] = data
->chip_info
->sampling_freq_avail
;
839 const int n
= data
->chip_info
->num_sampling_freq_avail
;
843 for (i
= 0; i
< n
; i
++) {
844 if (avail
[i
][0] == val
&& avail
[i
][1] == val2
) {
845 prev
= data
->sampling_freq
;
846 data
->sampling_freq
= i
;
848 ret
= data
->chip_info
->chip_config(data
);
850 data
->sampling_freq
= prev
;
851 data
->chip_info
->chip_config(data
);
860 static int bmp280_write_iir_filter_coeffs(struct bmp280_data
*data
, int val
)
862 const int *avail
= data
->chip_info
->iir_filter_coeffs_avail
;
863 const int n
= data
->chip_info
->num_iir_filter_coeffs_avail
;
867 for (i
= 0; i
< n
; i
++) {
868 if (avail
[i
] - 1 == val
) {
869 prev
= data
->iir_filter_coeff
;
870 data
->iir_filter_coeff
= i
;
872 ret
= data
->chip_info
->chip_config(data
);
874 data
->iir_filter_coeff
= prev
;
875 data
->chip_info
->chip_config(data
);
885 static int bmp280_write_raw_impl(struct iio_dev
*indio_dev
,
886 struct iio_chan_spec
const *chan
,
887 int val
, int val2
, long mask
)
889 struct bmp280_data
*data
= iio_priv(indio_dev
);
891 guard(mutex
)(&data
->lock
);
894 * Helper functions to update sensor running configuration.
895 * If an error happens applying new settings, will try restore
896 * previous parameters to ensure the sensor is left in a known
897 * working configuration.
900 case IIO_CHAN_INFO_OVERSAMPLING_RATIO
:
901 switch (chan
->type
) {
902 case IIO_HUMIDITYRELATIVE
:
903 return bme280_write_oversampling_ratio_humid(data
, val
);
905 return bmp280_write_oversampling_ratio_press(data
, val
);
907 return bmp280_write_oversampling_ratio_temp(data
, val
);
911 case IIO_CHAN_INFO_SAMP_FREQ
:
912 return bmp280_write_sampling_frequency(data
, val
, val2
);
913 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
:
914 return bmp280_write_iir_filter_coeffs(data
, val
);
920 static int bmp280_write_raw(struct iio_dev
*indio_dev
,
921 struct iio_chan_spec
const *chan
,
922 int val
, int val2
, long mask
)
924 struct bmp280_data
*data
= iio_priv(indio_dev
);
927 pm_runtime_get_sync(data
->dev
);
928 ret
= bmp280_write_raw_impl(indio_dev
, chan
, val
, val2
, mask
);
929 pm_runtime_mark_last_busy(data
->dev
);
930 pm_runtime_put_autosuspend(data
->dev
);
935 static int bmp280_read_avail(struct iio_dev
*indio_dev
,
936 struct iio_chan_spec
const *chan
,
937 const int **vals
, int *type
, int *length
,
940 struct bmp280_data
*data
= iio_priv(indio_dev
);
943 case IIO_CHAN_INFO_OVERSAMPLING_RATIO
:
944 switch (chan
->type
) {
946 *vals
= data
->chip_info
->oversampling_press_avail
;
947 *length
= data
->chip_info
->num_oversampling_press_avail
;
950 *vals
= data
->chip_info
->oversampling_temp_avail
;
951 *length
= data
->chip_info
->num_oversampling_temp_avail
;
957 return IIO_AVAIL_LIST
;
958 case IIO_CHAN_INFO_SAMP_FREQ
:
959 *vals
= (const int *)data
->chip_info
->sampling_freq_avail
;
960 *type
= IIO_VAL_INT_PLUS_MICRO
;
961 /* Values are stored in a 2D matrix */
962 *length
= data
->chip_info
->num_sampling_freq_avail
;
963 return IIO_AVAIL_LIST
;
964 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY
:
965 *vals
= data
->chip_info
->iir_filter_coeffs_avail
;
967 *length
= data
->chip_info
->num_iir_filter_coeffs_avail
;
968 return IIO_AVAIL_LIST
;
974 static const struct iio_info bmp280_info
= {
975 .read_raw
= &bmp280_read_raw
,
976 .read_avail
= &bmp280_read_avail
,
977 .write_raw
= &bmp280_write_raw
,
980 static const unsigned long bmp280_avail_scan_masks
[] = {
981 BIT(BMP280_TEMP
) | BIT(BMP280_PRESS
),
985 static const unsigned long bme280_avail_scan_masks
[] = {
986 BIT(BME280_HUMID
) | BIT(BMP280_TEMP
) | BIT(BMP280_PRESS
),
990 static int bmp280_preinit(struct bmp280_data
*data
)
992 struct device
*dev
= data
->dev
;
996 ret
= regmap_write(data
->regmap
, BMP280_REG_RESET
, BMP280_RST_SOFT_CMD
);
998 return dev_err_probe(dev
, ret
, "Failed to reset device.\n");
1001 * According to the datasheet in Chapter 1: Specification, Table 2,
1002 * after resetting, the device uses the complete power-on sequence so
1003 * it needs to wait for the defined start-up time.
1005 fsleep(data
->start_up_time
);
1007 ret
= regmap_read(data
->regmap
, BMP280_REG_STATUS
, ®
);
1009 return dev_err_probe(dev
, ret
, "Failed to read status register.\n");
1011 if (reg
& BMP280_REG_STATUS_IM_UPDATE
)
1012 return dev_err_probe(dev
, -EIO
, "Failed to copy NVM contents.\n");
1017 static const u8 bmp280_operation_mode
[] = {
1018 [BMP280_SLEEP
] = BMP280_MODE_SLEEP
,
1019 [BMP280_FORCED
] = BMP280_MODE_FORCED
,
1020 [BMP280_NORMAL
] = BMP280_MODE_NORMAL
,
1023 static int bmp280_set_mode(struct bmp280_data
*data
, enum bmp280_op_mode mode
)
1027 ret
= regmap_write_bits(data
->regmap
, BMP280_REG_CTRL_MEAS
,
1028 BMP280_MODE_MASK
, bmp280_operation_mode
[mode
]);
1030 dev_err(data
->dev
, "failed to write ctrl_meas register.\n");
1034 data
->op_mode
= mode
;
1039 static int bmp280_wait_conv(struct bmp280_data
*data
)
1041 unsigned int reg
, meas_time_us
;
1044 /* Check if we are using a BME280 device */
1045 if (data
->oversampling_humid
)
1046 meas_time_us
= BMP280_PRESS_HUMID_MEAS_OFFSET
+
1047 BIT(data
->oversampling_humid
) * BMP280_MEAS_DUR
;
1052 /* Pressure measurement time */
1053 meas_time_us
+= BMP280_PRESS_HUMID_MEAS_OFFSET
+
1054 BIT(data
->oversampling_press
) * BMP280_MEAS_DUR
;
1056 /* Temperature measurement time */
1057 meas_time_us
+= BIT(data
->oversampling_temp
) * BMP280_MEAS_DUR
;
1059 /* Waiting time according to the BM(P/E)2 Sensor API */
1060 fsleep(meas_time_us
);
1062 ret
= regmap_read(data
->regmap
, BMP280_REG_STATUS
, ®
);
1064 dev_err(data
->dev
, "failed to read status register.\n");
1068 if (reg
& BMP280_REG_STATUS_MEAS_BIT
) {
1069 dev_err(data
->dev
, "Measurement cycle didn't complete.\n");
1076 static int bmp280_chip_config(struct bmp280_data
*data
)
1078 u8 osrs
= FIELD_PREP(BMP280_OSRS_TEMP_MASK
, data
->oversampling_temp
+ 1) |
1079 FIELD_PREP(BMP280_OSRS_PRESS_MASK
, data
->oversampling_press
+ 1);
1082 ret
= regmap_write_bits(data
->regmap
, BMP280_REG_CTRL_MEAS
,
1083 BMP280_OSRS_TEMP_MASK
|
1084 BMP280_OSRS_PRESS_MASK
|
1086 osrs
| BMP280_MODE_SLEEP
);
1088 dev_err(data
->dev
, "failed to write ctrl_meas register\n");
1092 ret
= regmap_update_bits(data
->regmap
, BMP280_REG_CONFIG
,
1096 dev_err(data
->dev
, "failed to write config register\n");
1103 static irqreturn_t
bmp280_trigger_handler(int irq
, void *p
)
1105 struct iio_poll_func
*pf
= p
;
1106 struct iio_dev
*indio_dev
= pf
->indio_dev
;
1107 struct bmp280_data
*data
= iio_priv(indio_dev
);
1108 u32 adc_temp
, adc_press
, comp_press
;
1109 s32 t_fine
, comp_temp
;
1110 s32
*chans
= (s32
*)data
->sensor_data
;
1113 guard(mutex
)(&data
->lock
);
1115 /* Burst read data registers */
1116 ret
= regmap_bulk_read(data
->regmap
, BMP280_REG_PRESS_MSB
,
1117 data
->buf
, BMP280_BURST_READ_BYTES
);
1119 dev_err(data
->dev
, "failed to burst read sensor data\n");
1123 /* Temperature calculations */
1124 adc_temp
= FIELD_GET(BMP280_MEAS_TRIM_MASK
, get_unaligned_be24(&data
->buf
[3]));
1125 if (adc_temp
== BMP280_TEMP_SKIPPED
) {
1126 dev_err(data
->dev
, "reading temperature skipped\n");
1130 comp_temp
= bmp280_compensate_temp(data
, adc_temp
);
1132 /* Pressure calculations */
1133 adc_press
= FIELD_GET(BMP280_MEAS_TRIM_MASK
, get_unaligned_be24(&data
->buf
[0]));
1134 if (adc_press
== BMP280_PRESS_SKIPPED
) {
1135 dev_err(data
->dev
, "reading pressure skipped\n");
1139 t_fine
= bmp280_calc_t_fine(data
, adc_temp
);
1140 comp_press
= bmp280_compensate_press(data
, adc_press
, t_fine
);
1142 chans
[0] = comp_press
;
1143 chans
[1] = comp_temp
;
1145 iio_push_to_buffers_with_timestamp(indio_dev
, data
->sensor_data
,
1146 iio_get_time_ns(indio_dev
));
1149 iio_trigger_notify_done(indio_dev
->trig
);
1154 static const int bmp280_oversampling_avail
[] = { 1, 2, 4, 8, 16 };
1155 static const u8 bmp280_chip_ids
[] = { BMP280_CHIP_ID
};
1156 static const int bmp280_temp_coeffs
[] = { 10, 1 };
1157 static const int bmp280_press_coeffs
[] = { 1, 256000 };
1159 const struct bmp280_chip_info bmp280_chip_info
= {
1160 .id_reg
= BMP280_REG_ID
,
1161 .chip_id
= bmp280_chip_ids
,
1162 .num_chip_id
= ARRAY_SIZE(bmp280_chip_ids
),
1163 .regmap_config
= &bmp280_regmap_config
,
1164 .start_up_time
= 2000,
1165 .channels
= bmp280_channels
,
1166 .num_channels
= ARRAY_SIZE(bmp280_channels
),
1167 .avail_scan_masks
= bmp280_avail_scan_masks
,
1169 .oversampling_temp_avail
= bmp280_oversampling_avail
,
1170 .num_oversampling_temp_avail
= ARRAY_SIZE(bmp280_oversampling_avail
),
1172 * Oversampling config values on BMx280 have one additional setting
1173 * that other generations of the family don't:
1174 * The value 0 means the measurement is bypassed instead of
1175 * oversampling set to x1.
1177 * To account for this difference, and preserve the same common
1178 * config logic, this is handled later on chip_config callback
1179 * incrementing one unit the oversampling setting.
1181 .oversampling_temp_default
= BMP280_OSRS_TEMP_2X
- 1,
1183 .oversampling_press_avail
= bmp280_oversampling_avail
,
1184 .num_oversampling_press_avail
= ARRAY_SIZE(bmp280_oversampling_avail
),
1185 .oversampling_press_default
= BMP280_OSRS_PRESS_16X
- 1,
1187 .temp_coeffs
= bmp280_temp_coeffs
,
1188 .temp_coeffs_type
= IIO_VAL_FRACTIONAL
,
1189 .press_coeffs
= bmp280_press_coeffs
,
1190 .press_coeffs_type
= IIO_VAL_FRACTIONAL
,
1192 .chip_config
= bmp280_chip_config
,
1193 .read_temp
= bmp280_read_temp
,
1194 .read_press
= bmp280_read_press
,
1195 .read_calib
= bmp280_read_calib
,
1196 .set_mode
= bmp280_set_mode
,
1197 .wait_conv
= bmp280_wait_conv
,
1198 .preinit
= bmp280_preinit
,
1200 .trigger_handler
= bmp280_trigger_handler
,
1202 EXPORT_SYMBOL_NS(bmp280_chip_info
, "IIO_BMP280");
1204 static int bme280_chip_config(struct bmp280_data
*data
)
1206 u8 osrs
= FIELD_PREP(BME280_OSRS_HUMIDITY_MASK
, data
->oversampling_humid
+ 1);
1210 * Oversampling of humidity must be set before oversampling of
1211 * temperature/pressure is set to become effective.
1213 ret
= regmap_update_bits(data
->regmap
, BME280_REG_CTRL_HUMIDITY
,
1214 BME280_OSRS_HUMIDITY_MASK
, osrs
);
1216 dev_err(data
->dev
, "failed to set humidity oversampling");
1220 return bmp280_chip_config(data
);
1223 static irqreturn_t
bme280_trigger_handler(int irq
, void *p
)
1225 struct iio_poll_func
*pf
= p
;
1226 struct iio_dev
*indio_dev
= pf
->indio_dev
;
1227 struct bmp280_data
*data
= iio_priv(indio_dev
);
1228 u32 adc_temp
, adc_press
, adc_humidity
, comp_press
, comp_humidity
;
1229 s32 t_fine
, comp_temp
;
1230 s32
*chans
= (s32
*)data
->sensor_data
;
1233 guard(mutex
)(&data
->lock
);
1235 /* Burst read data registers */
1236 ret
= regmap_bulk_read(data
->regmap
, BMP280_REG_PRESS_MSB
,
1237 data
->buf
, BME280_BURST_READ_BYTES
);
1239 dev_err(data
->dev
, "failed to burst read sensor data\n");
1243 /* Temperature calculations */
1244 adc_temp
= FIELD_GET(BMP280_MEAS_TRIM_MASK
, get_unaligned_be24(&data
->buf
[3]));
1245 if (adc_temp
== BMP280_TEMP_SKIPPED
) {
1246 dev_err(data
->dev
, "reading temperature skipped\n");
1250 comp_temp
= bmp280_compensate_temp(data
, adc_temp
);
1252 /* Pressure calculations */
1253 adc_press
= FIELD_GET(BMP280_MEAS_TRIM_MASK
, get_unaligned_be24(&data
->buf
[0]));
1254 if (adc_press
== BMP280_PRESS_SKIPPED
) {
1255 dev_err(data
->dev
, "reading pressure skipped\n");
1259 t_fine
= bmp280_calc_t_fine(data
, adc_temp
);
1260 comp_press
= bmp280_compensate_press(data
, adc_press
, t_fine
);
1262 /* Humidity calculations */
1263 adc_humidity
= get_unaligned_be16(&data
->buf
[6]);
1265 if (adc_humidity
== BMP280_HUMIDITY_SKIPPED
) {
1266 dev_err(data
->dev
, "reading humidity skipped\n");
1270 comp_humidity
= bme280_compensate_humidity(data
, adc_humidity
, t_fine
);
1272 chans
[0] = comp_press
;
1273 chans
[1] = comp_temp
;
1274 chans
[2] = comp_humidity
;
1276 iio_push_to_buffers_with_timestamp(indio_dev
, data
->sensor_data
,
1277 iio_get_time_ns(indio_dev
));
1280 iio_trigger_notify_done(indio_dev
->trig
);
1285 static int __bmp280_trigger_probe(struct iio_dev
*indio_dev
,
1286 const struct iio_trigger_ops
*trigger_ops
,
1287 int (*int_pin_config
)(struct bmp280_data
*data
),
1288 irq_handler_t irq_thread_handler
)
1290 struct bmp280_data
*data
= iio_priv(indio_dev
);
1291 struct device
*dev
= data
->dev
;
1295 irq
= fwnode_irq_get(dev_fwnode(dev
), 0);
1297 return dev_err_probe(dev
, irq
, "No interrupt found.\n");
1299 irq_type
= irq_get_trigger_type(irq
);
1301 case IRQF_TRIGGER_RISING
:
1302 data
->trig_active_high
= true;
1304 case IRQF_TRIGGER_FALLING
:
1305 data
->trig_active_high
= false;
1308 return dev_err_probe(dev
, -EINVAL
, "Invalid interrupt type specified.\n");
1311 data
->trig_open_drain
=
1312 fwnode_property_read_bool(dev_fwnode(dev
), "int-open-drain");
1314 ret
= int_pin_config(data
);
1318 data
->trig
= devm_iio_trigger_alloc(data
->dev
, "%s-dev%d",
1320 iio_device_id(indio_dev
));
1324 data
->trig
->ops
= trigger_ops
;
1325 iio_trigger_set_drvdata(data
->trig
, data
);
1327 ret
= devm_request_threaded_irq(data
->dev
, irq
, NULL
,
1328 irq_thread_handler
, IRQF_ONESHOT
,
1329 indio_dev
->name
, indio_dev
);
1331 return dev_err_probe(dev
, ret
, "request IRQ failed.\n");
1333 ret
= devm_iio_trigger_register(data
->dev
, data
->trig
);
1335 return dev_err_probe(dev
, ret
, "iio trigger register failed.\n");
1337 indio_dev
->trig
= iio_trigger_get(data
->trig
);
1342 static const u8 bme280_chip_ids
[] = { BME280_CHIP_ID
};
1343 static const int bme280_humid_coeffs
[] = { 1000, 1024 };
1345 const struct bmp280_chip_info bme280_chip_info
= {
1346 .id_reg
= BMP280_REG_ID
,
1347 .chip_id
= bme280_chip_ids
,
1348 .num_chip_id
= ARRAY_SIZE(bme280_chip_ids
),
1349 .regmap_config
= &bme280_regmap_config
,
1350 .start_up_time
= 2000,
1351 .channels
= bme280_channels
,
1352 .num_channels
= ARRAY_SIZE(bme280_channels
),
1353 .avail_scan_masks
= bme280_avail_scan_masks
,
1355 .oversampling_temp_avail
= bmp280_oversampling_avail
,
1356 .num_oversampling_temp_avail
= ARRAY_SIZE(bmp280_oversampling_avail
),
1357 .oversampling_temp_default
= BMP280_OSRS_TEMP_2X
- 1,
1359 .oversampling_press_avail
= bmp280_oversampling_avail
,
1360 .num_oversampling_press_avail
= ARRAY_SIZE(bmp280_oversampling_avail
),
1361 .oversampling_press_default
= BMP280_OSRS_PRESS_16X
- 1,
1363 .oversampling_humid_avail
= bmp280_oversampling_avail
,
1364 .num_oversampling_humid_avail
= ARRAY_SIZE(bmp280_oversampling_avail
),
1365 .oversampling_humid_default
= BME280_OSRS_HUMIDITY_16X
- 1,
1367 .temp_coeffs
= bmp280_temp_coeffs
,
1368 .temp_coeffs_type
= IIO_VAL_FRACTIONAL
,
1369 .press_coeffs
= bmp280_press_coeffs
,
1370 .press_coeffs_type
= IIO_VAL_FRACTIONAL
,
1371 .humid_coeffs
= bme280_humid_coeffs
,
1372 .humid_coeffs_type
= IIO_VAL_FRACTIONAL
,
1374 .chip_config
= bme280_chip_config
,
1375 .read_temp
= bmp280_read_temp
,
1376 .read_press
= bmp280_read_press
,
1377 .read_humid
= bme280_read_humid
,
1378 .read_calib
= bme280_read_calib
,
1379 .set_mode
= bmp280_set_mode
,
1380 .wait_conv
= bmp280_wait_conv
,
1381 .preinit
= bmp280_preinit
,
1383 .trigger_handler
= bme280_trigger_handler
,
1385 EXPORT_SYMBOL_NS(bme280_chip_info
, "IIO_BMP280");
1388 * Helper function to send a command to BMP3XX sensors.
1390 * Sensor processes commands written to the CMD register and signals
1391 * execution result through "cmd_rdy" and "cmd_error" flags available on
1392 * STATUS and ERROR registers.
1394 static int bmp380_cmd(struct bmp280_data
*data
, u8 cmd
)
1399 /* Check if device is ready to process a command */
1400 ret
= regmap_read(data
->regmap
, BMP380_REG_STATUS
, ®
);
1402 dev_err(data
->dev
, "failed to read error register\n");
1405 if (!(reg
& BMP380_STATUS_CMD_RDY_MASK
)) {
1406 dev_err(data
->dev
, "device is not ready to accept commands\n");
1410 /* Send command to process */
1411 ret
= regmap_write(data
->regmap
, BMP380_REG_CMD
, cmd
);
1413 dev_err(data
->dev
, "failed to send command to device\n");
1416 /* Wait for 2ms for command to be processed */
1417 usleep_range(data
->start_up_time
, data
->start_up_time
+ 100);
1418 /* Check for command processing error */
1419 ret
= regmap_read(data
->regmap
, BMP380_REG_ERROR
, ®
);
1421 dev_err(data
->dev
, "error reading ERROR reg\n");
1424 if (reg
& BMP380_ERR_CMD_MASK
) {
1425 dev_err(data
->dev
, "error processing command 0x%X\n", cmd
);
1432 static int bmp380_read_temp_adc(struct bmp280_data
*data
, u32
*adc_temp
)
1437 ret
= regmap_bulk_read(data
->regmap
, BMP380_REG_TEMP_XLSB
,
1438 data
->buf
, BMP280_NUM_TEMP_BYTES
);
1440 dev_err(data
->dev
, "failed to read temperature\n");
1444 value_temp
= get_unaligned_le24(data
->buf
);
1445 if (value_temp
== BMP380_TEMP_SKIPPED
) {
1446 dev_err(data
->dev
, "reading temperature skipped\n");
1449 *adc_temp
= value_temp
;
1455 * Returns temperature in Celsius degrees, resolution is 0.01º C. Output value
1456 * of "5123" equals 51.2º C. t_fine carries fine temperature as global value.
1458 * Taken from datasheet, Section Appendix 9, "Compensation formula" and repo
1459 * https://github.com/BoschSensortec/BMP3-Sensor-API.
1461 static s32
bmp380_calc_t_fine(struct bmp280_data
*data
, u32 adc_temp
)
1463 s64 var1
, var2
, var3
, var4
, var5
, var6
;
1464 struct bmp380_calib
*calib
= &data
->calib
.bmp380
;
1466 var1
= ((s64
) adc_temp
) - (((s64
) calib
->T1
) << 8);
1467 var2
= var1
* ((s64
) calib
->T2
);
1469 var4
= var3
* ((s64
) calib
->T3
);
1470 var5
= (var2
<< 18) + var4
;
1472 return (s32
)var6
; /* t_fine = var6 */
1475 static int bmp380_get_t_fine(struct bmp280_data
*data
, s32
*t_fine
)
1480 ret
= bmp380_read_temp_adc(data
, &adc_temp
);
1484 *t_fine
= bmp380_calc_t_fine(data
, adc_temp
);
1489 static int bmp380_compensate_temp(struct bmp280_data
*data
, u32 adc_temp
)
1494 var6
= bmp380_calc_t_fine(data
, adc_temp
);
1495 comp_temp
= (var6
* 25) >> 14;
1497 comp_temp
= clamp_val(comp_temp
, BMP380_MIN_TEMP
, BMP380_MAX_TEMP
);
1498 return (s32
) comp_temp
;
1501 static int bmp380_read_press_adc(struct bmp280_data
*data
, u32
*adc_press
)
1506 ret
= regmap_bulk_read(data
->regmap
, BMP380_REG_PRESS_XLSB
,
1507 data
->buf
, BMP280_NUM_PRESS_BYTES
);
1509 dev_err(data
->dev
, "failed to read pressure\n");
1513 value_press
= get_unaligned_le24(data
->buf
);
1514 if (value_press
== BMP380_PRESS_SKIPPED
) {
1515 dev_err(data
->dev
, "reading pressure skipped\n");
1518 *adc_press
= value_press
;
1524 * Returns pressure in Pa as an unsigned 32 bit integer in fractional Pascal.
1525 * Output value of "9528709" represents 9528709/100 = 95287.09 Pa = 952.8709 hPa.
1527 * Taken from datasheet, Section 9.3. "Pressure compensation" and repository
1528 * https://github.com/BoschSensortec/BMP3-Sensor-API.
1530 static u32
bmp380_compensate_press(struct bmp280_data
*data
,
1531 u32 adc_press
, s32 t_fine
)
1533 s64 var1
, var2
, var3
, var4
, var5
, var6
, offset
, sensitivity
;
1534 struct bmp380_calib
*calib
= &data
->calib
.bmp380
;
1537 var1
= (s64
)t_fine
* (s64
)t_fine
;
1539 var3
= (var2
* ((s64
)t_fine
)) >> 8;
1540 var4
= ((s64
)calib
->P8
* var3
) >> 5;
1541 var5
= ((s64
)calib
->P7
* var1
) << 4;
1542 var6
= ((s64
)calib
->P6
* (s64
)t_fine
) << 22;
1543 offset
= ((s64
)calib
->P5
<< 47) + var4
+ var5
+ var6
;
1544 var2
= ((s64
)calib
->P4
* var3
) >> 5;
1545 var4
= ((s64
)calib
->P3
* var1
) << 2;
1546 var5
= ((s64
)calib
->P2
- ((s64
)1 << 14)) *
1547 ((s64
)t_fine
<< 21);
1548 sensitivity
= (((s64
) calib
->P1
- ((s64
) 1 << 14)) << 46) +
1550 var1
= (sensitivity
>> 24) * (s64
)adc_press
;
1551 var2
= (s64
)calib
->P10
* (s64
)t_fine
;
1552 var3
= var2
+ ((s64
)calib
->P9
<< 16);
1553 var4
= (var3
* (s64
)adc_press
) >> 13;
1556 * Dividing by 10 followed by multiplying by 10 to avoid
1557 * possible overflow caused by (uncomp_data->pressure * partial_data4).
1559 var5
= ((s64
)adc_press
* div_s64(var4
, 10)) >> 9;
1561 var6
= (s64
)adc_press
* (s64
)adc_press
;
1562 var2
= ((s64
)calib
->P11
* var6
) >> 16;
1563 var3
= (var2
* (s64
)adc_press
) >> 7;
1564 var4
= (offset
>> 2) + var1
+ var5
+ var3
;
1565 comp_press
= ((u64
)var4
* 25) >> 40;
1567 comp_press
= clamp_val(comp_press
, BMP380_MIN_PRES
, BMP380_MAX_PRES
);
1571 static int bmp380_read_temp(struct bmp280_data
*data
, s32
*comp_temp
)
1576 ret
= bmp380_read_temp_adc(data
, &adc_temp
);
1580 *comp_temp
= bmp380_compensate_temp(data
, adc_temp
);
1585 static int bmp380_read_press(struct bmp280_data
*data
, u32
*comp_press
)
1587 u32 adc_press
, t_fine
;
1590 ret
= bmp380_get_t_fine(data
, &t_fine
);
1594 ret
= bmp380_read_press_adc(data
, &adc_press
);
1598 *comp_press
= bmp380_compensate_press(data
, adc_press
, t_fine
);
1603 static int bmp380_read_calib(struct bmp280_data
*data
)
1605 struct bmp380_calib
*calib
= &data
->calib
.bmp380
;
1608 /* Read temperature and pressure calibration data */
1609 ret
= regmap_bulk_read(data
->regmap
, BMP380_REG_CALIB_TEMP_START
,
1610 data
->bmp380_cal_buf
,
1611 sizeof(data
->bmp380_cal_buf
));
1614 "failed to read calibration parameters\n");
1618 /* Toss the temperature calibration data into the entropy pool */
1619 add_device_randomness(data
->bmp380_cal_buf
,
1620 sizeof(data
->bmp380_cal_buf
));
1622 /* Parse calibration values */
1623 calib
->T1
= get_unaligned_le16(&data
->bmp380_cal_buf
[BMP380_T1
]);
1624 calib
->T2
= get_unaligned_le16(&data
->bmp380_cal_buf
[BMP380_T2
]);
1625 calib
->T3
= data
->bmp380_cal_buf
[BMP380_T3
];
1626 calib
->P1
= get_unaligned_le16(&data
->bmp380_cal_buf
[BMP380_P1
]);
1627 calib
->P2
= get_unaligned_le16(&data
->bmp380_cal_buf
[BMP380_P2
]);
1628 calib
->P3
= data
->bmp380_cal_buf
[BMP380_P3
];
1629 calib
->P4
= data
->bmp380_cal_buf
[BMP380_P4
];
1630 calib
->P5
= get_unaligned_le16(&data
->bmp380_cal_buf
[BMP380_P5
]);
1631 calib
->P6
= get_unaligned_le16(&data
->bmp380_cal_buf
[BMP380_P6
]);
1632 calib
->P7
= data
->bmp380_cal_buf
[BMP380_P7
];
1633 calib
->P8
= data
->bmp380_cal_buf
[BMP380_P8
];
1634 calib
->P9
= get_unaligned_le16(&data
->bmp380_cal_buf
[BMP380_P9
]);
1635 calib
->P10
= data
->bmp380_cal_buf
[BMP380_P10
];
1636 calib
->P11
= data
->bmp380_cal_buf
[BMP380_P11
];
1641 static const int bmp380_odr_table
[][2] = {
1642 [BMP380_ODR_200HZ
] = {200, 0},
1643 [BMP380_ODR_100HZ
] = {100, 0},
1644 [BMP380_ODR_50HZ
] = {50, 0},
1645 [BMP380_ODR_25HZ
] = {25, 0},
1646 [BMP380_ODR_12_5HZ
] = {12, 500000},
1647 [BMP380_ODR_6_25HZ
] = {6, 250000},
1648 [BMP380_ODR_3_125HZ
] = {3, 125000},
1649 [BMP380_ODR_1_5625HZ
] = {1, 562500},
1650 [BMP380_ODR_0_78HZ
] = {0, 781250},
1651 [BMP380_ODR_0_39HZ
] = {0, 390625},
1652 [BMP380_ODR_0_2HZ
] = {0, 195313},
1653 [BMP380_ODR_0_1HZ
] = {0, 97656},
1654 [BMP380_ODR_0_05HZ
] = {0, 48828},
1655 [BMP380_ODR_0_02HZ
] = {0, 24414},
1656 [BMP380_ODR_0_01HZ
] = {0, 12207},
1657 [BMP380_ODR_0_006HZ
] = {0, 6104},
1658 [BMP380_ODR_0_003HZ
] = {0, 3052},
1659 [BMP380_ODR_0_0015HZ
] = {0, 1526},
1662 static int bmp380_preinit(struct bmp280_data
*data
)
1664 /* BMP3xx requires soft-reset as part of initialization */
1665 return bmp380_cmd(data
, BMP380_CMD_SOFT_RESET
);
1668 static const u8 bmp380_operation_mode
[] = {
1669 [BMP280_SLEEP
] = BMP380_MODE_SLEEP
,
1670 [BMP280_FORCED
] = BMP380_MODE_FORCED
,
1671 [BMP280_NORMAL
] = BMP380_MODE_NORMAL
,
1674 static int bmp380_set_mode(struct bmp280_data
*data
, enum bmp280_op_mode mode
)
1678 ret
= regmap_write_bits(data
->regmap
, BMP380_REG_POWER_CONTROL
,
1680 FIELD_PREP(BMP380_MODE_MASK
,
1681 bmp380_operation_mode
[mode
]));
1683 dev_err(data
->dev
, "failed to write power control register.\n");
1687 data
->op_mode
= mode
;
1692 static int bmp380_wait_conv(struct bmp280_data
*data
)
1695 int ret
, meas_time_us
;
1697 /* Offset measurement time */
1698 meas_time_us
= BMP380_MEAS_OFFSET
;
1700 /* Pressure measurement time */
1701 meas_time_us
+= BMP380_PRESS_MEAS_OFFSET
+
1702 BIT(data
->oversampling_press
) * BMP380_MEAS_DUR
;
1704 /* Temperature measurement time */
1705 meas_time_us
+= BMP380_TEMP_MEAS_OFFSET
+
1706 BIT(data
->oversampling_temp
) * BMP380_MEAS_DUR
;
1708 /* Measurement time defined in Datasheet Section 3.9.2 */
1709 fsleep(meas_time_us
);
1711 ret
= regmap_read(data
->regmap
, BMP380_REG_STATUS
, ®
);
1713 dev_err(data
->dev
, "failed to read status register.\n");
1717 if (!((reg
& BMP380_STATUS_DRDY_PRESS_MASK
) &&
1718 (reg
& BMP380_STATUS_DRDY_TEMP_MASK
))) {
1719 dev_err(data
->dev
, "Measurement cycle didn't complete.\n");
1726 static int bmp380_chip_config(struct bmp280_data
*data
)
1728 bool change
= false, aux
;
1733 /* Configure power control register */
1734 ret
= regmap_update_bits(data
->regmap
, BMP380_REG_POWER_CONTROL
,
1735 BMP380_CTRL_SENSORS_MASK
,
1736 BMP380_CTRL_SENSORS_PRESS_EN
|
1737 BMP380_CTRL_SENSORS_TEMP_EN
);
1740 "failed to write operation control register\n");
1744 /* Configure oversampling */
1745 osrs
= FIELD_PREP(BMP380_OSRS_TEMP_MASK
, data
->oversampling_temp
) |
1746 FIELD_PREP(BMP380_OSRS_PRESS_MASK
, data
->oversampling_press
);
1748 ret
= regmap_update_bits_check(data
->regmap
, BMP380_REG_OSR
,
1749 BMP380_OSRS_TEMP_MASK
|
1750 BMP380_OSRS_PRESS_MASK
,
1753 dev_err(data
->dev
, "failed to write oversampling register\n");
1756 change
= change
|| aux
;
1758 /* Configure output data rate */
1759 ret
= regmap_update_bits_check(data
->regmap
, BMP380_REG_ODR
,
1760 BMP380_ODRS_MASK
, data
->sampling_freq
,
1763 dev_err(data
->dev
, "failed to write ODR selection register\n");
1766 change
= change
|| aux
;
1768 /* Set filter data */
1769 ret
= regmap_update_bits(data
->regmap
, BMP380_REG_CONFIG
, BMP380_FILTER_MASK
,
1770 FIELD_PREP(BMP380_FILTER_MASK
, data
->iir_filter_coeff
));
1772 dev_err(data
->dev
, "failed to write config register\n");
1778 * The configurations errors are detected on the fly during a
1779 * measurement cycle. If the sampling frequency is too low, it's
1780 * faster to reset the measurement loop than wait until the next
1781 * measurement is due.
1783 * Resets sensor measurement loop toggling between sleep and
1784 * normal operating modes.
1786 ret
= bmp380_set_mode(data
, BMP280_SLEEP
);
1788 dev_err(data
->dev
, "failed to set sleep mode\n");
1793 * According to the BMP3 Sensor API, the sensor needs 5ms
1794 * in order to go to the sleep mode.
1796 fsleep(5 * USEC_PER_MSEC
);
1798 ret
= bmp380_set_mode(data
, BMP280_NORMAL
);
1800 dev_err(data
->dev
, "failed to set normal mode\n");
1804 * Waits for measurement before checking configuration error
1805 * flag. Selected longest measurement time, calculated from
1806 * formula in datasheet section 3.9.2 with an offset of ~+15%
1807 * as it seen as well in table 3.9.1.
1811 /* Check config error flag */
1812 ret
= regmap_read(data
->regmap
, BMP380_REG_ERROR
, &tmp
);
1814 dev_err(data
->dev
, "failed to read error register\n");
1817 if (tmp
& BMP380_ERR_CONF_MASK
) {
1819 "sensor flagged configuration as incompatible\n");
1824 /* Dummy read to empty data registers. */
1825 ret
= bmp380_read_press(data
, &tmp
);
1829 ret
= bmp380_set_mode(data
, BMP280_SLEEP
);
1831 dev_err(data
->dev
, "failed to set sleep mode.\n");
1836 static int bmp380_data_rdy_trigger_set_state(struct iio_trigger
*trig
,
1839 struct bmp280_data
*data
= iio_trigger_get_drvdata(trig
);
1842 guard(mutex
)(&data
->lock
);
1844 ret
= regmap_update_bits(data
->regmap
, BMP380_REG_INT_CONTROL
,
1845 BMP380_INT_CTRL_DRDY_EN
,
1846 FIELD_PREP(BMP380_INT_CTRL_DRDY_EN
, !!state
));
1849 "Could not %s interrupt.\n", str_enable_disable(state
));
1853 static const struct iio_trigger_ops bmp380_trigger_ops
= {
1854 .set_trigger_state
= &bmp380_data_rdy_trigger_set_state
,
1857 static int bmp380_int_pin_config(struct bmp280_data
*data
)
1859 int pin_drive_cfg
= FIELD_PREP(BMP380_INT_CTRL_OPEN_DRAIN
,
1860 data
->trig_open_drain
);
1861 int pin_level_cfg
= FIELD_PREP(BMP380_INT_CTRL_LEVEL
,
1862 data
->trig_active_high
);
1863 int ret
, int_pin_cfg
= pin_drive_cfg
| pin_level_cfg
;
1865 ret
= regmap_update_bits(data
->regmap
, BMP380_REG_INT_CONTROL
,
1866 BMP380_INT_CTRL_SETTINGS_MASK
, int_pin_cfg
);
1868 dev_err(data
->dev
, "Could not set interrupt settings.\n");
1873 static irqreturn_t
bmp380_irq_thread_handler(int irq
, void *p
)
1875 struct iio_dev
*indio_dev
= p
;
1876 struct bmp280_data
*data
= iio_priv(indio_dev
);
1877 unsigned int int_ctrl
;
1880 ret
= regmap_read(data
->regmap
, BMP380_REG_INT_STATUS
, &int_ctrl
);
1884 if (FIELD_GET(BMP380_INT_STATUS_DRDY
, int_ctrl
))
1885 iio_trigger_poll_nested(data
->trig
);
1890 static int bmp380_trigger_probe(struct iio_dev
*indio_dev
)
1892 return __bmp280_trigger_probe(indio_dev
, &bmp380_trigger_ops
,
1893 bmp380_int_pin_config
,
1894 bmp380_irq_thread_handler
);
1897 static irqreturn_t
bmp380_trigger_handler(int irq
, void *p
)
1899 struct iio_poll_func
*pf
= p
;
1900 struct iio_dev
*indio_dev
= pf
->indio_dev
;
1901 struct bmp280_data
*data
= iio_priv(indio_dev
);
1902 u32 adc_temp
, adc_press
, comp_press
;
1903 s32 t_fine
, comp_temp
;
1904 s32
*chans
= (s32
*)data
->sensor_data
;
1907 guard(mutex
)(&data
->lock
);
1909 /* Burst read data registers */
1910 ret
= regmap_bulk_read(data
->regmap
, BMP380_REG_PRESS_XLSB
,
1911 data
->buf
, BMP280_BURST_READ_BYTES
);
1913 dev_err(data
->dev
, "failed to burst read sensor data\n");
1917 /* Temperature calculations */
1918 adc_temp
= get_unaligned_le24(&data
->buf
[3]);
1919 if (adc_temp
== BMP380_TEMP_SKIPPED
) {
1920 dev_err(data
->dev
, "reading temperature skipped\n");
1924 comp_temp
= bmp380_compensate_temp(data
, adc_temp
);
1926 /* Pressure calculations */
1927 adc_press
= get_unaligned_le24(&data
->buf
[0]);
1928 if (adc_press
== BMP380_PRESS_SKIPPED
) {
1929 dev_err(data
->dev
, "reading pressure skipped\n");
1933 t_fine
= bmp380_calc_t_fine(data
, adc_temp
);
1934 comp_press
= bmp380_compensate_press(data
, adc_press
, t_fine
);
1936 chans
[0] = comp_press
;
1937 chans
[1] = comp_temp
;
1939 iio_push_to_buffers_with_timestamp(indio_dev
, data
->sensor_data
,
1940 iio_get_time_ns(indio_dev
));
1943 iio_trigger_notify_done(indio_dev
->trig
);
1948 static const int bmp380_oversampling_avail
[] = { 1, 2, 4, 8, 16, 32 };
1949 static const int bmp380_iir_filter_coeffs_avail
[] = { 1, 2, 4, 8, 16, 32, 64, 128};
1950 static const u8 bmp380_chip_ids
[] = { BMP380_CHIP_ID
, BMP390_CHIP_ID
};
1951 static const int bmp380_temp_coeffs
[] = { 10, 1 };
1952 static const int bmp380_press_coeffs
[] = { 1, 100000 };
1954 const struct bmp280_chip_info bmp380_chip_info
= {
1955 .id_reg
= BMP380_REG_ID
,
1956 .chip_id
= bmp380_chip_ids
,
1957 .num_chip_id
= ARRAY_SIZE(bmp380_chip_ids
),
1958 .regmap_config
= &bmp380_regmap_config
,
1959 .spi_read_extra_byte
= true,
1960 .start_up_time
= 2000,
1961 .channels
= bmp380_channels
,
1962 .num_channels
= ARRAY_SIZE(bmp380_channels
),
1963 .avail_scan_masks
= bmp280_avail_scan_masks
,
1965 .oversampling_temp_avail
= bmp380_oversampling_avail
,
1966 .num_oversampling_temp_avail
= ARRAY_SIZE(bmp380_oversampling_avail
),
1967 .oversampling_temp_default
= ilog2(1),
1969 .oversampling_press_avail
= bmp380_oversampling_avail
,
1970 .num_oversampling_press_avail
= ARRAY_SIZE(bmp380_oversampling_avail
),
1971 .oversampling_press_default
= ilog2(4),
1973 .sampling_freq_avail
= bmp380_odr_table
,
1974 .num_sampling_freq_avail
= ARRAY_SIZE(bmp380_odr_table
) * 2,
1975 .sampling_freq_default
= BMP380_ODR_50HZ
,
1977 .iir_filter_coeffs_avail
= bmp380_iir_filter_coeffs_avail
,
1978 .num_iir_filter_coeffs_avail
= ARRAY_SIZE(bmp380_iir_filter_coeffs_avail
),
1979 .iir_filter_coeff_default
= 2,
1981 .temp_coeffs
= bmp380_temp_coeffs
,
1982 .temp_coeffs_type
= IIO_VAL_FRACTIONAL
,
1983 .press_coeffs
= bmp380_press_coeffs
,
1984 .press_coeffs_type
= IIO_VAL_FRACTIONAL
,
1986 .chip_config
= bmp380_chip_config
,
1987 .read_temp
= bmp380_read_temp
,
1988 .read_press
= bmp380_read_press
,
1989 .read_calib
= bmp380_read_calib
,
1990 .set_mode
= bmp380_set_mode
,
1991 .wait_conv
= bmp380_wait_conv
,
1992 .preinit
= bmp380_preinit
,
1994 .trigger_probe
= bmp380_trigger_probe
,
1995 .trigger_handler
= bmp380_trigger_handler
,
1997 EXPORT_SYMBOL_NS(bmp380_chip_info
, "IIO_BMP280");
1999 static int bmp580_soft_reset(struct bmp280_data
*data
)
2004 ret
= regmap_write(data
->regmap
, BMP580_REG_CMD
, BMP580_CMD_SOFT_RESET
);
2006 dev_err(data
->dev
, "failed to send reset command to device\n");
2009 usleep_range(2000, 2500);
2011 /* Dummy read of chip_id */
2012 ret
= regmap_read(data
->regmap
, BMP580_REG_CHIP_ID
, ®
);
2014 dev_err(data
->dev
, "failed to reestablish comms after reset\n");
2018 ret
= regmap_read(data
->regmap
, BMP580_REG_INT_STATUS
, ®
);
2020 dev_err(data
->dev
, "error reading interrupt status register\n");
2023 if (!(reg
& BMP580_INT_STATUS_POR_MASK
)) {
2024 dev_err(data
->dev
, "error resetting sensor\n");
2032 * bmp580_nvm_operation() - Helper function to commit NVM memory operations
2033 * @data: sensor data struct
2034 * @is_write: flag to signal write operation
2036 static int bmp580_nvm_operation(struct bmp280_data
*data
, bool is_write
)
2038 unsigned long timeout
, poll
;
2042 /* Check NVM ready flag */
2043 ret
= regmap_read(data
->regmap
, BMP580_REG_STATUS
, ®
);
2045 dev_err(data
->dev
, "failed to check nvm status\n");
2048 if (!(reg
& BMP580_STATUS_NVM_RDY_MASK
)) {
2049 dev_err(data
->dev
, "sensor's nvm is not ready\n");
2053 /* Start NVM operation sequence */
2054 ret
= regmap_write(data
->regmap
, BMP580_REG_CMD
,
2055 BMP580_CMD_NVM_OP_SEQ_0
);
2058 "failed to send nvm operation's first sequence\n");
2062 /* Send NVM write sequence */
2063 ret
= regmap_write(data
->regmap
, BMP580_REG_CMD
,
2064 BMP580_CMD_NVM_WRITE_SEQ_1
);
2067 "failed to send nvm write sequence\n");
2070 /* Datasheet says on 4.8.1.2 it takes approximately 10ms */
2074 /* Send NVM read sequence */
2075 ret
= regmap_write(data
->regmap
, BMP580_REG_CMD
,
2076 BMP580_CMD_NVM_READ_SEQ_1
);
2079 "failed to send nvm read sequence\n");
2082 /* Datasheet says on 4.8.1.1 it takes approximately 200us */
2087 /* Wait until NVM is ready again */
2088 ret
= regmap_read_poll_timeout(data
->regmap
, BMP580_REG_STATUS
, reg
,
2089 (reg
& BMP580_STATUS_NVM_RDY_MASK
),
2092 dev_err(data
->dev
, "error checking nvm operation status\n");
2096 /* Check NVM error flags */
2097 if ((reg
& BMP580_STATUS_NVM_ERR_MASK
) || (reg
& BMP580_STATUS_NVM_CMD_ERR_MASK
)) {
2098 dev_err(data
->dev
, "error processing nvm operation\n");
2106 * Contrary to previous sensors families, compensation algorithm is builtin.
2107 * We are only required to read the register raw data and adapt the ranges
2108 * for what is expected on IIO ABI.
2111 static int bmp580_read_temp(struct bmp280_data
*data
, s32
*raw_temp
)
2116 ret
= regmap_bulk_read(data
->regmap
, BMP580_REG_TEMP_XLSB
,
2117 data
->buf
, BMP280_NUM_TEMP_BYTES
);
2119 dev_err(data
->dev
, "failed to read temperature\n");
2123 value_temp
= get_unaligned_le24(data
->buf
);
2124 if (value_temp
== BMP580_TEMP_SKIPPED
) {
2125 dev_err(data
->dev
, "reading temperature skipped\n");
2128 *raw_temp
= sign_extend32(value_temp
, 23);
2133 static int bmp580_read_press(struct bmp280_data
*data
, u32
*raw_press
)
2138 ret
= regmap_bulk_read(data
->regmap
, BMP580_REG_PRESS_XLSB
,
2139 data
->buf
, BMP280_NUM_PRESS_BYTES
);
2141 dev_err(data
->dev
, "failed to read pressure\n");
2145 value_press
= get_unaligned_le24(data
->buf
);
2146 if (value_press
== BMP580_PRESS_SKIPPED
) {
2147 dev_err(data
->dev
, "reading pressure skipped\n");
2150 *raw_press
= value_press
;
2155 static const int bmp580_odr_table
[][2] = {
2156 [BMP580_ODR_240HZ
] = {240, 0},
2157 [BMP580_ODR_218HZ
] = {218, 0},
2158 [BMP580_ODR_199HZ
] = {199, 0},
2159 [BMP580_ODR_179HZ
] = {179, 0},
2160 [BMP580_ODR_160HZ
] = {160, 0},
2161 [BMP580_ODR_149HZ
] = {149, 0},
2162 [BMP580_ODR_140HZ
] = {140, 0},
2163 [BMP580_ODR_129HZ
] = {129, 0},
2164 [BMP580_ODR_120HZ
] = {120, 0},
2165 [BMP580_ODR_110HZ
] = {110, 0},
2166 [BMP580_ODR_100HZ
] = {100, 0},
2167 [BMP580_ODR_89HZ
] = {89, 0},
2168 [BMP580_ODR_80HZ
] = {80, 0},
2169 [BMP580_ODR_70HZ
] = {70, 0},
2170 [BMP580_ODR_60HZ
] = {60, 0},
2171 [BMP580_ODR_50HZ
] = {50, 0},
2172 [BMP580_ODR_45HZ
] = {45, 0},
2173 [BMP580_ODR_40HZ
] = {40, 0},
2174 [BMP580_ODR_35HZ
] = {35, 0},
2175 [BMP580_ODR_30HZ
] = {30, 0},
2176 [BMP580_ODR_25HZ
] = {25, 0},
2177 [BMP580_ODR_20HZ
] = {20, 0},
2178 [BMP580_ODR_15HZ
] = {15, 0},
2179 [BMP580_ODR_10HZ
] = {10, 0},
2180 [BMP580_ODR_5HZ
] = {5, 0},
2181 [BMP580_ODR_4HZ
] = {4, 0},
2182 [BMP580_ODR_3HZ
] = {3, 0},
2183 [BMP580_ODR_2HZ
] = {2, 0},
2184 [BMP580_ODR_1HZ
] = {1, 0},
2185 [BMP580_ODR_0_5HZ
] = {0, 500000},
2186 [BMP580_ODR_0_25HZ
] = {0, 250000},
2187 [BMP580_ODR_0_125HZ
] = {0, 125000},
2190 static const int bmp580_nvmem_addrs
[] = { 0x20, 0x21, 0x22 };
2192 static int bmp580_nvmem_read_impl(void *priv
, unsigned int offset
, void *val
,
2195 struct bmp280_data
*data
= priv
;
2199 guard(mutex
)(&data
->lock
);
2201 /* Set sensor in standby mode */
2202 ret
= regmap_update_bits(data
->regmap
, BMP580_REG_ODR_CONFIG
,
2203 BMP580_MODE_MASK
| BMP580_ODR_DEEPSLEEP_DIS
,
2204 BMP580_ODR_DEEPSLEEP_DIS
|
2205 FIELD_PREP(BMP580_MODE_MASK
, BMP580_MODE_SLEEP
));
2207 dev_err(data
->dev
, "failed to change sensor to standby mode\n");
2210 /* Wait standby transition time */
2211 usleep_range(2500, 3000);
2213 while (bytes
>= sizeof(*dst
)) {
2214 addr
= bmp580_nvmem_addrs
[offset
/ sizeof(*dst
)];
2216 ret
= regmap_write(data
->regmap
, BMP580_REG_NVM_ADDR
,
2217 FIELD_PREP(BMP580_NVM_ROW_ADDR_MASK
, addr
));
2219 dev_err(data
->dev
, "error writing nvm address\n");
2223 ret
= bmp580_nvm_operation(data
, false);
2227 ret
= regmap_bulk_read(data
->regmap
, BMP580_REG_NVM_DATA_LSB
,
2228 &data
->le16
, sizeof(data
->le16
));
2230 dev_err(data
->dev
, "error reading nvm data regs\n");
2234 *dst
++ = le16_to_cpu(data
->le16
);
2235 bytes
-= sizeof(*dst
);
2236 offset
+= sizeof(*dst
);
2239 /* Restore chip config */
2240 data
->chip_info
->chip_config(data
);
2244 static int bmp580_nvmem_read(void *priv
, unsigned int offset
, void *val
,
2247 struct bmp280_data
*data
= priv
;
2250 pm_runtime_get_sync(data
->dev
);
2251 ret
= bmp580_nvmem_read_impl(priv
, offset
, val
, bytes
);
2252 pm_runtime_mark_last_busy(data
->dev
);
2253 pm_runtime_put_autosuspend(data
->dev
);
2258 static int bmp580_nvmem_write_impl(void *priv
, unsigned int offset
, void *val
,
2261 struct bmp280_data
*data
= priv
;
2265 guard(mutex
)(&data
->lock
);
2267 /* Set sensor in standby mode */
2268 ret
= regmap_update_bits(data
->regmap
, BMP580_REG_ODR_CONFIG
,
2269 BMP580_MODE_MASK
| BMP580_ODR_DEEPSLEEP_DIS
,
2270 BMP580_ODR_DEEPSLEEP_DIS
|
2271 FIELD_PREP(BMP580_MODE_MASK
, BMP580_MODE_SLEEP
));
2273 dev_err(data
->dev
, "failed to change sensor to standby mode\n");
2276 /* Wait standby transition time */
2277 usleep_range(2500, 3000);
2279 while (bytes
>= sizeof(*buf
)) {
2280 addr
= bmp580_nvmem_addrs
[offset
/ sizeof(*buf
)];
2282 ret
= regmap_write(data
->regmap
, BMP580_REG_NVM_ADDR
,
2283 BMP580_NVM_PROG_EN
|
2284 FIELD_PREP(BMP580_NVM_ROW_ADDR_MASK
, addr
));
2286 dev_err(data
->dev
, "error writing nvm address\n");
2289 data
->le16
= cpu_to_le16(*buf
++);
2291 ret
= regmap_bulk_write(data
->regmap
, BMP580_REG_NVM_DATA_LSB
,
2292 &data
->le16
, sizeof(data
->le16
));
2294 dev_err(data
->dev
, "error writing LSB NVM data regs\n");
2298 ret
= bmp580_nvm_operation(data
, true);
2302 /* Disable programming mode bit */
2303 ret
= regmap_clear_bits(data
->regmap
, BMP580_REG_NVM_ADDR
,
2304 BMP580_NVM_PROG_EN
);
2306 dev_err(data
->dev
, "error resetting nvm write\n");
2310 bytes
-= sizeof(*buf
);
2311 offset
+= sizeof(*buf
);
2314 /* Restore chip config */
2315 data
->chip_info
->chip_config(data
);
2319 static int bmp580_nvmem_write(void *priv
, unsigned int offset
, void *val
,
2322 struct bmp280_data
*data
= priv
;
2325 pm_runtime_get_sync(data
->dev
);
2326 ret
= bmp580_nvmem_write_impl(priv
, offset
, val
, bytes
);
2327 pm_runtime_mark_last_busy(data
->dev
);
2328 pm_runtime_put_autosuspend(data
->dev
);
2333 static int bmp580_preinit(struct bmp280_data
*data
)
2335 struct nvmem_config config
= {
2338 .name
= "bmp580_nvmem",
2339 .word_size
= sizeof(u16
),
2340 .stride
= sizeof(u16
),
2341 .size
= 3 * sizeof(u16
),
2342 .reg_read
= bmp580_nvmem_read
,
2343 .reg_write
= bmp580_nvmem_write
,
2348 /* Issue soft-reset command */
2349 ret
= bmp580_soft_reset(data
);
2353 /* Post powerup sequence */
2354 ret
= regmap_read(data
->regmap
, BMP580_REG_CHIP_ID
, ®
);
2356 dev_err(data
->dev
, "failed to establish comms with the chip\n");
2360 /* Print warn message if we don't know the chip id */
2361 if (reg
!= BMP580_CHIP_ID
&& reg
!= BMP580_CHIP_ID_ALT
)
2362 dev_warn(data
->dev
, "unexpected chip_id\n");
2364 ret
= regmap_read(data
->regmap
, BMP580_REG_STATUS
, ®
);
2366 dev_err(data
->dev
, "failed to read nvm status\n");
2370 /* Check nvm status */
2371 if (!(reg
& BMP580_STATUS_NVM_RDY_MASK
) || (reg
& BMP580_STATUS_NVM_ERR_MASK
)) {
2372 dev_err(data
->dev
, "nvm error on powerup sequence\n");
2376 /* Register nvmem device */
2377 return PTR_ERR_OR_ZERO(devm_nvmem_register(config
.dev
, &config
));
2380 static const u8 bmp580_operation_mode
[] = {
2381 [BMP280_SLEEP
] = BMP580_MODE_SLEEP
,
2382 [BMP280_FORCED
] = BMP580_MODE_FORCED
,
2383 [BMP280_NORMAL
] = BMP580_MODE_NORMAL
,
2386 static int bmp580_set_mode(struct bmp280_data
*data
, enum bmp280_op_mode mode
)
2388 struct device
*dev
= data
->dev
;
2391 if (mode
== BMP280_FORCED
) {
2392 ret
= regmap_set_bits(data
->regmap
, BMP580_REG_DSP_CONFIG
,
2393 BMP580_DSP_IIR_FORCED_FLUSH
);
2395 dev_err(dev
, "Could not flush IIR filter constants.\n");
2400 ret
= regmap_write_bits(data
->regmap
, BMP580_REG_ODR_CONFIG
,
2402 FIELD_PREP(BMP580_MODE_MASK
,
2403 bmp580_operation_mode
[mode
]));
2405 dev_err(dev
, "failed to write power control register.\n");
2409 data
->op_mode
= mode
;
2414 static int bmp580_wait_conv(struct bmp280_data
*data
)
2417 * Taken from datasheet, Section 2 "Specification, Table 3 "Electrical
2420 static const int time_conv_press
[] = {
2421 0, 1050, 1785, 3045, 5670, 10920, 21420, 42420,
2424 static const int time_conv_temp
[] = {
2425 0, 1050, 1105, 1575, 2205, 3465, 6090, 11340,
2430 meas_time_us
= 4 * USEC_PER_MSEC
+
2431 time_conv_temp
[data
->oversampling_temp
] +
2432 time_conv_press
[data
->oversampling_press
];
2435 * Measurement time mentioned in Chapter 2, Table 4 of the datasheet.
2436 * The extra 4ms is the required mode change to start of measurement
2439 fsleep(meas_time_us
);
2444 static int bmp580_chip_config(struct bmp280_data
*data
)
2446 bool change
= false, aux
;
2451 /* Sets sensor in standby mode */
2452 ret
= regmap_update_bits(data
->regmap
, BMP580_REG_ODR_CONFIG
,
2453 BMP580_MODE_MASK
| BMP580_ODR_DEEPSLEEP_DIS
,
2454 BMP580_ODR_DEEPSLEEP_DIS
|
2455 FIELD_PREP(BMP580_MODE_MASK
, BMP580_MODE_SLEEP
));
2457 dev_err(data
->dev
, "failed to change sensor to standby mode\n");
2460 /* From datasheet's table 4: electrical characteristics */
2461 usleep_range(2500, 3000);
2463 /* Set default DSP mode settings */
2464 reg_val
= FIELD_PREP(BMP580_DSP_COMP_MASK
, BMP580_DSP_PRESS_TEMP_COMP_EN
) |
2465 BMP580_DSP_SHDW_IIR_TEMP_EN
| BMP580_DSP_SHDW_IIR_PRESS_EN
;
2467 ret
= regmap_update_bits(data
->regmap
, BMP580_REG_DSP_CONFIG
,
2468 BMP580_DSP_COMP_MASK
|
2469 BMP580_DSP_SHDW_IIR_TEMP_EN
|
2470 BMP580_DSP_SHDW_IIR_PRESS_EN
, reg_val
);
2472 dev_err(data
->dev
, "failed to change DSP mode settings\n");
2476 /* Configure oversampling */
2477 reg_val
= FIELD_PREP(BMP580_OSR_TEMP_MASK
, data
->oversampling_temp
) |
2478 FIELD_PREP(BMP580_OSR_PRESS_MASK
, data
->oversampling_press
) |
2479 BMP580_OSR_PRESS_EN
;
2481 ret
= regmap_update_bits_check(data
->regmap
, BMP580_REG_OSR_CONFIG
,
2482 BMP580_OSR_TEMP_MASK
|
2483 BMP580_OSR_PRESS_MASK
|
2484 BMP580_OSR_PRESS_EN
,
2487 dev_err(data
->dev
, "failed to write oversampling register\n");
2490 change
= change
|| aux
;
2492 /* Configure output data rate */
2493 ret
= regmap_update_bits_check(data
->regmap
, BMP580_REG_ODR_CONFIG
, BMP580_ODR_MASK
,
2494 FIELD_PREP(BMP580_ODR_MASK
, data
->sampling_freq
),
2497 dev_err(data
->dev
, "failed to write ODR configuration register\n");
2500 change
= change
|| aux
;
2502 /* Set filter data */
2503 reg_val
= FIELD_PREP(BMP580_DSP_IIR_PRESS_MASK
, data
->iir_filter_coeff
) |
2504 FIELD_PREP(BMP580_DSP_IIR_TEMP_MASK
, data
->iir_filter_coeff
);
2506 ret
= regmap_update_bits(data
->regmap
, BMP580_REG_DSP_IIR
,
2507 BMP580_DSP_IIR_PRESS_MASK
| BMP580_DSP_IIR_TEMP_MASK
,
2510 dev_err(data
->dev
, "failed to write config register\n");
2516 * Check if ODR and OSR settings are valid or we are
2517 * operating in a degraded mode.
2519 ret
= regmap_read(data
->regmap
, BMP580_REG_EFF_OSR
, &tmp
);
2522 "error reading effective OSR register\n");
2525 if (!(tmp
& BMP580_EFF_OSR_VALID_ODR
)) {
2526 dev_warn(data
->dev
, "OSR and ODR incompatible settings detected\n");
2527 /* Set current OSR settings from data on effective OSR */
2528 data
->oversampling_temp
= FIELD_GET(BMP580_EFF_OSR_TEMP_MASK
, tmp
);
2529 data
->oversampling_press
= FIELD_GET(BMP580_EFF_OSR_PRESS_MASK
, tmp
);
2537 static int bmp580_data_rdy_trigger_set_state(struct iio_trigger
*trig
,
2540 struct bmp280_data
*data
= iio_trigger_get_drvdata(trig
);
2543 guard(mutex
)(&data
->lock
);
2545 ret
= regmap_update_bits(data
->regmap
, BMP580_REG_INT_CONFIG
,
2546 BMP580_INT_CONFIG_INT_EN
,
2547 FIELD_PREP(BMP580_INT_CONFIG_INT_EN
, !!state
));
2550 "Could not %s interrupt.\n", str_enable_disable(state
));
2554 static const struct iio_trigger_ops bmp580_trigger_ops
= {
2555 .set_trigger_state
= &bmp580_data_rdy_trigger_set_state
,
2558 static int bmp580_int_pin_config(struct bmp280_data
*data
)
2560 int pin_drive_cfg
= FIELD_PREP(BMP580_INT_CONFIG_OPEN_DRAIN
,
2561 data
->trig_open_drain
);
2562 int pin_level_cfg
= FIELD_PREP(BMP580_INT_CONFIG_LEVEL
,
2563 data
->trig_active_high
);
2564 int ret
, int_pin_cfg
= pin_drive_cfg
| pin_level_cfg
;
2566 ret
= regmap_update_bits(data
->regmap
, BMP580_REG_INT_CONFIG
,
2567 BMP580_INT_CONFIG_MASK
, int_pin_cfg
);
2569 dev_err(data
->dev
, "Could not set interrupt settings.\n");
2573 ret
= regmap_set_bits(data
->regmap
, BMP580_REG_INT_SOURCE
,
2574 BMP580_INT_SOURCE_DRDY
);
2576 dev_err(data
->dev
, "Could not set interrupt source.\n");
2581 static irqreturn_t
bmp580_irq_thread_handler(int irq
, void *p
)
2583 struct iio_dev
*indio_dev
= p
;
2584 struct bmp280_data
*data
= iio_priv(indio_dev
);
2585 unsigned int int_ctrl
;
2588 ret
= regmap_read(data
->regmap
, BMP580_REG_INT_STATUS
, &int_ctrl
);
2592 if (FIELD_GET(BMP580_INT_STATUS_DRDY_MASK
, int_ctrl
))
2593 iio_trigger_poll_nested(data
->trig
);
2598 static int bmp580_trigger_probe(struct iio_dev
*indio_dev
)
2600 return __bmp280_trigger_probe(indio_dev
, &bmp580_trigger_ops
,
2601 bmp580_int_pin_config
,
2602 bmp580_irq_thread_handler
);
2605 static irqreturn_t
bmp580_trigger_handler(int irq
, void *p
)
2607 struct iio_poll_func
*pf
= p
;
2608 struct iio_dev
*indio_dev
= pf
->indio_dev
;
2609 struct bmp280_data
*data
= iio_priv(indio_dev
);
2612 guard(mutex
)(&data
->lock
);
2614 /* Burst read data registers */
2615 ret
= regmap_bulk_read(data
->regmap
, BMP580_REG_TEMP_XLSB
,
2616 data
->buf
, BMP280_BURST_READ_BYTES
);
2618 dev_err(data
->dev
, "failed to burst read sensor data\n");
2624 /* Pressure calculations */
2625 memcpy(&data
->sensor_data
[offset
], &data
->buf
[3], 3);
2627 offset
+= sizeof(s32
);
2629 /* Temperature calculations */
2630 memcpy(&data
->sensor_data
[offset
], &data
->buf
[0], 3);
2632 iio_push_to_buffers_with_timestamp(indio_dev
, data
->sensor_data
,
2633 iio_get_time_ns(indio_dev
));
2636 iio_trigger_notify_done(indio_dev
->trig
);
2641 static const int bmp580_oversampling_avail
[] = { 1, 2, 4, 8, 16, 32, 64, 128 };
2642 static const u8 bmp580_chip_ids
[] = { BMP580_CHIP_ID
, BMP580_CHIP_ID_ALT
};
2643 /* Instead of { 1000, 16 } we do this, to avoid overflow issues */
2644 static const int bmp580_temp_coeffs
[] = { 125, 13 };
2645 static const int bmp580_press_coeffs
[] = { 1, 64000};
2647 const struct bmp280_chip_info bmp580_chip_info
= {
2648 .id_reg
= BMP580_REG_CHIP_ID
,
2649 .chip_id
= bmp580_chip_ids
,
2650 .num_chip_id
= ARRAY_SIZE(bmp580_chip_ids
),
2651 .regmap_config
= &bmp580_regmap_config
,
2652 .start_up_time
= 2000,
2653 .channels
= bmp580_channels
,
2654 .num_channels
= ARRAY_SIZE(bmp580_channels
),
2655 .avail_scan_masks
= bmp280_avail_scan_masks
,
2657 .oversampling_temp_avail
= bmp580_oversampling_avail
,
2658 .num_oversampling_temp_avail
= ARRAY_SIZE(bmp580_oversampling_avail
),
2659 .oversampling_temp_default
= ilog2(1),
2661 .oversampling_press_avail
= bmp580_oversampling_avail
,
2662 .num_oversampling_press_avail
= ARRAY_SIZE(bmp580_oversampling_avail
),
2663 .oversampling_press_default
= ilog2(4),
2665 .sampling_freq_avail
= bmp580_odr_table
,
2666 .num_sampling_freq_avail
= ARRAY_SIZE(bmp580_odr_table
) * 2,
2667 .sampling_freq_default
= BMP580_ODR_50HZ
,
2669 .iir_filter_coeffs_avail
= bmp380_iir_filter_coeffs_avail
,
2670 .num_iir_filter_coeffs_avail
= ARRAY_SIZE(bmp380_iir_filter_coeffs_avail
),
2671 .iir_filter_coeff_default
= 2,
2673 .temp_coeffs
= bmp580_temp_coeffs
,
2674 .temp_coeffs_type
= IIO_VAL_FRACTIONAL_LOG2
,
2675 .press_coeffs
= bmp580_press_coeffs
,
2676 .press_coeffs_type
= IIO_VAL_FRACTIONAL
,
2678 .chip_config
= bmp580_chip_config
,
2679 .read_temp
= bmp580_read_temp
,
2680 .read_press
= bmp580_read_press
,
2681 .set_mode
= bmp580_set_mode
,
2682 .wait_conv
= bmp580_wait_conv
,
2683 .preinit
= bmp580_preinit
,
2685 .trigger_probe
= bmp580_trigger_probe
,
2686 .trigger_handler
= bmp580_trigger_handler
,
2688 EXPORT_SYMBOL_NS(bmp580_chip_info
, "IIO_BMP280");
2690 static int bmp180_wait_for_eoc(struct bmp280_data
*data
, u8 ctrl_meas
)
2692 static const int conversion_time_max
[] = { 4500, 7500, 13500, 25500 };
2693 unsigned int delay_us
;
2698 reinit_completion(&data
->done
);
2700 ret
= regmap_write(data
->regmap
, BMP280_REG_CTRL_MEAS
, ctrl_meas
);
2702 dev_err(data
->dev
, "failed to write crtl_meas register\n");
2706 if (data
->use_eoc
) {
2708 * If we have a completion interrupt, use it, wait up to
2709 * 100ms. The longest conversion time listed is 76.5 ms for
2710 * advanced resolution mode.
2712 ret
= wait_for_completion_timeout(&data
->done
,
2713 1 + msecs_to_jiffies(100));
2715 dev_err(data
->dev
, "timeout waiting for completion\n");
2717 if (FIELD_GET(BMP180_MEAS_CTRL_MASK
, ctrl_meas
) == BMP180_MEAS_TEMP
)
2721 conversion_time_max
[data
->oversampling_press
];
2723 usleep_range(delay_us
, delay_us
+ 1000);
2726 ret
= regmap_read(data
->regmap
, BMP280_REG_CTRL_MEAS
, &ctrl
);
2728 dev_err(data
->dev
, "failed to read ctrl_meas register\n");
2732 /* The value of this bit reset to "0" after conversion is complete */
2733 if (ctrl
& BMP180_MEAS_SCO
) {
2734 dev_err(data
->dev
, "conversion didn't complete\n");
2741 static int bmp180_read_temp_adc(struct bmp280_data
*data
, u32
*adc_temp
)
2745 ret
= bmp180_wait_for_eoc(data
,
2746 FIELD_PREP(BMP180_MEAS_CTRL_MASK
, BMP180_MEAS_TEMP
) |
2751 ret
= regmap_bulk_read(data
->regmap
, BMP180_REG_OUT_MSB
,
2752 &data
->be16
, sizeof(data
->be16
));
2754 dev_err(data
->dev
, "failed to read temperature\n");
2758 *adc_temp
= be16_to_cpu(data
->be16
);
2763 static int bmp180_read_calib(struct bmp280_data
*data
)
2765 struct bmp180_calib
*calib
= &data
->calib
.bmp180
;
2769 ret
= regmap_bulk_read(data
->regmap
, BMP180_REG_CALIB_START
,
2770 data
->bmp180_cal_buf
, sizeof(data
->bmp180_cal_buf
));
2772 dev_err(data
->dev
, "failed to read calibration parameters\n");
2776 /* None of the words has the value 0 or 0xFFFF */
2777 for (i
= 0; i
< ARRAY_SIZE(data
->bmp180_cal_buf
); i
++) {
2778 if (data
->bmp180_cal_buf
[i
] == cpu_to_be16(0) ||
2779 data
->bmp180_cal_buf
[i
] == cpu_to_be16(0xffff))
2783 /* Toss the calibration data into the entropy pool */
2784 add_device_randomness(data
->bmp180_cal_buf
,
2785 sizeof(data
->bmp180_cal_buf
));
2787 calib
->AC1
= be16_to_cpu(data
->bmp180_cal_buf
[AC1
]);
2788 calib
->AC2
= be16_to_cpu(data
->bmp180_cal_buf
[AC2
]);
2789 calib
->AC3
= be16_to_cpu(data
->bmp180_cal_buf
[AC3
]);
2790 calib
->AC4
= be16_to_cpu(data
->bmp180_cal_buf
[AC4
]);
2791 calib
->AC5
= be16_to_cpu(data
->bmp180_cal_buf
[AC5
]);
2792 calib
->AC6
= be16_to_cpu(data
->bmp180_cal_buf
[AC6
]);
2793 calib
->B1
= be16_to_cpu(data
->bmp180_cal_buf
[B1
]);
2794 calib
->B2
= be16_to_cpu(data
->bmp180_cal_buf
[B2
]);
2795 calib
->MB
= be16_to_cpu(data
->bmp180_cal_buf
[MB
]);
2796 calib
->MC
= be16_to_cpu(data
->bmp180_cal_buf
[MC
]);
2797 calib
->MD
= be16_to_cpu(data
->bmp180_cal_buf
[MD
]);
2803 * Returns temperature in DegC, resolution is 0.1 DegC.
2804 * t_fine carries fine temperature as global value.
2806 * Taken from datasheet, Section 3.5, "Calculating pressure and temperature".
2809 static s32
bmp180_calc_t_fine(struct bmp280_data
*data
, u32 adc_temp
)
2811 struct bmp180_calib
*calib
= &data
->calib
.bmp180
;
2814 x1
= ((((s32
)adc_temp
) - calib
->AC6
) * calib
->AC5
) >> 15;
2815 x2
= (calib
->MC
<< 11) / (x1
+ calib
->MD
);
2816 return x1
+ x2
; /* t_fine = x1 + x2; */
2819 static int bmp180_get_t_fine(struct bmp280_data
*data
, s32
*t_fine
)
2824 ret
= bmp180_read_temp_adc(data
, &adc_temp
);
2828 *t_fine
= bmp180_calc_t_fine(data
, adc_temp
);
2833 static s32
bmp180_compensate_temp(struct bmp280_data
*data
, u32 adc_temp
)
2835 return (bmp180_calc_t_fine(data
, adc_temp
) + 8) / 16;
2838 static int bmp180_read_temp(struct bmp280_data
*data
, s32
*comp_temp
)
2843 ret
= bmp180_read_temp_adc(data
, &adc_temp
);
2847 *comp_temp
= bmp180_compensate_temp(data
, adc_temp
);
2852 static int bmp180_read_press_adc(struct bmp280_data
*data
, u32
*adc_press
)
2854 u8 oss
= data
->oversampling_press
;
2857 ret
= bmp180_wait_for_eoc(data
,
2858 FIELD_PREP(BMP180_MEAS_CTRL_MASK
, BMP180_MEAS_PRESS
) |
2859 FIELD_PREP(BMP180_OSRS_PRESS_MASK
, oss
) |
2864 ret
= regmap_bulk_read(data
->regmap
, BMP180_REG_OUT_MSB
,
2865 data
->buf
, BMP280_NUM_PRESS_BYTES
);
2867 dev_err(data
->dev
, "failed to read pressure\n");
2871 *adc_press
= get_unaligned_be24(data
->buf
) >> (8 - oss
);
2877 * Returns pressure in Pa, resolution is 1 Pa.
2879 * Taken from datasheet, Section 3.5, "Calculating pressure and temperature".
2881 static u32
bmp180_compensate_press(struct bmp280_data
*data
, u32 adc_press
,
2884 struct bmp180_calib
*calib
= &data
->calib
.bmp180
;
2885 s32 oss
= data
->oversampling_press
;
2891 x1
= (calib
->B2
* (b6
* b6
>> 12)) >> 11;
2892 x2
= calib
->AC2
* b6
>> 11;
2894 b3
= ((((s32
)calib
->AC1
* 4 + x3
) << oss
) + 2) / 4;
2895 x1
= calib
->AC3
* b6
>> 13;
2896 x2
= (calib
->B1
* ((b6
* b6
) >> 12)) >> 16;
2897 x3
= (x1
+ x2
+ 2) >> 2;
2898 b4
= calib
->AC4
* (u32
)(x3
+ 32768) >> 15;
2899 b7
= (adc_press
- b3
) * (50000 >> oss
);
2900 if (b7
< 0x80000000)
2905 x1
= (p
>> 8) * (p
>> 8);
2906 x1
= (x1
* 3038) >> 16;
2907 x2
= (-7357 * p
) >> 16;
2909 return p
+ ((x1
+ x2
+ 3791) >> 4);
2912 static int bmp180_read_press(struct bmp280_data
*data
, u32
*comp_press
)
2918 ret
= bmp180_get_t_fine(data
, &t_fine
);
2922 ret
= bmp180_read_press_adc(data
, &adc_press
);
2926 *comp_press
= bmp180_compensate_press(data
, adc_press
, t_fine
);
2931 /* Keep compatibility with newer generations of the sensor */
2932 static int bmp180_set_mode(struct bmp280_data
*data
, enum bmp280_op_mode mode
)
2937 /* Keep compatibility with newer generations of the sensor */
2938 static int bmp180_wait_conv(struct bmp280_data
*data
)
2943 /* Keep compatibility with newer generations of the sensor */
2944 static int bmp180_chip_config(struct bmp280_data
*data
)
2949 static irqreturn_t
bmp180_trigger_handler(int irq
, void *p
)
2951 struct iio_poll_func
*pf
= p
;
2952 struct iio_dev
*indio_dev
= pf
->indio_dev
;
2953 struct bmp280_data
*data
= iio_priv(indio_dev
);
2954 int ret
, comp_temp
, comp_press
;
2955 s32
*chans
= (s32
*)data
->sensor_data
;
2957 guard(mutex
)(&data
->lock
);
2959 ret
= bmp180_read_temp(data
, &comp_temp
);
2964 ret
= bmp180_read_press(data
, &comp_press
);
2968 chans
[0] = comp_press
;
2969 chans
[1] = comp_temp
;
2971 iio_push_to_buffers_with_timestamp(indio_dev
, data
->sensor_data
,
2972 iio_get_time_ns(indio_dev
));
2975 iio_trigger_notify_done(indio_dev
->trig
);
2980 static const int bmp180_oversampling_temp_avail
[] = { 1 };
2981 static const int bmp180_oversampling_press_avail
[] = { 1, 2, 4, 8 };
2982 static const u8 bmp180_chip_ids
[] = { BMP180_CHIP_ID
};
2983 static const int bmp180_temp_coeffs
[] = { 100, 1 };
2984 static const int bmp180_press_coeffs
[] = { 1, 1000 };
2986 const struct bmp280_chip_info bmp180_chip_info
= {
2987 .id_reg
= BMP280_REG_ID
,
2988 .chip_id
= bmp180_chip_ids
,
2989 .num_chip_id
= ARRAY_SIZE(bmp180_chip_ids
),
2990 .regmap_config
= &bmp180_regmap_config
,
2991 .start_up_time
= 2000,
2992 .channels
= bmp280_channels
,
2993 .num_channels
= ARRAY_SIZE(bmp280_channels
),
2994 .avail_scan_masks
= bmp280_avail_scan_masks
,
2996 .oversampling_temp_avail
= bmp180_oversampling_temp_avail
,
2997 .num_oversampling_temp_avail
=
2998 ARRAY_SIZE(bmp180_oversampling_temp_avail
),
2999 .oversampling_temp_default
= 0,
3001 .oversampling_press_avail
= bmp180_oversampling_press_avail
,
3002 .num_oversampling_press_avail
=
3003 ARRAY_SIZE(bmp180_oversampling_press_avail
),
3004 .oversampling_press_default
= BMP180_MEAS_PRESS_8X
,
3006 .temp_coeffs
= bmp180_temp_coeffs
,
3007 .temp_coeffs_type
= IIO_VAL_FRACTIONAL
,
3008 .press_coeffs
= bmp180_press_coeffs
,
3009 .press_coeffs_type
= IIO_VAL_FRACTIONAL
,
3011 .chip_config
= bmp180_chip_config
,
3012 .read_temp
= bmp180_read_temp
,
3013 .read_press
= bmp180_read_press
,
3014 .read_calib
= bmp180_read_calib
,
3015 .set_mode
= bmp180_set_mode
,
3016 .wait_conv
= bmp180_wait_conv
,
3018 .trigger_handler
= bmp180_trigger_handler
,
3020 EXPORT_SYMBOL_NS(bmp180_chip_info
, "IIO_BMP280");
3022 static irqreturn_t
bmp085_eoc_irq(int irq
, void *d
)
3024 struct bmp280_data
*data
= d
;
3026 complete(&data
->done
);
3031 static int bmp085_trigger_probe(struct iio_dev
*indio_dev
)
3033 struct bmp280_data
*data
= iio_priv(indio_dev
);
3034 struct device
*dev
= data
->dev
;
3035 unsigned long irq_trig
;
3038 irq
= fwnode_irq_get(dev_fwnode(dev
), 0);
3040 return dev_err_probe(dev
, irq
, "No interrupt found.\n");
3042 irq_trig
= irq_get_trigger_type(irq
);
3043 if (irq_trig
!= IRQF_TRIGGER_RISING
) {
3044 dev_err(dev
, "non-rising trigger given for EOC interrupt, trying to enforce it\n");
3045 irq_trig
= IRQF_TRIGGER_RISING
;
3048 init_completion(&data
->done
);
3050 ret
= devm_request_irq(dev
, irq
, bmp085_eoc_irq
, irq_trig
,
3051 indio_dev
->name
, data
);
3053 /* Bail out without IRQ but keep the driver in place */
3054 dev_err(dev
, "unable to request DRDY IRQ\n");
3058 data
->use_eoc
= true;
3063 /* Identical to bmp180_chip_info + bmp085_trigger_probe */
3064 const struct bmp280_chip_info bmp085_chip_info
= {
3065 .id_reg
= BMP280_REG_ID
,
3066 .chip_id
= bmp180_chip_ids
,
3067 .num_chip_id
= ARRAY_SIZE(bmp180_chip_ids
),
3068 .regmap_config
= &bmp180_regmap_config
,
3069 .start_up_time
= 2000,
3070 .channels
= bmp280_channels
,
3071 .num_channels
= ARRAY_SIZE(bmp280_channels
),
3072 .avail_scan_masks
= bmp280_avail_scan_masks
,
3074 .oversampling_temp_avail
= bmp180_oversampling_temp_avail
,
3075 .num_oversampling_temp_avail
=
3076 ARRAY_SIZE(bmp180_oversampling_temp_avail
),
3077 .oversampling_temp_default
= 0,
3079 .oversampling_press_avail
= bmp180_oversampling_press_avail
,
3080 .num_oversampling_press_avail
=
3081 ARRAY_SIZE(bmp180_oversampling_press_avail
),
3082 .oversampling_press_default
= BMP180_MEAS_PRESS_8X
,
3084 .temp_coeffs
= bmp180_temp_coeffs
,
3085 .temp_coeffs_type
= IIO_VAL_FRACTIONAL
,
3086 .press_coeffs
= bmp180_press_coeffs
,
3087 .press_coeffs_type
= IIO_VAL_FRACTIONAL
,
3089 .chip_config
= bmp180_chip_config
,
3090 .read_temp
= bmp180_read_temp
,
3091 .read_press
= bmp180_read_press
,
3092 .read_calib
= bmp180_read_calib
,
3093 .set_mode
= bmp180_set_mode
,
3094 .wait_conv
= bmp180_wait_conv
,
3096 .trigger_probe
= bmp085_trigger_probe
,
3097 .trigger_handler
= bmp180_trigger_handler
,
3099 EXPORT_SYMBOL_NS(bmp085_chip_info
, "IIO_BMP280");
3101 static int bmp280_buffer_preenable(struct iio_dev
*indio_dev
)
3103 struct bmp280_data
*data
= iio_priv(indio_dev
);
3105 pm_runtime_get_sync(data
->dev
);
3106 data
->chip_info
->set_mode(data
, BMP280_NORMAL
);
3111 static int bmp280_buffer_postdisable(struct iio_dev
*indio_dev
)
3113 struct bmp280_data
*data
= iio_priv(indio_dev
);
3115 pm_runtime_mark_last_busy(data
->dev
);
3116 pm_runtime_put_autosuspend(data
->dev
);
3121 static const struct iio_buffer_setup_ops bmp280_buffer_setup_ops
= {
3122 .preenable
= bmp280_buffer_preenable
,
3123 .postdisable
= bmp280_buffer_postdisable
,
3126 static void bmp280_pm_disable(void *data
)
3128 struct device
*dev
= data
;
3130 pm_runtime_get_sync(dev
);
3131 pm_runtime_put_noidle(dev
);
3132 pm_runtime_disable(dev
);
3135 static void bmp280_regulators_disable(void *data
)
3137 struct regulator_bulk_data
*supplies
= data
;
3139 regulator_bulk_disable(BMP280_NUM_SUPPLIES
, supplies
);
3142 int bmp280_common_probe(struct device
*dev
,
3143 struct regmap
*regmap
,
3144 const struct bmp280_chip_info
*chip_info
,
3148 struct iio_dev
*indio_dev
;
3149 struct bmp280_data
*data
;
3150 struct gpio_desc
*gpiod
;
3151 unsigned int chip_id
;
3155 indio_dev
= devm_iio_device_alloc(dev
, sizeof(*data
));
3159 data
= iio_priv(indio_dev
);
3160 mutex_init(&data
->lock
);
3163 indio_dev
->name
= name
;
3164 indio_dev
->info
= &bmp280_info
;
3165 indio_dev
->modes
= INDIO_DIRECT_MODE
;
3167 data
->chip_info
= chip_info
;
3169 /* Apply initial values from chip info structure */
3170 indio_dev
->channels
= chip_info
->channels
;
3171 indio_dev
->num_channels
= chip_info
->num_channels
;
3172 indio_dev
->available_scan_masks
= chip_info
->avail_scan_masks
;
3173 data
->oversampling_press
= chip_info
->oversampling_press_default
;
3174 data
->oversampling_humid
= chip_info
->oversampling_humid_default
;
3175 data
->oversampling_temp
= chip_info
->oversampling_temp_default
;
3176 data
->iir_filter_coeff
= chip_info
->iir_filter_coeff_default
;
3177 data
->sampling_freq
= chip_info
->sampling_freq_default
;
3178 data
->start_up_time
= chip_info
->start_up_time
;
3180 /* Bring up regulators */
3181 regulator_bulk_set_supply_names(data
->supplies
,
3182 bmp280_supply_names
,
3183 BMP280_NUM_SUPPLIES
);
3185 ret
= devm_regulator_bulk_get(dev
,
3186 BMP280_NUM_SUPPLIES
, data
->supplies
);
3188 dev_err(dev
, "failed to get regulators\n");
3192 ret
= regulator_bulk_enable(BMP280_NUM_SUPPLIES
, data
->supplies
);
3194 dev_err(dev
, "failed to enable regulators\n");
3198 ret
= devm_add_action_or_reset(dev
, bmp280_regulators_disable
,
3203 /* Wait to make sure we started up properly */
3204 usleep_range(data
->start_up_time
, data
->start_up_time
+ 100);
3206 /* Bring chip out of reset if there is an assigned GPIO line */
3207 gpiod
= devm_gpiod_get_optional(dev
, "reset", GPIOD_OUT_HIGH
);
3208 /* Deassert the signal */
3210 dev_info(dev
, "release reset\n");
3211 gpiod_set_value(gpiod
, 0);
3214 data
->regmap
= regmap
;
3216 ret
= regmap_read(regmap
, data
->chip_info
->id_reg
, &chip_id
);
3218 dev_err(data
->dev
, "failed to read chip id\n");
3222 for (i
= 0; i
< data
->chip_info
->num_chip_id
; i
++) {
3223 if (chip_id
== data
->chip_info
->chip_id
[i
]) {
3224 dev_info(dev
, "0x%x is a known chip id for %s\n", chip_id
, name
);
3229 if (i
== data
->chip_info
->num_chip_id
)
3230 dev_warn(dev
, "bad chip id: 0x%x is not a known chip id\n", chip_id
);
3232 if (data
->chip_info
->preinit
) {
3233 ret
= data
->chip_info
->preinit(data
);
3235 return dev_err_probe(data
->dev
, ret
,
3236 "error running preinit tasks\n");
3239 ret
= data
->chip_info
->chip_config(data
);
3243 dev_set_drvdata(dev
, indio_dev
);
3246 * Some chips have calibration parameters "programmed into the devices'
3247 * non-volatile memory during production". Let's read them out at probe
3248 * time once. They will not change.
3251 if (data
->chip_info
->read_calib
) {
3252 ret
= data
->chip_info
->read_calib(data
);
3254 return dev_err_probe(data
->dev
, ret
,
3255 "failed to read calibration coefficients\n");
3258 ret
= devm_iio_triggered_buffer_setup(data
->dev
, indio_dev
,
3259 iio_pollfunc_store_time
,
3260 data
->chip_info
->trigger_handler
,
3261 &bmp280_buffer_setup_ops
);
3263 return dev_err_probe(data
->dev
, ret
,
3264 "iio triggered buffer setup failed\n");
3267 * Attempt to grab an optional EOC IRQ - only the BMP085 has this
3268 * however as it happens, the BMP085 shares the chip ID of BMP180
3269 * so we look for an IRQ if we have that.
3272 if (data
->chip_info
->trigger_probe
)
3273 ret
= data
->chip_info
->trigger_probe(indio_dev
);
3278 ret
= data
->chip_info
->set_mode(data
, BMP280_SLEEP
);
3280 return dev_err_probe(dev
, ret
, "Failed to set sleep mode\n");
3282 /* Enable runtime PM */
3283 pm_runtime_get_noresume(dev
);
3284 pm_runtime_set_active(dev
);
3285 pm_runtime_enable(dev
);
3287 * Set autosuspend to two orders of magnitude larger than the
3290 pm_runtime_set_autosuspend_delay(dev
, data
->start_up_time
/ 10);
3291 pm_runtime_use_autosuspend(dev
);
3292 pm_runtime_put(dev
);
3294 ret
= devm_add_action_or_reset(dev
, bmp280_pm_disable
, dev
);
3298 return devm_iio_device_register(dev
, indio_dev
);
3300 EXPORT_SYMBOL_NS(bmp280_common_probe
, "IIO_BMP280");
3302 static int bmp280_runtime_suspend(struct device
*dev
)
3304 struct iio_dev
*indio_dev
= dev_get_drvdata(dev
);
3305 struct bmp280_data
*data
= iio_priv(indio_dev
);
3307 data
->chip_info
->set_mode(data
, BMP280_SLEEP
);
3309 fsleep(data
->start_up_time
);
3310 return regulator_bulk_disable(BMP280_NUM_SUPPLIES
, data
->supplies
);
3313 static int bmp280_runtime_resume(struct device
*dev
)
3315 struct iio_dev
*indio_dev
= dev_get_drvdata(dev
);
3316 struct bmp280_data
*data
= iio_priv(indio_dev
);
3319 ret
= regulator_bulk_enable(BMP280_NUM_SUPPLIES
, data
->supplies
);
3323 usleep_range(data
->start_up_time
, data
->start_up_time
+ 100);
3325 ret
= data
->chip_info
->chip_config(data
);
3329 return data
->chip_info
->set_mode(data
, data
->op_mode
);
3332 EXPORT_RUNTIME_DEV_PM_OPS(bmp280_dev_pm_ops
, bmp280_runtime_suspend
,
3333 bmp280_runtime_resume
, NULL
);
3335 MODULE_AUTHOR("Vlad Dogaru <vlad.dogaru@intel.com>");
3336 MODULE_DESCRIPTION("Driver for Bosch Sensortec BMP180/BMP280 pressure and temperature sensor");
3337 MODULE_LICENSE("GPL v2");