xref: /linux/drivers/iio/pressure/bmp280-core.c (revision e7e2296b0ecf9b6e934f7a1118cee91d4d486a84)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
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>
8  *
9  * Driver for Bosch Sensortec BMP180 and BMP280 digital pressure sensor.
10  *
11  * Datasheet:
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
18  *
19  * Sensor API:
20  * https://github.com/boschsensortec/BME280_SensorAPI
21  * https://github.com/boschsensortec/BMP3_SensorAPI
22  * https://github.com/boschsensortec/BMP5_SensorAPI
23  *
24  * Notice:
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
29  */
30 
31 #define pr_fmt(fmt) "bmp280: " fmt
32 
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>
49 #include <linux/types.h>
50 
51 #include <linux/iio/buffer.h>
52 #include <linux/iio/iio.h>
53 #include <linux/iio/trigger.h>
54 #include <linux/iio/trigger_consumer.h>
55 #include <linux/iio/triggered_buffer.h>
56 
57 #include <linux/unaligned.h>
58 
59 #include "bmp280.h"
60 
61 /*
62  * These enums are used for indexing into the array of calibration
63  * coefficients for BMP180.
64  */
65 enum { AC1, AC2, AC3, AC4, AC5, AC6, B1, B2, MB, MC, MD };
66 
67 enum bmp380_odr {
68 	BMP380_ODR_200HZ,
69 	BMP380_ODR_100HZ,
70 	BMP380_ODR_50HZ,
71 	BMP380_ODR_25HZ,
72 	BMP380_ODR_12_5HZ,
73 	BMP380_ODR_6_25HZ,
74 	BMP380_ODR_3_125HZ,
75 	BMP380_ODR_1_5625HZ,
76 	BMP380_ODR_0_78HZ,
77 	BMP380_ODR_0_39HZ,
78 	BMP380_ODR_0_2HZ,
79 	BMP380_ODR_0_1HZ,
80 	BMP380_ODR_0_05HZ,
81 	BMP380_ODR_0_02HZ,
82 	BMP380_ODR_0_01HZ,
83 	BMP380_ODR_0_006HZ,
84 	BMP380_ODR_0_003HZ,
85 	BMP380_ODR_0_0015HZ,
86 };
87 
88 enum bmp580_odr {
89 	BMP580_ODR_240HZ,
90 	BMP580_ODR_218HZ,
91 	BMP580_ODR_199HZ,
92 	BMP580_ODR_179HZ,
93 	BMP580_ODR_160HZ,
94 	BMP580_ODR_149HZ,
95 	BMP580_ODR_140HZ,
96 	BMP580_ODR_129HZ,
97 	BMP580_ODR_120HZ,
98 	BMP580_ODR_110HZ,
99 	BMP580_ODR_100HZ,
100 	BMP580_ODR_89HZ,
101 	BMP580_ODR_80HZ,
102 	BMP580_ODR_70HZ,
103 	BMP580_ODR_60HZ,
104 	BMP580_ODR_50HZ,
105 	BMP580_ODR_45HZ,
106 	BMP580_ODR_40HZ,
107 	BMP580_ODR_35HZ,
108 	BMP580_ODR_30HZ,
109 	BMP580_ODR_25HZ,
110 	BMP580_ODR_20HZ,
111 	BMP580_ODR_15HZ,
112 	BMP580_ODR_10HZ,
113 	BMP580_ODR_5HZ,
114 	BMP580_ODR_4HZ,
115 	BMP580_ODR_3HZ,
116 	BMP580_ODR_2HZ,
117 	BMP580_ODR_1HZ,
118 	BMP580_ODR_0_5HZ,
119 	BMP580_ODR_0_25HZ,
120 	BMP580_ODR_0_125HZ,
121 };
122 
123 /*
124  * These enums are used for indexing into the array of compensation
125  * parameters for BMP280.
126  */
127 enum { T1, T2, T3, P1, P2, P3, P4, P5, P6, P7, P8, P9 };
128 
129 enum {
130 	/* Temperature calib indexes */
131 	BMP380_T1 = 0,
132 	BMP380_T2 = 2,
133 	BMP380_T3 = 4,
134 	/* Pressure calib indexes */
135 	BMP380_P1 = 5,
136 	BMP380_P2 = 7,
137 	BMP380_P3 = 9,
138 	BMP380_P4 = 10,
139 	BMP380_P5 = 11,
140 	BMP380_P6 = 13,
141 	BMP380_P7 = 15,
142 	BMP380_P8 = 16,
143 	BMP380_P9 = 17,
144 	BMP380_P10 = 19,
145 	BMP380_P11 = 20,
146 };
147 
148 enum bmp280_scan {
149 	BMP280_PRESS,
150 	BMP280_TEMP,
151 	BME280_HUMID,
152 };
153 
154 static const struct iio_chan_spec bmp280_channels[] = {
155 	{
156 		.type = IIO_PRESSURE,
157 		/* PROCESSED maintained for ABI backwards compatibility */
158 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
159 				      BIT(IIO_CHAN_INFO_RAW) |
160 				      BIT(IIO_CHAN_INFO_SCALE) |
161 				      BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
162 		.scan_index = 0,
163 		.scan_type = {
164 			.sign = 'u',
165 			.realbits = 32,
166 			.storagebits = 32,
167 			.endianness = IIO_CPU,
168 		},
169 	},
170 	{
171 		.type = IIO_TEMP,
172 		/* PROCESSED maintained for ABI backwards compatibility */
173 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
174 				      BIT(IIO_CHAN_INFO_RAW) |
175 				      BIT(IIO_CHAN_INFO_SCALE) |
176 				      BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
177 		.scan_index = 1,
178 		.scan_type = {
179 			.sign = 's',
180 			.realbits = 32,
181 			.storagebits = 32,
182 			.endianness = IIO_CPU,
183 		},
184 	},
185 	IIO_CHAN_SOFT_TIMESTAMP(2),
186 };
187 
188 static const struct iio_chan_spec bme280_channels[] = {
189 	{
190 		.type = IIO_PRESSURE,
191 		/* PROCESSED maintained for ABI backwards compatibility */
192 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
193 				      BIT(IIO_CHAN_INFO_RAW) |
194 				      BIT(IIO_CHAN_INFO_SCALE) |
195 				      BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
196 		.scan_index = 0,
197 		.scan_type = {
198 			.sign = 'u',
199 			.realbits = 32,
200 			.storagebits = 32,
201 			.endianness = IIO_CPU,
202 		},
203 	},
204 	{
205 		.type = IIO_TEMP,
206 		/* PROCESSED maintained for ABI backwards compatibility */
207 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
208 				      BIT(IIO_CHAN_INFO_RAW) |
209 				      BIT(IIO_CHAN_INFO_SCALE) |
210 				      BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
211 		.scan_index = 1,
212 		.scan_type = {
213 			.sign = 's',
214 			.realbits = 32,
215 			.storagebits = 32,
216 			.endianness = IIO_CPU,
217 		},
218 	},
219 	{
220 		.type = IIO_HUMIDITYRELATIVE,
221 		/* PROCESSED maintained for ABI backwards compatibility */
222 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
223 				      BIT(IIO_CHAN_INFO_RAW) |
224 				      BIT(IIO_CHAN_INFO_SCALE) |
225 				      BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
226 		.scan_index = 2,
227 		.scan_type = {
228 			.sign = 'u',
229 			.realbits = 32,
230 			.storagebits = 32,
231 			.endianness = IIO_CPU,
232 		},
233 	},
234 	IIO_CHAN_SOFT_TIMESTAMP(3),
235 };
236 
237 static const struct iio_chan_spec bmp380_channels[] = {
238 	{
239 		.type = IIO_PRESSURE,
240 		/* PROCESSED maintained for ABI backwards compatibility */
241 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
242 				      BIT(IIO_CHAN_INFO_RAW) |
243 				      BIT(IIO_CHAN_INFO_SCALE) |
244 				      BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
245 		.info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) |
246 					   BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY),
247 		.scan_index = 0,
248 		.scan_type = {
249 			.sign = 'u',
250 			.realbits = 32,
251 			.storagebits = 32,
252 			.endianness = IIO_CPU,
253 		},
254 	},
255 	{
256 		.type = IIO_TEMP,
257 		/* PROCESSED maintained for ABI backwards compatibility */
258 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
259 				      BIT(IIO_CHAN_INFO_RAW) |
260 				      BIT(IIO_CHAN_INFO_SCALE) |
261 				      BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
262 		.info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) |
263 					   BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY),
264 		.scan_index = 1,
265 		.scan_type = {
266 			.sign = 's',
267 			.realbits = 32,
268 			.storagebits = 32,
269 			.endianness = IIO_CPU,
270 		},
271 	},
272 	IIO_CHAN_SOFT_TIMESTAMP(2),
273 };
274 
275 static const struct iio_chan_spec bmp580_channels[] = {
276 	{
277 		.type = IIO_PRESSURE,
278 		/* PROCESSED maintained for ABI backwards compatibility */
279 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
280 				      BIT(IIO_CHAN_INFO_RAW) |
281 				      BIT(IIO_CHAN_INFO_SCALE) |
282 				      BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
283 		.info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) |
284 					   BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY),
285 		.scan_index = 0,
286 		.scan_type = {
287 			.sign = 'u',
288 			.realbits = 24,
289 			.storagebits = 32,
290 			.endianness = IIO_LE,
291 		},
292 	},
293 	{
294 		.type = IIO_TEMP,
295 		/* PROCESSED maintained for ABI backwards compatibility */
296 		.info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
297 				      BIT(IIO_CHAN_INFO_RAW) |
298 				      BIT(IIO_CHAN_INFO_SCALE) |
299 				      BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
300 		.info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) |
301 					   BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY),
302 		.scan_index = 1,
303 		.scan_type = {
304 			.sign = 's',
305 			.realbits = 24,
306 			.storagebits = 32,
307 			.endianness = IIO_LE,
308 		},
309 	},
310 	IIO_CHAN_SOFT_TIMESTAMP(2),
311 };
312 
313 static int bmp280_read_calib(struct bmp280_data *data)
314 {
315 	struct bmp280_calib *calib = &data->calib.bmp280;
316 	int ret;
317 
318 	/* Read temperature and pressure calibration values. */
319 	ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_TEMP_START,
320 			       data->bmp280_cal_buf,
321 			       sizeof(data->bmp280_cal_buf));
322 	if (ret) {
323 		dev_err(data->dev,
324 			"failed to read calibration parameters\n");
325 		return ret;
326 	}
327 
328 	/* Toss calibration data into the entropy pool */
329 	add_device_randomness(data->bmp280_cal_buf,
330 			      sizeof(data->bmp280_cal_buf));
331 
332 	/* Parse temperature calibration values. */
333 	calib->T1 = le16_to_cpu(data->bmp280_cal_buf[T1]);
334 	calib->T2 = le16_to_cpu(data->bmp280_cal_buf[T2]);
335 	calib->T3 = le16_to_cpu(data->bmp280_cal_buf[T3]);
336 
337 	/* Parse pressure calibration values. */
338 	calib->P1 = le16_to_cpu(data->bmp280_cal_buf[P1]);
339 	calib->P2 = le16_to_cpu(data->bmp280_cal_buf[P2]);
340 	calib->P3 = le16_to_cpu(data->bmp280_cal_buf[P3]);
341 	calib->P4 = le16_to_cpu(data->bmp280_cal_buf[P4]);
342 	calib->P5 = le16_to_cpu(data->bmp280_cal_buf[P5]);
343 	calib->P6 = le16_to_cpu(data->bmp280_cal_buf[P6]);
344 	calib->P7 = le16_to_cpu(data->bmp280_cal_buf[P7]);
345 	calib->P8 = le16_to_cpu(data->bmp280_cal_buf[P8]);
346 	calib->P9 = le16_to_cpu(data->bmp280_cal_buf[P9]);
347 
348 	return 0;
349 }
350 
351 /*
352  * These enums are used for indexing into the array of humidity parameters
353  * for BME280. Due to some weird indexing, unaligned BE/LE accesses co-exist in
354  * order to prepare the FIELD_{GET/PREP}() fields. Table 16 in Section 4.2.2 of
355  * the datasheet.
356  */
357 enum { H2 = 0, H3 = 2, H4 = 3, H5 = 4, H6 = 6 };
358 
359 static int bme280_read_calib(struct bmp280_data *data)
360 {
361 	struct bmp280_calib *calib = &data->calib.bmp280;
362 	struct device *dev = data->dev;
363 	s16 h4_upper, h4_lower, tmp_1, tmp_2, tmp_3;
364 	unsigned int tmp;
365 	int ret;
366 
367 	/* Load shared calibration params with bmp280 first */
368 	ret = bmp280_read_calib(data);
369 	if (ret)
370 		return ret;
371 
372 	ret = regmap_read(data->regmap, BME280_REG_COMP_H1, &tmp);
373 	if (ret) {
374 		dev_err(dev, "failed to read H1 comp value\n");
375 		return ret;
376 	}
377 	calib->H1 = tmp;
378 
379 	ret = regmap_bulk_read(data->regmap, BME280_REG_COMP_H2,
380 			       data->bme280_humid_cal_buf,
381 			       sizeof(data->bme280_humid_cal_buf));
382 	if (ret) {
383 		dev_err(dev, "failed to read humidity calibration values\n");
384 		return ret;
385 	}
386 
387 	calib->H2 = get_unaligned_le16(&data->bme280_humid_cal_buf[H2]);
388 	calib->H3 = data->bme280_humid_cal_buf[H3];
389 	tmp_1 = get_unaligned_be16(&data->bme280_humid_cal_buf[H4]);
390 	tmp_2 = FIELD_GET(BME280_COMP_H4_GET_MASK_UP, tmp_1);
391 	h4_upper = FIELD_PREP(BME280_COMP_H4_PREP_MASK_UP, tmp_2);
392 	h4_lower = FIELD_GET(BME280_COMP_H4_MASK_LOW, tmp_1);
393 	calib->H4 = sign_extend32(h4_upper | h4_lower, 11);
394 	tmp_3 = get_unaligned_le16(&data->bme280_humid_cal_buf[H5]);
395 	calib->H5 = sign_extend32(FIELD_GET(BME280_COMP_H5_MASK, tmp_3), 11);
396 	calib->H6 = data->bme280_humid_cal_buf[H6];
397 
398 	return 0;
399 }
400 
401 static int bme280_read_humid_adc(struct bmp280_data *data, u16 *adc_humidity)
402 {
403 	u16 value_humidity;
404 	int ret;
405 
406 	ret = regmap_bulk_read(data->regmap, BME280_REG_HUMIDITY_MSB,
407 			       &data->be16, BME280_NUM_HUMIDITY_BYTES);
408 	if (ret) {
409 		dev_err(data->dev, "failed to read humidity\n");
410 		return ret;
411 	}
412 
413 	value_humidity = be16_to_cpu(data->be16);
414 	if (value_humidity == BMP280_HUMIDITY_SKIPPED) {
415 		dev_err(data->dev, "reading humidity skipped\n");
416 		return -EIO;
417 	}
418 	*adc_humidity = value_humidity;
419 
420 	return 0;
421 }
422 
423 /*
424  * Returns humidity in percent, resolution is 0.01 percent. Output value of
425  * "47445" represents 47445/1024 = 46.333 %RH.
426  *
427  * Taken from BME280 datasheet, Section 4.2.3, "Compensation formula".
428  */
429 static u32 bme280_compensate_humidity(struct bmp280_data *data,
430 				      u16 adc_humidity, s32 t_fine)
431 {
432 	struct bmp280_calib *calib = &data->calib.bmp280;
433 	s32 var;
434 
435 	var = t_fine - (s32)76800;
436 	var = (((((s32)adc_humidity << 14) - (calib->H4 << 20) - (calib->H5 * var))
437 		+ (s32)16384) >> 15) * (((((((var * calib->H6) >> 10)
438 		* (((var * (s32)calib->H3) >> 11) + (s32)32768)) >> 10)
439 		+ (s32)2097152) * calib->H2 + 8192) >> 14);
440 	var -= ((((var >> 15) * (var >> 15)) >> 7) * (s32)calib->H1) >> 4;
441 
442 	var = clamp_val(var, 0, 419430400);
443 
444 	return var >> 12;
445 }
446 
447 static int bmp280_read_temp_adc(struct bmp280_data *data, u32 *adc_temp)
448 {
449 	u32 value_temp;
450 	int ret;
451 
452 	ret = regmap_bulk_read(data->regmap, BMP280_REG_TEMP_MSB,
453 			       data->buf, BMP280_NUM_TEMP_BYTES);
454 	if (ret) {
455 		dev_err(data->dev, "failed to read temperature\n");
456 		return ret;
457 	}
458 
459 	value_temp = FIELD_GET(BMP280_MEAS_TRIM_MASK, get_unaligned_be24(data->buf));
460 	if (value_temp == BMP280_TEMP_SKIPPED) {
461 		dev_err(data->dev, "reading temperature skipped\n");
462 		return -EIO;
463 	}
464 	*adc_temp = value_temp;
465 
466 	return 0;
467 }
468 
469 /*
470  * Returns temperature in DegC, resolution is 0.01 DegC.  Output value of
471  * "5123" equals 51.23 DegC.  t_fine carries fine temperature as global
472  * value.
473  *
474  * Taken from datasheet, Section 3.11.3, "Compensation formula".
475  */
476 static s32 bmp280_calc_t_fine(struct bmp280_data *data, u32 adc_temp)
477 {
478 	struct bmp280_calib *calib = &data->calib.bmp280;
479 	s32 var1, var2;
480 
481 	var1 = (((((s32)adc_temp) >> 3) - ((s32)calib->T1 << 1)) *
482 		((s32)calib->T2)) >> 11;
483 	var2 = (((((((s32)adc_temp) >> 4) - ((s32)calib->T1)) *
484 		  ((((s32)adc_temp >> 4) - ((s32)calib->T1))) >> 12) *
485 		((s32)calib->T3))) >> 14;
486 	return var1 + var2; /* t_fine = var1 + var2 */
487 }
488 
489 static int bmp280_get_t_fine(struct bmp280_data *data, s32 *t_fine)
490 {
491 	u32 adc_temp;
492 	int ret;
493 
494 	ret = bmp280_read_temp_adc(data, &adc_temp);
495 	if (ret)
496 		return ret;
497 
498 	*t_fine = bmp280_calc_t_fine(data, adc_temp);
499 
500 	return 0;
501 }
502 
503 static s32 bmp280_compensate_temp(struct bmp280_data *data, u32 adc_temp)
504 {
505 	return (bmp280_calc_t_fine(data, adc_temp) * 5 + 128) / 256;
506 }
507 
508 static int bmp280_read_press_adc(struct bmp280_data *data, u32 *adc_press)
509 {
510 	u32 value_press;
511 	int ret;
512 
513 	ret = regmap_bulk_read(data->regmap, BMP280_REG_PRESS_MSB,
514 			       data->buf, BMP280_NUM_PRESS_BYTES);
515 	if (ret) {
516 		dev_err(data->dev, "failed to read pressure\n");
517 		return ret;
518 	}
519 
520 	value_press = FIELD_GET(BMP280_MEAS_TRIM_MASK, get_unaligned_be24(data->buf));
521 	if (value_press == BMP280_PRESS_SKIPPED) {
522 		dev_err(data->dev, "reading pressure skipped\n");
523 		return -EIO;
524 	}
525 	*adc_press = value_press;
526 
527 	return 0;
528 }
529 
530 /*
531  * Returns pressure in Pa as unsigned 32 bit integer in Q24.8 format (24
532  * integer bits and 8 fractional bits).  Output value of "24674867"
533  * represents 24674867/256 = 96386.2 Pa = 963.862 hPa
534  *
535  * Taken from datasheet, Section 3.11.3, "Compensation formula".
536  */
537 static u32 bmp280_compensate_press(struct bmp280_data *data,
538 				   u32 adc_press, s32 t_fine)
539 {
540 	struct bmp280_calib *calib = &data->calib.bmp280;
541 	s64 var1, var2, p;
542 
543 	var1 = ((s64)t_fine) - 128000;
544 	var2 = var1 * var1 * (s64)calib->P6;
545 	var2 += (var1 * (s64)calib->P5) << 17;
546 	var2 += ((s64)calib->P4) << 35;
547 	var1 = ((var1 * var1 * (s64)calib->P3) >> 8) +
548 		((var1 * (s64)calib->P2) << 12);
549 	var1 = ((((s64)1) << 47) + var1) * ((s64)calib->P1) >> 33;
550 
551 	if (var1 == 0)
552 		return 0;
553 
554 	p = ((((s64)1048576 - (s32)adc_press) << 31) - var2) * 3125;
555 	p = div64_s64(p, var1);
556 	var1 = (((s64)calib->P9) * (p >> 13) * (p >> 13)) >> 25;
557 	var2 = ((s64)(calib->P8) * p) >> 19;
558 	p = ((p + var1 + var2) >> 8) + (((s64)calib->P7) << 4);
559 
560 	return (u32)p;
561 }
562 
563 static int bmp280_read_temp(struct bmp280_data *data, s32 *comp_temp)
564 {
565 	u32 adc_temp;
566 	int ret;
567 
568 	ret = bmp280_read_temp_adc(data, &adc_temp);
569 	if (ret)
570 		return ret;
571 
572 	*comp_temp = bmp280_compensate_temp(data, adc_temp);
573 
574 	return 0;
575 }
576 
577 static int bmp280_read_press(struct bmp280_data *data, u32 *comp_press)
578 {
579 	u32 adc_press;
580 	s32 t_fine;
581 	int ret;
582 
583 	ret = bmp280_get_t_fine(data, &t_fine);
584 	if (ret)
585 		return ret;
586 
587 	ret = bmp280_read_press_adc(data, &adc_press);
588 	if (ret)
589 		return ret;
590 
591 	*comp_press = bmp280_compensate_press(data, adc_press, t_fine);
592 
593 	return 0;
594 }
595 
596 static int bme280_read_humid(struct bmp280_data *data, u32 *comp_humidity)
597 {
598 	u16 adc_humidity;
599 	s32 t_fine;
600 	int ret;
601 
602 	ret = bmp280_get_t_fine(data, &t_fine);
603 	if (ret)
604 		return ret;
605 
606 	ret = bme280_read_humid_adc(data, &adc_humidity);
607 	if (ret)
608 		return ret;
609 
610 	*comp_humidity = bme280_compensate_humidity(data, adc_humidity, t_fine);
611 
612 	return 0;
613 }
614 
615 static int bmp280_read_raw_impl(struct iio_dev *indio_dev,
616 				struct iio_chan_spec const *chan,
617 				int *val, int *val2, long mask)
618 {
619 	struct bmp280_data *data = iio_priv(indio_dev);
620 	int chan_value;
621 	int ret;
622 
623 	guard(mutex)(&data->lock);
624 
625 	switch (mask) {
626 	case IIO_CHAN_INFO_PROCESSED:
627 		ret = data->chip_info->set_mode(data, BMP280_FORCED);
628 		if (ret)
629 			return ret;
630 
631 		ret = data->chip_info->wait_conv(data);
632 		if (ret)
633 			return ret;
634 
635 		switch (chan->type) {
636 		case IIO_HUMIDITYRELATIVE:
637 			ret = data->chip_info->read_humid(data, &chan_value);
638 			if (ret)
639 				return ret;
640 
641 			*val = data->chip_info->humid_coeffs[0] * chan_value;
642 			*val2 = data->chip_info->humid_coeffs[1];
643 			return data->chip_info->humid_coeffs_type;
644 		case IIO_PRESSURE:
645 			ret = data->chip_info->read_press(data, &chan_value);
646 			if (ret)
647 				return ret;
648 
649 			*val = data->chip_info->press_coeffs[0] * chan_value;
650 			*val2 = data->chip_info->press_coeffs[1];
651 			return data->chip_info->press_coeffs_type;
652 		case IIO_TEMP:
653 			ret = data->chip_info->read_temp(data, &chan_value);
654 			if (ret)
655 				return ret;
656 
657 			*val = data->chip_info->temp_coeffs[0] * chan_value;
658 			*val2 = data->chip_info->temp_coeffs[1];
659 			return data->chip_info->temp_coeffs_type;
660 		default:
661 			return -EINVAL;
662 		}
663 	case IIO_CHAN_INFO_RAW:
664 		ret = data->chip_info->set_mode(data, BMP280_FORCED);
665 		if (ret)
666 			return ret;
667 
668 		ret = data->chip_info->wait_conv(data);
669 		if (ret)
670 			return ret;
671 
672 		switch (chan->type) {
673 		case IIO_HUMIDITYRELATIVE:
674 			ret = data->chip_info->read_humid(data, &chan_value);
675 			if (ret)
676 				return ret;
677 
678 			*val = chan_value;
679 			return IIO_VAL_INT;
680 		case IIO_PRESSURE:
681 			ret = data->chip_info->read_press(data, &chan_value);
682 			if (ret)
683 				return ret;
684 
685 			*val = chan_value;
686 			return IIO_VAL_INT;
687 		case IIO_TEMP:
688 			ret = data->chip_info->read_temp(data, &chan_value);
689 			if (ret)
690 				return ret;
691 
692 			*val = chan_value;
693 			return IIO_VAL_INT;
694 		default:
695 			return -EINVAL;
696 		}
697 	case IIO_CHAN_INFO_SCALE:
698 		switch (chan->type) {
699 		case IIO_HUMIDITYRELATIVE:
700 			*val = data->chip_info->humid_coeffs[0];
701 			*val2 = data->chip_info->humid_coeffs[1];
702 			return data->chip_info->humid_coeffs_type;
703 		case IIO_PRESSURE:
704 			*val = data->chip_info->press_coeffs[0];
705 			*val2 = data->chip_info->press_coeffs[1];
706 			return data->chip_info->press_coeffs_type;
707 		case IIO_TEMP:
708 			*val = data->chip_info->temp_coeffs[0];
709 			*val2 = data->chip_info->temp_coeffs[1];
710 			return data->chip_info->temp_coeffs_type;
711 		default:
712 			return -EINVAL;
713 		}
714 	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
715 		switch (chan->type) {
716 		case IIO_HUMIDITYRELATIVE:
717 			*val = 1 << data->oversampling_humid;
718 			return IIO_VAL_INT;
719 		case IIO_PRESSURE:
720 			*val = 1 << data->oversampling_press;
721 			return IIO_VAL_INT;
722 		case IIO_TEMP:
723 			*val = 1 << data->oversampling_temp;
724 			return IIO_VAL_INT;
725 		default:
726 			return -EINVAL;
727 		}
728 	case IIO_CHAN_INFO_SAMP_FREQ:
729 		if (!data->chip_info->sampling_freq_avail)
730 			return -EINVAL;
731 
732 		*val = data->chip_info->sampling_freq_avail[data->sampling_freq][0];
733 		*val2 = data->chip_info->sampling_freq_avail[data->sampling_freq][1];
734 		return IIO_VAL_INT_PLUS_MICRO;
735 	case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
736 		if (!data->chip_info->iir_filter_coeffs_avail)
737 			return -EINVAL;
738 
739 		*val = (1 << data->iir_filter_coeff) - 1;
740 		return IIO_VAL_INT;
741 	default:
742 		return -EINVAL;
743 	}
744 }
745 
746 static int bmp280_read_raw(struct iio_dev *indio_dev,
747 			   struct iio_chan_spec const *chan,
748 			   int *val, int *val2, long mask)
749 {
750 	struct bmp280_data *data = iio_priv(indio_dev);
751 	int ret;
752 
753 	pm_runtime_get_sync(data->dev);
754 	ret = bmp280_read_raw_impl(indio_dev, chan, val, val2, mask);
755 	pm_runtime_put_autosuspend(data->dev);
756 
757 	return ret;
758 }
759 
760 static int bme280_write_oversampling_ratio_humid(struct bmp280_data *data,
761 						 int val)
762 {
763 	const int *avail = data->chip_info->oversampling_humid_avail;
764 	const int n = data->chip_info->num_oversampling_humid_avail;
765 	int ret, prev;
766 	int i;
767 
768 	for (i = 0; i < n; i++) {
769 		if (avail[i] == val) {
770 			prev = data->oversampling_humid;
771 			data->oversampling_humid = ilog2(val);
772 
773 			ret = data->chip_info->chip_config(data);
774 			if (ret) {
775 				data->oversampling_humid = prev;
776 				data->chip_info->chip_config(data);
777 				return ret;
778 			}
779 			return 0;
780 		}
781 	}
782 	return -EINVAL;
783 }
784 
785 static int bmp280_write_oversampling_ratio_temp(struct bmp280_data *data,
786 						int val)
787 {
788 	const int *avail = data->chip_info->oversampling_temp_avail;
789 	const int n = data->chip_info->num_oversampling_temp_avail;
790 	int ret, prev;
791 	int i;
792 
793 	for (i = 0; i < n; i++) {
794 		if (avail[i] == val) {
795 			prev = data->oversampling_temp;
796 			data->oversampling_temp = ilog2(val);
797 
798 			ret = data->chip_info->chip_config(data);
799 			if (ret) {
800 				data->oversampling_temp = prev;
801 				data->chip_info->chip_config(data);
802 				return ret;
803 			}
804 			return 0;
805 		}
806 	}
807 	return -EINVAL;
808 }
809 
810 static int bmp280_write_oversampling_ratio_press(struct bmp280_data *data,
811 						 int val)
812 {
813 	const int *avail = data->chip_info->oversampling_press_avail;
814 	const int n = data->chip_info->num_oversampling_press_avail;
815 	int ret, prev;
816 	int i;
817 
818 	for (i = 0; i < n; i++) {
819 		if (avail[i] == val) {
820 			prev = data->oversampling_press;
821 			data->oversampling_press = ilog2(val);
822 
823 			ret = data->chip_info->chip_config(data);
824 			if (ret) {
825 				data->oversampling_press = prev;
826 				data->chip_info->chip_config(data);
827 				return ret;
828 			}
829 			return 0;
830 		}
831 	}
832 	return -EINVAL;
833 }
834 
835 static int bmp280_write_sampling_frequency(struct bmp280_data *data,
836 					   int val, int val2)
837 {
838 	const int (*avail)[2] = data->chip_info->sampling_freq_avail;
839 	const int n = data->chip_info->num_sampling_freq_avail;
840 	int ret, prev;
841 	int i;
842 
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;
847 
848 			ret = data->chip_info->chip_config(data);
849 			if (ret) {
850 				data->sampling_freq = prev;
851 				data->chip_info->chip_config(data);
852 				return ret;
853 			}
854 			return 0;
855 		}
856 	}
857 	return -EINVAL;
858 }
859 
860 static int bmp280_write_iir_filter_coeffs(struct bmp280_data *data, int val)
861 {
862 	const int *avail = data->chip_info->iir_filter_coeffs_avail;
863 	const int n = data->chip_info->num_iir_filter_coeffs_avail;
864 	int ret, prev;
865 	int i;
866 
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;
871 
872 			ret = data->chip_info->chip_config(data);
873 			if (ret) {
874 				data->iir_filter_coeff = prev;
875 				data->chip_info->chip_config(data);
876 				return ret;
877 
878 			}
879 			return 0;
880 		}
881 	}
882 	return -EINVAL;
883 }
884 
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)
888 {
889 	struct bmp280_data *data = iio_priv(indio_dev);
890 
891 	guard(mutex)(&data->lock);
892 
893 	/*
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.
898 	 */
899 	switch (mask) {
900 	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
901 		switch (chan->type) {
902 		case IIO_HUMIDITYRELATIVE:
903 			return bme280_write_oversampling_ratio_humid(data, val);
904 		case IIO_PRESSURE:
905 			return bmp280_write_oversampling_ratio_press(data, val);
906 		case IIO_TEMP:
907 			return bmp280_write_oversampling_ratio_temp(data, val);
908 		default:
909 			return -EINVAL;
910 		}
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);
915 	default:
916 		return -EINVAL;
917 	}
918 }
919 
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)
923 {
924 	struct bmp280_data *data = iio_priv(indio_dev);
925 	int ret;
926 
927 	pm_runtime_get_sync(data->dev);
928 	ret = bmp280_write_raw_impl(indio_dev, chan, val, val2, mask);
929 	pm_runtime_put_autosuspend(data->dev);
930 
931 	return ret;
932 }
933 
934 static int bmp280_read_avail(struct iio_dev *indio_dev,
935 			     struct iio_chan_spec const *chan,
936 			     const int **vals, int *type, int *length,
937 			     long mask)
938 {
939 	struct bmp280_data *data = iio_priv(indio_dev);
940 
941 	switch (mask) {
942 	case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
943 		switch (chan->type) {
944 		case IIO_PRESSURE:
945 			*vals = data->chip_info->oversampling_press_avail;
946 			*length = data->chip_info->num_oversampling_press_avail;
947 			break;
948 		case IIO_TEMP:
949 			*vals = data->chip_info->oversampling_temp_avail;
950 			*length = data->chip_info->num_oversampling_temp_avail;
951 			break;
952 		default:
953 			return -EINVAL;
954 		}
955 		*type = IIO_VAL_INT;
956 		return IIO_AVAIL_LIST;
957 	case IIO_CHAN_INFO_SAMP_FREQ:
958 		*vals = (const int *)data->chip_info->sampling_freq_avail;
959 		*type = IIO_VAL_INT_PLUS_MICRO;
960 		/* Values are stored in a 2D matrix */
961 		*length = data->chip_info->num_sampling_freq_avail;
962 		return IIO_AVAIL_LIST;
963 	case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
964 		*vals = data->chip_info->iir_filter_coeffs_avail;
965 		*type = IIO_VAL_INT;
966 		*length = data->chip_info->num_iir_filter_coeffs_avail;
967 		return IIO_AVAIL_LIST;
968 	default:
969 		return -EINVAL;
970 	}
971 }
972 
973 static const struct iio_info bmp280_info = {
974 	.read_raw = &bmp280_read_raw,
975 	.read_avail = &bmp280_read_avail,
976 	.write_raw = &bmp280_write_raw,
977 };
978 
979 static const unsigned long bmp280_avail_scan_masks[] = {
980 	BIT(BMP280_TEMP) | BIT(BMP280_PRESS),
981 	0
982 };
983 
984 static const unsigned long bme280_avail_scan_masks[] = {
985 	BIT(BME280_HUMID) | BIT(BMP280_TEMP) | BIT(BMP280_PRESS),
986 	0
987 };
988 
989 static int bmp280_preinit(struct bmp280_data *data)
990 {
991 	struct device *dev = data->dev;
992 	unsigned int reg;
993 	int ret;
994 
995 	ret = regmap_write(data->regmap, BMP280_REG_RESET, BMP280_RST_SOFT_CMD);
996 	if (ret)
997 		return dev_err_probe(dev, ret, "Failed to reset device.\n");
998 
999 	/*
1000 	 * According to the datasheet in Chapter 1: Specification, Table 2,
1001 	 * after resetting, the device uses the complete power-on sequence so
1002 	 * it needs to wait for the defined start-up time.
1003 	 */
1004 	fsleep(data->start_up_time_us);
1005 
1006 	ret = regmap_read(data->regmap, BMP280_REG_STATUS, &reg);
1007 	if (ret)
1008 		return dev_err_probe(dev, ret, "Failed to read status register.\n");
1009 
1010 	if (reg & BMP280_REG_STATUS_IM_UPDATE)
1011 		return dev_err_probe(dev, -EIO, "Failed to copy NVM contents.\n");
1012 
1013 	return 0;
1014 }
1015 
1016 static const u8 bmp280_operation_mode[] = {
1017 	[BMP280_SLEEP] = BMP280_MODE_SLEEP,
1018 	[BMP280_FORCED] = BMP280_MODE_FORCED,
1019 	[BMP280_NORMAL] = BMP280_MODE_NORMAL,
1020 };
1021 
1022 static int bmp280_set_mode(struct bmp280_data *data, enum bmp280_op_mode mode)
1023 {
1024 	int ret;
1025 
1026 	ret = regmap_write_bits(data->regmap, BMP280_REG_CTRL_MEAS,
1027 				BMP280_MODE_MASK, bmp280_operation_mode[mode]);
1028 	if (ret) {
1029 		dev_err(data->dev, "failed to  write ctrl_meas register.\n");
1030 		return ret;
1031 	}
1032 
1033 	data->op_mode = mode;
1034 
1035 	return 0;
1036 }
1037 
1038 static int bmp280_wait_conv(struct bmp280_data *data)
1039 {
1040 	unsigned int reg, meas_time_us;
1041 	int ret;
1042 
1043 	/* Check if we are using a BME280 device */
1044 	if (data->oversampling_humid)
1045 		meas_time_us = BMP280_PRESS_HUMID_MEAS_OFFSET +
1046 				BIT(data->oversampling_humid) * BMP280_MEAS_DUR;
1047 
1048 	else
1049 		meas_time_us = 0;
1050 
1051 	/* Pressure measurement time */
1052 	meas_time_us += BMP280_PRESS_HUMID_MEAS_OFFSET +
1053 			BIT(data->oversampling_press) * BMP280_MEAS_DUR;
1054 
1055 	/* Temperature measurement time */
1056 	meas_time_us += BIT(data->oversampling_temp) * BMP280_MEAS_DUR;
1057 
1058 	/* Waiting time according to the BM(P/E)2 Sensor API */
1059 	fsleep(meas_time_us);
1060 
1061 	ret = regmap_read(data->regmap, BMP280_REG_STATUS, &reg);
1062 	if (ret) {
1063 		dev_err(data->dev, "failed to read status register.\n");
1064 		return ret;
1065 	}
1066 
1067 	if (reg & BMP280_REG_STATUS_MEAS_BIT) {
1068 		dev_err(data->dev, "Measurement cycle didn't complete.\n");
1069 		return -EBUSY;
1070 	}
1071 
1072 	return 0;
1073 }
1074 
1075 static int bmp280_chip_config(struct bmp280_data *data)
1076 {
1077 	u8 osrs = FIELD_PREP(BMP280_OSRS_TEMP_MASK, data->oversampling_temp + 1) |
1078 		  FIELD_PREP(BMP280_OSRS_PRESS_MASK, data->oversampling_press + 1);
1079 	int ret;
1080 
1081 	ret = regmap_write_bits(data->regmap, BMP280_REG_CTRL_MEAS,
1082 				BMP280_OSRS_TEMP_MASK |
1083 				BMP280_OSRS_PRESS_MASK |
1084 				BMP280_MODE_MASK,
1085 				osrs | BMP280_MODE_SLEEP);
1086 	if (ret) {
1087 		dev_err(data->dev, "failed to write ctrl_meas register\n");
1088 		return ret;
1089 	}
1090 
1091 	ret = regmap_update_bits(data->regmap, BMP280_REG_CONFIG,
1092 				 BMP280_FILTER_MASK,
1093 				 BMP280_FILTER_4X);
1094 	if (ret) {
1095 		dev_err(data->dev, "failed to write config register\n");
1096 		return ret;
1097 	}
1098 
1099 	return ret;
1100 }
1101 
1102 static irqreturn_t bmp280_trigger_handler(int irq, void *p)
1103 {
1104 	struct iio_poll_func *pf = p;
1105 	struct iio_dev *indio_dev = pf->indio_dev;
1106 	struct bmp280_data *data = iio_priv(indio_dev);
1107 	u32 adc_temp, adc_press;
1108 	s32 t_fine;
1109 	struct {
1110 		u32 comp_press;
1111 		s32 comp_temp;
1112 		aligned_s64 timestamp;
1113 	} buffer;
1114 	int ret;
1115 
1116 	guard(mutex)(&data->lock);
1117 
1118 	/* Burst read data registers */
1119 	ret = regmap_bulk_read(data->regmap, BMP280_REG_PRESS_MSB,
1120 			       data->buf, BMP280_BURST_READ_BYTES);
1121 	if (ret) {
1122 		dev_err(data->dev, "failed to burst read sensor data\n");
1123 		goto out;
1124 	}
1125 
1126 	/* Temperature calculations */
1127 	adc_temp = FIELD_GET(BMP280_MEAS_TRIM_MASK, get_unaligned_be24(&data->buf[3]));
1128 	if (adc_temp == BMP280_TEMP_SKIPPED) {
1129 		dev_err(data->dev, "reading temperature skipped\n");
1130 		goto out;
1131 	}
1132 
1133 	buffer.comp_temp = bmp280_compensate_temp(data, adc_temp);
1134 
1135 	/* Pressure calculations */
1136 	adc_press = FIELD_GET(BMP280_MEAS_TRIM_MASK, get_unaligned_be24(&data->buf[0]));
1137 	if (adc_press == BMP280_PRESS_SKIPPED) {
1138 		dev_err(data->dev, "reading pressure skipped\n");
1139 		goto out;
1140 	}
1141 
1142 	t_fine = bmp280_calc_t_fine(data, adc_temp);
1143 	buffer.comp_press = bmp280_compensate_press(data, adc_press, t_fine);
1144 
1145 	iio_push_to_buffers_with_ts(indio_dev, &buffer, sizeof(buffer),
1146 				    iio_get_time_ns(indio_dev));
1147 
1148 out:
1149 	iio_trigger_notify_done(indio_dev->trig);
1150 
1151 	return IRQ_HANDLED;
1152 }
1153 
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 };
1158 
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_us = 2000,
1165 	.channels = bmp280_channels,
1166 	.num_channels = ARRAY_SIZE(bmp280_channels),
1167 	.avail_scan_masks = bmp280_avail_scan_masks,
1168 
1169 	.oversampling_temp_avail = bmp280_oversampling_avail,
1170 	.num_oversampling_temp_avail = ARRAY_SIZE(bmp280_oversampling_avail),
1171 	/*
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.
1176 	 *
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.
1180 	 */
1181 	.oversampling_temp_default = BMP280_OSRS_TEMP_2X - 1,
1182 
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,
1186 
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,
1191 
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,
1199 
1200 	.trigger_handler = bmp280_trigger_handler,
1201 };
1202 EXPORT_SYMBOL_NS(bmp280_chip_info, "IIO_BMP280");
1203 
1204 static int bme280_chip_config(struct bmp280_data *data)
1205 {
1206 	u8 osrs = FIELD_PREP(BME280_OSRS_HUMIDITY_MASK, data->oversampling_humid + 1);
1207 	int ret;
1208 
1209 	/*
1210 	 * Oversampling of humidity must be set before oversampling of
1211 	 * temperature/pressure is set to become effective.
1212 	 */
1213 	ret = regmap_update_bits(data->regmap, BME280_REG_CTRL_HUMIDITY,
1214 				 BME280_OSRS_HUMIDITY_MASK, osrs);
1215 	if (ret) {
1216 		dev_err(data->dev, "failed to set humidity oversampling");
1217 		return ret;
1218 	}
1219 
1220 	return bmp280_chip_config(data);
1221 }
1222 
1223 static irqreturn_t bme280_trigger_handler(int irq, void *p)
1224 {
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;
1229 	s32 t_fine;
1230 	struct {
1231 		u32 comp_press;
1232 		s32 comp_temp;
1233 		u32 comp_humidity;
1234 		aligned_s64 timestamp;
1235 	} buffer = { }; /* Don't leak uninitialized stack to userspace. */
1236 	int ret;
1237 
1238 	guard(mutex)(&data->lock);
1239 
1240 	/* Burst read data registers */
1241 	ret = regmap_bulk_read(data->regmap, BMP280_REG_PRESS_MSB,
1242 			       data->buf, BME280_BURST_READ_BYTES);
1243 	if (ret) {
1244 		dev_err(data->dev, "failed to burst read sensor data\n");
1245 		goto out;
1246 	}
1247 
1248 	/* Temperature calculations */
1249 	adc_temp = FIELD_GET(BMP280_MEAS_TRIM_MASK, get_unaligned_be24(&data->buf[3]));
1250 	if (adc_temp == BMP280_TEMP_SKIPPED) {
1251 		dev_err(data->dev, "reading temperature skipped\n");
1252 		goto out;
1253 	}
1254 
1255 	buffer.comp_temp = bmp280_compensate_temp(data, adc_temp);
1256 
1257 	/* Pressure calculations */
1258 	adc_press = FIELD_GET(BMP280_MEAS_TRIM_MASK, get_unaligned_be24(&data->buf[0]));
1259 	if (adc_press == BMP280_PRESS_SKIPPED) {
1260 		dev_err(data->dev, "reading pressure skipped\n");
1261 		goto out;
1262 	}
1263 
1264 	t_fine = bmp280_calc_t_fine(data, adc_temp);
1265 	buffer.comp_press = bmp280_compensate_press(data, adc_press, t_fine);
1266 
1267 	/* Humidity calculations */
1268 	adc_humidity = get_unaligned_be16(&data->buf[6]);
1269 
1270 	if (adc_humidity == BMP280_HUMIDITY_SKIPPED) {
1271 		dev_err(data->dev, "reading humidity skipped\n");
1272 		goto out;
1273 	}
1274 
1275 	buffer.comp_humidity = bme280_compensate_humidity(data, adc_humidity,
1276 							  t_fine);
1277 
1278 	iio_push_to_buffers_with_ts(indio_dev, &buffer, sizeof(buffer),
1279 				    iio_get_time_ns(indio_dev));
1280 
1281 out:
1282 	iio_trigger_notify_done(indio_dev->trig);
1283 
1284 	return IRQ_HANDLED;
1285 }
1286 
1287 static int __bmp280_trigger_probe(struct iio_dev *indio_dev,
1288 				  const struct iio_trigger_ops *trigger_ops,
1289 				  int (*int_pin_config)(struct bmp280_data *data),
1290 				  irq_handler_t irq_thread_handler)
1291 {
1292 	struct bmp280_data *data = iio_priv(indio_dev);
1293 	struct device *dev = data->dev;
1294 	u32 irq_type;
1295 	int ret, irq;
1296 
1297 	irq = fwnode_irq_get(dev_fwnode(dev), 0);
1298 	if (irq < 0)
1299 		return dev_err_probe(dev, irq, "No interrupt found.\n");
1300 
1301 	irq_type = irq_get_trigger_type(irq);
1302 	switch (irq_type) {
1303 	case IRQF_TRIGGER_RISING:
1304 		data->trig_active_high = true;
1305 		break;
1306 	case IRQF_TRIGGER_FALLING:
1307 		data->trig_active_high = false;
1308 		break;
1309 	default:
1310 		return dev_err_probe(dev, -EINVAL, "Invalid interrupt type specified.\n");
1311 	}
1312 
1313 	data->trig_open_drain =
1314 		fwnode_property_read_bool(dev_fwnode(dev), "int-open-drain");
1315 
1316 	ret = int_pin_config(data);
1317 	if (ret)
1318 		return ret;
1319 
1320 	data->trig = devm_iio_trigger_alloc(data->dev, "%s-dev%d",
1321 					    indio_dev->name,
1322 					    iio_device_id(indio_dev));
1323 	if (!data->trig)
1324 		return -ENOMEM;
1325 
1326 	data->trig->ops = trigger_ops;
1327 	iio_trigger_set_drvdata(data->trig, data);
1328 
1329 	ret = devm_request_threaded_irq(data->dev, irq, NULL,
1330 					irq_thread_handler, IRQF_ONESHOT,
1331 					indio_dev->name, indio_dev);
1332 	if (ret)
1333 		return dev_err_probe(dev, ret, "request IRQ failed.\n");
1334 
1335 	ret = devm_iio_trigger_register(data->dev, data->trig);
1336 	if (ret)
1337 		return dev_err_probe(dev, ret, "iio trigger register failed.\n");
1338 
1339 	indio_dev->trig = iio_trigger_get(data->trig);
1340 
1341 	return 0;
1342 }
1343 
1344 static const u8 bme280_chip_ids[] = { BME280_CHIP_ID };
1345 static const int bme280_humid_coeffs[] = { 1000, 1024 };
1346 
1347 const struct bmp280_chip_info bme280_chip_info = {
1348 	.id_reg = BMP280_REG_ID,
1349 	.chip_id = bme280_chip_ids,
1350 	.num_chip_id = ARRAY_SIZE(bme280_chip_ids),
1351 	.regmap_config = &bme280_regmap_config,
1352 	.start_up_time_us = 2000,
1353 	.channels = bme280_channels,
1354 	.num_channels = ARRAY_SIZE(bme280_channels),
1355 	.avail_scan_masks = bme280_avail_scan_masks,
1356 
1357 	.oversampling_temp_avail = bmp280_oversampling_avail,
1358 	.num_oversampling_temp_avail = ARRAY_SIZE(bmp280_oversampling_avail),
1359 	.oversampling_temp_default = BMP280_OSRS_TEMP_2X - 1,
1360 
1361 	.oversampling_press_avail = bmp280_oversampling_avail,
1362 	.num_oversampling_press_avail = ARRAY_SIZE(bmp280_oversampling_avail),
1363 	.oversampling_press_default = BMP280_OSRS_PRESS_16X - 1,
1364 
1365 	.oversampling_humid_avail = bmp280_oversampling_avail,
1366 	.num_oversampling_humid_avail = ARRAY_SIZE(bmp280_oversampling_avail),
1367 	.oversampling_humid_default = BME280_OSRS_HUMIDITY_16X - 1,
1368 
1369 	.temp_coeffs = bmp280_temp_coeffs,
1370 	.temp_coeffs_type = IIO_VAL_FRACTIONAL,
1371 	.press_coeffs = bmp280_press_coeffs,
1372 	.press_coeffs_type = IIO_VAL_FRACTIONAL,
1373 	.humid_coeffs = bme280_humid_coeffs,
1374 	.humid_coeffs_type = IIO_VAL_FRACTIONAL,
1375 
1376 	.chip_config = bme280_chip_config,
1377 	.read_temp = bmp280_read_temp,
1378 	.read_press = bmp280_read_press,
1379 	.read_humid = bme280_read_humid,
1380 	.read_calib = bme280_read_calib,
1381 	.set_mode = bmp280_set_mode,
1382 	.wait_conv = bmp280_wait_conv,
1383 	.preinit = bmp280_preinit,
1384 
1385 	.trigger_handler = bme280_trigger_handler,
1386 };
1387 EXPORT_SYMBOL_NS(bme280_chip_info, "IIO_BMP280");
1388 
1389 /*
1390  * Helper function to send a command to BMP3XX sensors.
1391  *
1392  * Sensor processes commands written to the CMD register and signals
1393  * execution result through "cmd_rdy" and "cmd_error" flags available on
1394  * STATUS and ERROR registers.
1395  */
1396 static int bmp380_cmd(struct bmp280_data *data, u8 cmd)
1397 {
1398 	unsigned int reg;
1399 	int ret;
1400 
1401 	/* Check if device is ready to process a command */
1402 	ret = regmap_read(data->regmap, BMP380_REG_STATUS, &reg);
1403 	if (ret) {
1404 		dev_err(data->dev, "failed to read error register\n");
1405 		return ret;
1406 	}
1407 	if (!(reg & BMP380_STATUS_CMD_RDY_MASK)) {
1408 		dev_err(data->dev, "device is not ready to accept commands\n");
1409 		return -EBUSY;
1410 	}
1411 
1412 	/* Send command to process */
1413 	ret = regmap_write(data->regmap, BMP380_REG_CMD, cmd);
1414 	if (ret) {
1415 		dev_err(data->dev, "failed to send command to device\n");
1416 		return ret;
1417 	}
1418 	/* Wait for 2ms for command to be processed */
1419 	fsleep(data->start_up_time_us);
1420 	/* Check for command processing error */
1421 	ret = regmap_read(data->regmap, BMP380_REG_ERROR, &reg);
1422 	if (ret) {
1423 		dev_err(data->dev, "error reading ERROR reg\n");
1424 		return ret;
1425 	}
1426 	if (reg & BMP380_ERR_CMD_MASK) {
1427 		dev_err(data->dev, "error processing command 0x%X\n", cmd);
1428 		return -EINVAL;
1429 	}
1430 
1431 	return 0;
1432 }
1433 
1434 static int bmp380_read_temp_adc(struct bmp280_data *data, u32 *adc_temp)
1435 {
1436 	u32 value_temp;
1437 	int ret;
1438 
1439 	ret = regmap_bulk_read(data->regmap, BMP380_REG_TEMP_XLSB,
1440 			       data->buf, BMP280_NUM_TEMP_BYTES);
1441 	if (ret) {
1442 		dev_err(data->dev, "failed to read temperature\n");
1443 		return ret;
1444 	}
1445 
1446 	value_temp = get_unaligned_le24(data->buf);
1447 	if (value_temp == BMP380_TEMP_SKIPPED) {
1448 		dev_err(data->dev, "reading temperature skipped\n");
1449 		return -EIO;
1450 	}
1451 	*adc_temp = value_temp;
1452 
1453 	return 0;
1454 }
1455 
1456 /*
1457  * Returns temperature in Celsius degrees, resolution is 0.01º C. Output value
1458  * of "5123" equals 51.2º C. t_fine carries fine temperature as global value.
1459  *
1460  * Taken from datasheet, Section Appendix 9, "Compensation formula" and repo
1461  * https://github.com/BoschSensortec/BMP3-Sensor-API.
1462  */
1463 static s32 bmp380_calc_t_fine(struct bmp280_data *data, u32 adc_temp)
1464 {
1465 	s64 var1, var2, var3, var4, var5, var6;
1466 	struct bmp380_calib *calib = &data->calib.bmp380;
1467 
1468 	var1 = ((s64) adc_temp) - (((s64) calib->T1) << 8);
1469 	var2 = var1 * ((s64) calib->T2);
1470 	var3 = var1 * var1;
1471 	var4 = var3 * ((s64) calib->T3);
1472 	var5 = (var2 << 18) + var4;
1473 	var6 = var5 >> 32;
1474 	return (s32)var6; /* t_fine = var6 */
1475 }
1476 
1477 static int bmp380_get_t_fine(struct bmp280_data *data, s32 *t_fine)
1478 {
1479 	s32 adc_temp;
1480 	int ret;
1481 
1482 	ret = bmp380_read_temp_adc(data, &adc_temp);
1483 	if (ret)
1484 		return ret;
1485 
1486 	*t_fine = bmp380_calc_t_fine(data, adc_temp);
1487 
1488 	return 0;
1489 }
1490 
1491 static int bmp380_compensate_temp(struct bmp280_data *data, u32 adc_temp)
1492 {
1493 	s64 comp_temp;
1494 	s32 var6;
1495 
1496 	var6 = bmp380_calc_t_fine(data, adc_temp);
1497 	comp_temp = (var6 * 25) >> 14;
1498 
1499 	comp_temp = clamp_val(comp_temp, BMP380_MIN_TEMP, BMP380_MAX_TEMP);
1500 	return (s32) comp_temp;
1501 }
1502 
1503 static int bmp380_read_press_adc(struct bmp280_data *data, u32 *adc_press)
1504 {
1505 	u32 value_press;
1506 	int ret;
1507 
1508 	ret = regmap_bulk_read(data->regmap, BMP380_REG_PRESS_XLSB,
1509 			       data->buf, BMP280_NUM_PRESS_BYTES);
1510 	if (ret) {
1511 		dev_err(data->dev, "failed to read pressure\n");
1512 		return ret;
1513 	}
1514 
1515 	value_press = get_unaligned_le24(data->buf);
1516 	if (value_press == BMP380_PRESS_SKIPPED) {
1517 		dev_err(data->dev, "reading pressure skipped\n");
1518 		return -EIO;
1519 	}
1520 	*adc_press = value_press;
1521 
1522 	return 0;
1523 }
1524 
1525 /*
1526  * Returns pressure in Pa as an unsigned 32 bit integer in fractional Pascal.
1527  * Output value of "9528709" represents 9528709/100 = 95287.09 Pa = 952.8709 hPa.
1528  *
1529  * Taken from datasheet, Section 9.3. "Pressure compensation" and repository
1530  * https://github.com/BoschSensortec/BMP3-Sensor-API.
1531  */
1532 static u32 bmp380_compensate_press(struct bmp280_data *data,
1533 				   u32 adc_press, s32 t_fine)
1534 {
1535 	s64 var1, var2, var3, var4, var5, var6, offset, sensitivity;
1536 	struct bmp380_calib *calib = &data->calib.bmp380;
1537 	u32 comp_press;
1538 
1539 	var1 = (s64)t_fine * (s64)t_fine;
1540 	var2 = var1 >> 6;
1541 	var3 = (var2 * ((s64)t_fine)) >> 8;
1542 	var4 = ((s64)calib->P8 * var3) >> 5;
1543 	var5 = ((s64)calib->P7 * var1) << 4;
1544 	var6 = ((s64)calib->P6 * (s64)t_fine) << 22;
1545 	offset = ((s64)calib->P5 << 47) + var4 + var5 + var6;
1546 	var2 = ((s64)calib->P4 * var3) >> 5;
1547 	var4 = ((s64)calib->P3 * var1) << 2;
1548 	var5 = ((s64)calib->P2 - ((s64)1 << 14)) *
1549 	       ((s64)t_fine << 21);
1550 	sensitivity = (((s64) calib->P1 - ((s64) 1 << 14)) << 46) +
1551 			var2 + var4 + var5;
1552 	var1 = (sensitivity >> 24) * (s64)adc_press;
1553 	var2 = (s64)calib->P10 * (s64)t_fine;
1554 	var3 = var2 + ((s64)calib->P9 << 16);
1555 	var4 = (var3 * (s64)adc_press) >> 13;
1556 
1557 	/*
1558 	 * Dividing by 10 followed by multiplying by 10 to avoid
1559 	 * possible overflow caused by (uncomp_data->pressure * partial_data4).
1560 	 */
1561 	var5 = ((s64)adc_press * div_s64(var4, 10)) >> 9;
1562 	var5 *= 10;
1563 	var6 = (s64)adc_press * (s64)adc_press;
1564 	var2 = ((s64)calib->P11 * var6) >> 16;
1565 	var3 = (var2 * (s64)adc_press) >> 7;
1566 	var4 = (offset >> 2) + var1 + var5 + var3;
1567 	comp_press = ((u64)var4 * 25) >> 40;
1568 
1569 	comp_press = clamp_val(comp_press, BMP380_MIN_PRES, BMP380_MAX_PRES);
1570 	return comp_press;
1571 }
1572 
1573 static int bmp380_read_temp(struct bmp280_data *data, s32 *comp_temp)
1574 {
1575 	u32 adc_temp;
1576 	int ret;
1577 
1578 	ret = bmp380_read_temp_adc(data, &adc_temp);
1579 	if (ret)
1580 		return ret;
1581 
1582 	*comp_temp = bmp380_compensate_temp(data, adc_temp);
1583 
1584 	return 0;
1585 }
1586 
1587 static int bmp380_read_press(struct bmp280_data *data, u32 *comp_press)
1588 {
1589 	u32 adc_press, t_fine;
1590 	int ret;
1591 
1592 	ret = bmp380_get_t_fine(data, &t_fine);
1593 	if (ret)
1594 		return ret;
1595 
1596 	ret = bmp380_read_press_adc(data, &adc_press);
1597 	if (ret)
1598 		return ret;
1599 
1600 	*comp_press = bmp380_compensate_press(data, adc_press, t_fine);
1601 
1602 	return 0;
1603 }
1604 
1605 static int bmp380_read_calib(struct bmp280_data *data)
1606 {
1607 	struct bmp380_calib *calib = &data->calib.bmp380;
1608 	int ret;
1609 
1610 	/* Read temperature and pressure calibration data */
1611 	ret = regmap_bulk_read(data->regmap, BMP380_REG_CALIB_TEMP_START,
1612 			       data->bmp380_cal_buf,
1613 			       sizeof(data->bmp380_cal_buf));
1614 	if (ret) {
1615 		dev_err(data->dev,
1616 			"failed to read calibration parameters\n");
1617 		return ret;
1618 	}
1619 
1620 	/* Toss the temperature calibration data into the entropy pool */
1621 	add_device_randomness(data->bmp380_cal_buf,
1622 			      sizeof(data->bmp380_cal_buf));
1623 
1624 	/* Parse calibration values */
1625 	calib->T1 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_T1]);
1626 	calib->T2 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_T2]);
1627 	calib->T3 = data->bmp380_cal_buf[BMP380_T3];
1628 	calib->P1 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P1]);
1629 	calib->P2 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P2]);
1630 	calib->P3 = data->bmp380_cal_buf[BMP380_P3];
1631 	calib->P4 = data->bmp380_cal_buf[BMP380_P4];
1632 	calib->P5 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P5]);
1633 	calib->P6 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P6]);
1634 	calib->P7 = data->bmp380_cal_buf[BMP380_P7];
1635 	calib->P8 = data->bmp380_cal_buf[BMP380_P8];
1636 	calib->P9 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P9]);
1637 	calib->P10 = data->bmp380_cal_buf[BMP380_P10];
1638 	calib->P11 = data->bmp380_cal_buf[BMP380_P11];
1639 
1640 	return 0;
1641 }
1642 
1643 static const int bmp380_odr_table[][2] = {
1644 	[BMP380_ODR_200HZ]	= {200, 0},
1645 	[BMP380_ODR_100HZ]	= {100, 0},
1646 	[BMP380_ODR_50HZ]	= {50, 0},
1647 	[BMP380_ODR_25HZ]	= {25, 0},
1648 	[BMP380_ODR_12_5HZ]	= {12, 500000},
1649 	[BMP380_ODR_6_25HZ]	= {6, 250000},
1650 	[BMP380_ODR_3_125HZ]	= {3, 125000},
1651 	[BMP380_ODR_1_5625HZ]	= {1, 562500},
1652 	[BMP380_ODR_0_78HZ]	= {0, 781250},
1653 	[BMP380_ODR_0_39HZ]	= {0, 390625},
1654 	[BMP380_ODR_0_2HZ]	= {0, 195313},
1655 	[BMP380_ODR_0_1HZ]	= {0, 97656},
1656 	[BMP380_ODR_0_05HZ]	= {0, 48828},
1657 	[BMP380_ODR_0_02HZ]	= {0, 24414},
1658 	[BMP380_ODR_0_01HZ]	= {0, 12207},
1659 	[BMP380_ODR_0_006HZ]	= {0, 6104},
1660 	[BMP380_ODR_0_003HZ]	= {0, 3052},
1661 	[BMP380_ODR_0_0015HZ]	= {0, 1526},
1662 };
1663 
1664 static int bmp380_preinit(struct bmp280_data *data)
1665 {
1666 	/* BMP3xx requires soft-reset as part of initialization */
1667 	return bmp380_cmd(data, BMP380_CMD_SOFT_RESET);
1668 }
1669 
1670 static const u8 bmp380_operation_mode[] = {
1671 	[BMP280_SLEEP] = BMP380_MODE_SLEEP,
1672 	[BMP280_FORCED] = BMP380_MODE_FORCED,
1673 	[BMP280_NORMAL] = BMP380_MODE_NORMAL,
1674 };
1675 
1676 static int bmp380_set_mode(struct bmp280_data *data, enum bmp280_op_mode mode)
1677 {
1678 	int ret;
1679 
1680 	ret = regmap_write_bits(data->regmap, BMP380_REG_POWER_CONTROL,
1681 				BMP380_MODE_MASK,
1682 				FIELD_PREP(BMP380_MODE_MASK,
1683 					   bmp380_operation_mode[mode]));
1684 	if (ret) {
1685 		dev_err(data->dev, "failed to  write power control register.\n");
1686 		return ret;
1687 	}
1688 
1689 	data->op_mode = mode;
1690 
1691 	return 0;
1692 }
1693 
1694 static int bmp380_wait_conv(struct bmp280_data *data)
1695 {
1696 	unsigned int reg;
1697 	int ret, meas_time_us;
1698 
1699 	/* Offset measurement time */
1700 	meas_time_us = BMP380_MEAS_OFFSET;
1701 
1702 	/* Pressure measurement time */
1703 	meas_time_us += BMP380_PRESS_MEAS_OFFSET +
1704 		     BIT(data->oversampling_press) * BMP380_MEAS_DUR;
1705 
1706 	/* Temperature measurement time */
1707 	meas_time_us += BMP380_TEMP_MEAS_OFFSET +
1708 		     BIT(data->oversampling_temp) * BMP380_MEAS_DUR;
1709 
1710 	/* Measurement time defined in Datasheet Section 3.9.2 */
1711 	fsleep(meas_time_us);
1712 
1713 	ret = regmap_read(data->regmap, BMP380_REG_STATUS, &reg);
1714 	if (ret) {
1715 		dev_err(data->dev, "failed to read status register.\n");
1716 		return ret;
1717 	}
1718 
1719 	if (!((reg & BMP380_STATUS_DRDY_PRESS_MASK) &&
1720 	      (reg & BMP380_STATUS_DRDY_TEMP_MASK))) {
1721 		dev_err(data->dev, "Measurement cycle didn't complete.\n");
1722 		return -EBUSY;
1723 	}
1724 
1725 	return 0;
1726 }
1727 
1728 static int bmp380_chip_config(struct bmp280_data *data)
1729 {
1730 	bool change = false, aux;
1731 	unsigned int tmp;
1732 	u8 osrs;
1733 	int ret;
1734 
1735 	/* Configure power control register */
1736 	ret = regmap_update_bits(data->regmap, BMP380_REG_POWER_CONTROL,
1737 				 BMP380_CTRL_SENSORS_MASK,
1738 				 BMP380_CTRL_SENSORS_PRESS_EN |
1739 				 BMP380_CTRL_SENSORS_TEMP_EN);
1740 	if (ret) {
1741 		dev_err(data->dev,
1742 			"failed to write operation control register\n");
1743 		return ret;
1744 	}
1745 
1746 	/* Configure oversampling */
1747 	osrs = FIELD_PREP(BMP380_OSRS_TEMP_MASK, data->oversampling_temp) |
1748 	       FIELD_PREP(BMP380_OSRS_PRESS_MASK, data->oversampling_press);
1749 
1750 	ret = regmap_update_bits_check(data->regmap, BMP380_REG_OSR,
1751 				       BMP380_OSRS_TEMP_MASK |
1752 				       BMP380_OSRS_PRESS_MASK,
1753 				       osrs, &aux);
1754 	if (ret) {
1755 		dev_err(data->dev, "failed to write oversampling register\n");
1756 		return ret;
1757 	}
1758 	change = change || aux;
1759 
1760 	/* Configure output data rate */
1761 	ret = regmap_update_bits_check(data->regmap, BMP380_REG_ODR,
1762 				       BMP380_ODRS_MASK, data->sampling_freq,
1763 				       &aux);
1764 	if (ret) {
1765 		dev_err(data->dev, "failed to write ODR selection register\n");
1766 		return ret;
1767 	}
1768 	change = change || aux;
1769 
1770 	/* Set filter data */
1771 	ret = regmap_update_bits(data->regmap, BMP380_REG_CONFIG, BMP380_FILTER_MASK,
1772 				 FIELD_PREP(BMP380_FILTER_MASK, data->iir_filter_coeff));
1773 	if (ret) {
1774 		dev_err(data->dev, "failed to write config register\n");
1775 		return ret;
1776 	}
1777 
1778 	if (change) {
1779 		/*
1780 		 * The configurations errors are detected on the fly during a
1781 		 * measurement cycle. If the sampling frequency is too low, it's
1782 		 * faster to reset the measurement loop than wait until the next
1783 		 * measurement is due.
1784 		 *
1785 		 * Resets sensor measurement loop toggling between sleep and
1786 		 * normal operating modes.
1787 		 */
1788 		ret = bmp380_set_mode(data, BMP280_SLEEP);
1789 		if (ret) {
1790 			dev_err(data->dev, "failed to set sleep mode\n");
1791 			return ret;
1792 		}
1793 
1794 		/*
1795 		 * According to the BMP3 Sensor API, the sensor needs 5ms
1796 		 * in order to go to the sleep mode.
1797 		 */
1798 		fsleep(5 * USEC_PER_MSEC);
1799 
1800 		ret = bmp380_set_mode(data, BMP280_NORMAL);
1801 		if (ret) {
1802 			dev_err(data->dev, "failed to set normal mode\n");
1803 			return ret;
1804 		}
1805 		/*
1806 		 * Waits for measurement before checking configuration error
1807 		 * flag. Selected longest measurement time, calculated from
1808 		 * formula in datasheet section 3.9.2 with an offset of ~+15%
1809 		 * as it seen as well in table 3.9.1.
1810 		 */
1811 		fsleep(150 * USEC_PER_MSEC);
1812 
1813 		/* Check config error flag */
1814 		ret = regmap_read(data->regmap, BMP380_REG_ERROR, &tmp);
1815 		if (ret) {
1816 			dev_err(data->dev, "failed to read error register\n");
1817 			return ret;
1818 		}
1819 		if (tmp & BMP380_ERR_CONF_MASK) {
1820 			dev_warn(data->dev,
1821 				 "sensor flagged configuration as incompatible\n");
1822 			return -EINVAL;
1823 		}
1824 	}
1825 
1826 	/* Dummy read to empty data registers. */
1827 	ret = bmp380_read_press(data, &tmp);
1828 	if (ret)
1829 		return ret;
1830 
1831 	ret = bmp380_set_mode(data, BMP280_SLEEP);
1832 	if (ret)
1833 		dev_err(data->dev, "failed to set sleep mode.\n");
1834 
1835 	return ret;
1836 }
1837 
1838 static int bmp380_data_rdy_trigger_set_state(struct iio_trigger *trig,
1839 					     bool state)
1840 {
1841 	struct bmp280_data *data = iio_trigger_get_drvdata(trig);
1842 	int ret;
1843 
1844 	guard(mutex)(&data->lock);
1845 
1846 	ret = regmap_update_bits(data->regmap, BMP380_REG_INT_CONTROL,
1847 				 BMP380_INT_CTRL_DRDY_EN,
1848 				 FIELD_PREP(BMP380_INT_CTRL_DRDY_EN, !!state));
1849 	if (ret)
1850 		dev_err(data->dev,
1851 			"Could not %s interrupt.\n", str_enable_disable(state));
1852 	return ret;
1853 }
1854 
1855 static const struct iio_trigger_ops bmp380_trigger_ops = {
1856 	.set_trigger_state = &bmp380_data_rdy_trigger_set_state,
1857 };
1858 
1859 static int bmp380_int_pin_config(struct bmp280_data *data)
1860 {
1861 	int pin_drive_cfg = FIELD_PREP(BMP380_INT_CTRL_OPEN_DRAIN,
1862 				       data->trig_open_drain);
1863 	int pin_level_cfg = FIELD_PREP(BMP380_INT_CTRL_LEVEL,
1864 				       data->trig_active_high);
1865 	int ret, int_pin_cfg = pin_drive_cfg | pin_level_cfg;
1866 
1867 	ret = regmap_update_bits(data->regmap, BMP380_REG_INT_CONTROL,
1868 				 BMP380_INT_CTRL_SETTINGS_MASK, int_pin_cfg);
1869 	if (ret)
1870 		dev_err(data->dev, "Could not set interrupt settings.\n");
1871 
1872 	return ret;
1873 }
1874 
1875 static irqreturn_t bmp380_irq_thread_handler(int irq, void *p)
1876 {
1877 	struct iio_dev *indio_dev = p;
1878 	struct bmp280_data *data = iio_priv(indio_dev);
1879 	unsigned int int_ctrl;
1880 	int ret;
1881 
1882 	ret = regmap_read(data->regmap, BMP380_REG_INT_STATUS, &int_ctrl);
1883 	if (ret)
1884 		return IRQ_NONE;
1885 
1886 	if (FIELD_GET(BMP380_INT_STATUS_DRDY, int_ctrl))
1887 		iio_trigger_poll_nested(data->trig);
1888 
1889 	return IRQ_HANDLED;
1890 }
1891 
1892 static int bmp380_trigger_probe(struct iio_dev *indio_dev)
1893 {
1894 	return __bmp280_trigger_probe(indio_dev, &bmp380_trigger_ops,
1895 				      bmp380_int_pin_config,
1896 				      bmp380_irq_thread_handler);
1897 }
1898 
1899 static irqreturn_t bmp380_trigger_handler(int irq, void *p)
1900 {
1901 	struct iio_poll_func *pf = p;
1902 	struct iio_dev *indio_dev = pf->indio_dev;
1903 	struct bmp280_data *data = iio_priv(indio_dev);
1904 	u32 adc_temp, adc_press;
1905 	s32 t_fine;
1906 	struct {
1907 		u32 comp_press;
1908 		s32 comp_temp;
1909 		aligned_s64 timestamp;
1910 	} buffer;
1911 	int ret;
1912 
1913 	guard(mutex)(&data->lock);
1914 
1915 	/* Burst read data registers */
1916 	ret = regmap_bulk_read(data->regmap, BMP380_REG_PRESS_XLSB,
1917 			       data->buf, BMP280_BURST_READ_BYTES);
1918 	if (ret) {
1919 		dev_err(data->dev, "failed to burst read sensor data\n");
1920 		goto out;
1921 	}
1922 
1923 	/* Temperature calculations */
1924 	adc_temp = get_unaligned_le24(&data->buf[3]);
1925 	if (adc_temp == BMP380_TEMP_SKIPPED) {
1926 		dev_err(data->dev, "reading temperature skipped\n");
1927 		goto out;
1928 	}
1929 
1930 	buffer.comp_temp = bmp380_compensate_temp(data, adc_temp);
1931 
1932 	/* Pressure calculations */
1933 	adc_press = get_unaligned_le24(&data->buf[0]);
1934 	if (adc_press == BMP380_PRESS_SKIPPED) {
1935 		dev_err(data->dev, "reading pressure skipped\n");
1936 		goto out;
1937 	}
1938 
1939 	t_fine = bmp380_calc_t_fine(data, adc_temp);
1940 	buffer.comp_press = bmp380_compensate_press(data, adc_press, t_fine);
1941 
1942 	iio_push_to_buffers_with_ts(indio_dev, &buffer, sizeof(buffer),
1943 				    iio_get_time_ns(indio_dev));
1944 
1945 out:
1946 	iio_trigger_notify_done(indio_dev->trig);
1947 
1948 	return IRQ_HANDLED;
1949 }
1950 
1951 static const int bmp380_oversampling_avail[] = { 1, 2, 4, 8, 16, 32 };
1952 static const int bmp380_iir_filter_coeffs_avail[] = { 1, 2, 4, 8, 16, 32, 64, 128};
1953 static const u8 bmp380_chip_ids[] = { BMP380_CHIP_ID, BMP390_CHIP_ID };
1954 static const int bmp380_temp_coeffs[] = { 10, 1 };
1955 static const int bmp380_press_coeffs[] = { 1, 100000 };
1956 
1957 const struct bmp280_chip_info bmp380_chip_info = {
1958 	.id_reg = BMP380_REG_ID,
1959 	.chip_id = bmp380_chip_ids,
1960 	.num_chip_id = ARRAY_SIZE(bmp380_chip_ids),
1961 	.regmap_config = &bmp380_regmap_config,
1962 	.spi_read_extra_byte = true,
1963 	.start_up_time_us = 2000,
1964 	.channels = bmp380_channels,
1965 	.num_channels = ARRAY_SIZE(bmp380_channels),
1966 	.avail_scan_masks = bmp280_avail_scan_masks,
1967 
1968 	.oversampling_temp_avail = bmp380_oversampling_avail,
1969 	.num_oversampling_temp_avail = ARRAY_SIZE(bmp380_oversampling_avail),
1970 	.oversampling_temp_default = ilog2(1),
1971 
1972 	.oversampling_press_avail = bmp380_oversampling_avail,
1973 	.num_oversampling_press_avail = ARRAY_SIZE(bmp380_oversampling_avail),
1974 	.oversampling_press_default = ilog2(4),
1975 
1976 	.sampling_freq_avail = bmp380_odr_table,
1977 	.num_sampling_freq_avail = ARRAY_SIZE(bmp380_odr_table) * 2,
1978 	.sampling_freq_default = BMP380_ODR_50HZ,
1979 
1980 	.iir_filter_coeffs_avail = bmp380_iir_filter_coeffs_avail,
1981 	.num_iir_filter_coeffs_avail = ARRAY_SIZE(bmp380_iir_filter_coeffs_avail),
1982 	.iir_filter_coeff_default = 2,
1983 
1984 	.temp_coeffs = bmp380_temp_coeffs,
1985 	.temp_coeffs_type = IIO_VAL_FRACTIONAL,
1986 	.press_coeffs = bmp380_press_coeffs,
1987 	.press_coeffs_type = IIO_VAL_FRACTIONAL,
1988 
1989 	.chip_config = bmp380_chip_config,
1990 	.read_temp = bmp380_read_temp,
1991 	.read_press = bmp380_read_press,
1992 	.read_calib = bmp380_read_calib,
1993 	.set_mode = bmp380_set_mode,
1994 	.wait_conv = bmp380_wait_conv,
1995 	.preinit = bmp380_preinit,
1996 
1997 	.trigger_probe = bmp380_trigger_probe,
1998 	.trigger_handler = bmp380_trigger_handler,
1999 };
2000 EXPORT_SYMBOL_NS(bmp380_chip_info, "IIO_BMP280");
2001 
2002 static int bmp580_soft_reset(struct bmp280_data *data)
2003 {
2004 	unsigned int reg;
2005 	int ret;
2006 
2007 	ret = regmap_write(data->regmap, BMP580_REG_CMD, BMP580_CMD_SOFT_RESET);
2008 	if (ret) {
2009 		dev_err(data->dev, "failed to send reset command to device\n");
2010 		return ret;
2011 	}
2012 	/* From datasheet's table 4: electrical characteristics */
2013 	fsleep(2000);
2014 
2015 	/* Dummy read of chip_id */
2016 	ret = regmap_read(data->regmap, BMP580_REG_CHIP_ID, &reg);
2017 	if (ret) {
2018 		dev_err(data->dev, "failed to reestablish comms after reset\n");
2019 		return ret;
2020 	}
2021 
2022 	ret = regmap_read(data->regmap, BMP580_REG_INT_STATUS, &reg);
2023 	if (ret) {
2024 		dev_err(data->dev, "error reading interrupt status register\n");
2025 		return ret;
2026 	}
2027 	if (!(reg & BMP580_INT_STATUS_POR_MASK)) {
2028 		dev_err(data->dev, "error resetting sensor\n");
2029 		return -EINVAL;
2030 	}
2031 
2032 	return 0;
2033 }
2034 
2035 /**
2036  * bmp580_nvm_operation() - Helper function to commit NVM memory operations
2037  * @data: sensor data struct
2038  * @is_write: flag to signal write operation
2039  */
2040 static int bmp580_nvm_operation(struct bmp280_data *data, bool is_write)
2041 {
2042 	unsigned long timeout, poll;
2043 	unsigned int reg;
2044 	int ret;
2045 
2046 	/* Check NVM ready flag */
2047 	ret = regmap_read(data->regmap, BMP580_REG_STATUS, &reg);
2048 	if (ret) {
2049 		dev_err(data->dev, "failed to check nvm status\n");
2050 		return ret;
2051 	}
2052 	if (!(reg & BMP580_STATUS_NVM_RDY_MASK)) {
2053 		dev_err(data->dev, "sensor's nvm is not ready\n");
2054 		return -EIO;
2055 	}
2056 
2057 	/* Start NVM operation sequence */
2058 	ret = regmap_write(data->regmap, BMP580_REG_CMD,
2059 			   BMP580_CMD_NVM_OP_SEQ_0);
2060 	if (ret) {
2061 		dev_err(data->dev,
2062 			"failed to send nvm operation's first sequence\n");
2063 		return ret;
2064 	}
2065 	if (is_write) {
2066 		/* Send NVM write sequence */
2067 		ret = regmap_write(data->regmap, BMP580_REG_CMD,
2068 				   BMP580_CMD_NVM_WRITE_SEQ_1);
2069 		if (ret) {
2070 			dev_err(data->dev,
2071 				"failed to send nvm write sequence\n");
2072 			return ret;
2073 		}
2074 		/* Datasheet says on 4.8.1.2 it takes approximately 10ms */
2075 		poll = 2000;
2076 		timeout = 12000;
2077 	} else {
2078 		/* Send NVM read sequence */
2079 		ret = regmap_write(data->regmap, BMP580_REG_CMD,
2080 				   BMP580_CMD_NVM_READ_SEQ_1);
2081 		if (ret) {
2082 			dev_err(data->dev,
2083 				"failed to send nvm read sequence\n");
2084 			return ret;
2085 		}
2086 		/* Datasheet says on 4.8.1.1 it takes approximately 200us */
2087 		poll = 50;
2088 		timeout = 400;
2089 	}
2090 
2091 	/* Wait until NVM is ready again */
2092 	ret = regmap_read_poll_timeout(data->regmap, BMP580_REG_STATUS, reg,
2093 				       (reg & BMP580_STATUS_NVM_RDY_MASK),
2094 				       poll, timeout);
2095 	if (ret) {
2096 		dev_err(data->dev, "error checking nvm operation status\n");
2097 		return ret;
2098 	}
2099 
2100 	/* Check NVM error flags */
2101 	if ((reg & BMP580_STATUS_NVM_ERR_MASK) || (reg & BMP580_STATUS_NVM_CMD_ERR_MASK)) {
2102 		dev_err(data->dev, "error processing nvm operation\n");
2103 		return -EIO;
2104 	}
2105 
2106 	return 0;
2107 }
2108 
2109 /*
2110  * Contrary to previous sensors families, compensation algorithm is builtin.
2111  * We are only required to read the register raw data and adapt the ranges
2112  * for what is expected on IIO ABI.
2113  */
2114 
2115 static int bmp580_read_temp(struct bmp280_data *data, s32 *raw_temp)
2116 {
2117 	s32 value_temp;
2118 	int ret;
2119 
2120 	ret = regmap_bulk_read(data->regmap, BMP580_REG_TEMP_XLSB,
2121 			       data->buf, BMP280_NUM_TEMP_BYTES);
2122 	if (ret) {
2123 		dev_err(data->dev, "failed to read temperature\n");
2124 		return ret;
2125 	}
2126 
2127 	value_temp = get_unaligned_le24(data->buf);
2128 	if (value_temp == BMP580_TEMP_SKIPPED) {
2129 		dev_err(data->dev, "reading temperature skipped\n");
2130 		return -EIO;
2131 	}
2132 	*raw_temp = sign_extend32(value_temp, 23);
2133 
2134 	return 0;
2135 }
2136 
2137 static int bmp580_read_press(struct bmp280_data *data, u32 *raw_press)
2138 {
2139 	u32 value_press;
2140 	int ret;
2141 
2142 	ret = regmap_bulk_read(data->regmap, BMP580_REG_PRESS_XLSB,
2143 			       data->buf, BMP280_NUM_PRESS_BYTES);
2144 	if (ret) {
2145 		dev_err(data->dev, "failed to read pressure\n");
2146 		return ret;
2147 	}
2148 
2149 	value_press = get_unaligned_le24(data->buf);
2150 	if (value_press == BMP580_PRESS_SKIPPED) {
2151 		dev_err(data->dev, "reading pressure skipped\n");
2152 		return -EIO;
2153 	}
2154 	*raw_press = value_press;
2155 
2156 	return 0;
2157 }
2158 
2159 static const int bmp580_odr_table[][2] = {
2160 	[BMP580_ODR_240HZ] =	{240, 0},
2161 	[BMP580_ODR_218HZ] =	{218, 0},
2162 	[BMP580_ODR_199HZ] =	{199, 0},
2163 	[BMP580_ODR_179HZ] =	{179, 0},
2164 	[BMP580_ODR_160HZ] =	{160, 0},
2165 	[BMP580_ODR_149HZ] =	{149, 0},
2166 	[BMP580_ODR_140HZ] =	{140, 0},
2167 	[BMP580_ODR_129HZ] =	{129, 0},
2168 	[BMP580_ODR_120HZ] =	{120, 0},
2169 	[BMP580_ODR_110HZ] =	{110, 0},
2170 	[BMP580_ODR_100HZ] =	{100, 0},
2171 	[BMP580_ODR_89HZ] =	{89, 0},
2172 	[BMP580_ODR_80HZ] =	{80, 0},
2173 	[BMP580_ODR_70HZ] =	{70, 0},
2174 	[BMP580_ODR_60HZ] =	{60, 0},
2175 	[BMP580_ODR_50HZ] =	{50, 0},
2176 	[BMP580_ODR_45HZ] =	{45, 0},
2177 	[BMP580_ODR_40HZ] =	{40, 0},
2178 	[BMP580_ODR_35HZ] =	{35, 0},
2179 	[BMP580_ODR_30HZ] =	{30, 0},
2180 	[BMP580_ODR_25HZ] =	{25, 0},
2181 	[BMP580_ODR_20HZ] =	{20, 0},
2182 	[BMP580_ODR_15HZ] =	{15, 0},
2183 	[BMP580_ODR_10HZ] =	{10, 0},
2184 	[BMP580_ODR_5HZ] =	{5, 0},
2185 	[BMP580_ODR_4HZ] =	{4, 0},
2186 	[BMP580_ODR_3HZ] =	{3, 0},
2187 	[BMP580_ODR_2HZ] =	{2, 0},
2188 	[BMP580_ODR_1HZ] =	{1, 0},
2189 	[BMP580_ODR_0_5HZ] =	{0, 500000},
2190 	[BMP580_ODR_0_25HZ] =	{0, 250000},
2191 	[BMP580_ODR_0_125HZ] =	{0, 125000},
2192 };
2193 
2194 static const int bmp580_nvmem_addrs[] = { 0x20, 0x21, 0x22 };
2195 
2196 static int bmp580_nvmem_read_impl(void *priv, unsigned int offset, void *val,
2197 				  size_t bytes)
2198 {
2199 	struct bmp280_data *data = priv;
2200 	u16 *dst = val;
2201 	int ret, addr;
2202 
2203 	guard(mutex)(&data->lock);
2204 
2205 	/* Set sensor in standby mode */
2206 	ret = regmap_update_bits(data->regmap, BMP580_REG_ODR_CONFIG,
2207 				 BMP580_MODE_MASK | BMP580_ODR_DEEPSLEEP_DIS,
2208 				 BMP580_ODR_DEEPSLEEP_DIS |
2209 				 FIELD_PREP(BMP580_MODE_MASK, BMP580_MODE_SLEEP));
2210 	if (ret) {
2211 		dev_err(data->dev, "failed to change sensor to standby mode\n");
2212 		goto exit;
2213 	}
2214 	/* Wait standby transition time */
2215 	fsleep(2500);
2216 
2217 	while (bytes >= sizeof(*dst)) {
2218 		addr = bmp580_nvmem_addrs[offset / sizeof(*dst)];
2219 
2220 		ret = regmap_write(data->regmap, BMP580_REG_NVM_ADDR,
2221 				   FIELD_PREP(BMP580_NVM_ROW_ADDR_MASK, addr));
2222 		if (ret) {
2223 			dev_err(data->dev, "error writing nvm address\n");
2224 			goto exit;
2225 		}
2226 
2227 		ret = bmp580_nvm_operation(data, false);
2228 		if (ret)
2229 			goto exit;
2230 
2231 		ret = regmap_bulk_read(data->regmap, BMP580_REG_NVM_DATA_LSB,
2232 				       &data->le16, sizeof(data->le16));
2233 		if (ret) {
2234 			dev_err(data->dev, "error reading nvm data regs\n");
2235 			goto exit;
2236 		}
2237 
2238 		*dst++ = le16_to_cpu(data->le16);
2239 		bytes -= sizeof(*dst);
2240 		offset += sizeof(*dst);
2241 	}
2242 exit:
2243 	/* Restore chip config */
2244 	data->chip_info->chip_config(data);
2245 	return ret;
2246 }
2247 
2248 static int bmp580_nvmem_read(void *priv, unsigned int offset, void *val,
2249 			     size_t bytes)
2250 {
2251 	struct bmp280_data *data = priv;
2252 	int ret;
2253 
2254 	pm_runtime_get_sync(data->dev);
2255 	ret = bmp580_nvmem_read_impl(priv, offset, val, bytes);
2256 	pm_runtime_put_autosuspend(data->dev);
2257 
2258 	return ret;
2259 }
2260 
2261 static int bmp580_nvmem_write_impl(void *priv, unsigned int offset, void *val,
2262 				   size_t bytes)
2263 {
2264 	struct bmp280_data *data = priv;
2265 	u16 *buf = val;
2266 	int ret, addr;
2267 
2268 	guard(mutex)(&data->lock);
2269 
2270 	/* Set sensor in standby mode */
2271 	ret = regmap_update_bits(data->regmap, BMP580_REG_ODR_CONFIG,
2272 				 BMP580_MODE_MASK | BMP580_ODR_DEEPSLEEP_DIS,
2273 				 BMP580_ODR_DEEPSLEEP_DIS |
2274 				 FIELD_PREP(BMP580_MODE_MASK, BMP580_MODE_SLEEP));
2275 	if (ret) {
2276 		dev_err(data->dev, "failed to change sensor to standby mode\n");
2277 		goto exit;
2278 	}
2279 	/* Wait standby transition time */
2280 	fsleep(2500);
2281 
2282 	while (bytes >= sizeof(*buf)) {
2283 		addr = bmp580_nvmem_addrs[offset / sizeof(*buf)];
2284 
2285 		ret = regmap_write(data->regmap, BMP580_REG_NVM_ADDR,
2286 				   BMP580_NVM_PROG_EN |
2287 				   FIELD_PREP(BMP580_NVM_ROW_ADDR_MASK, addr));
2288 		if (ret) {
2289 			dev_err(data->dev, "error writing nvm address\n");
2290 			goto exit;
2291 		}
2292 		data->le16 = cpu_to_le16(*buf++);
2293 
2294 		ret = regmap_bulk_write(data->regmap, BMP580_REG_NVM_DATA_LSB,
2295 					&data->le16, sizeof(data->le16));
2296 		if (ret) {
2297 			dev_err(data->dev, "error writing LSB NVM data regs\n");
2298 			goto exit;
2299 		}
2300 
2301 		ret = bmp580_nvm_operation(data, true);
2302 		if (ret)
2303 			goto exit;
2304 
2305 		/* Disable programming mode bit */
2306 		ret = regmap_clear_bits(data->regmap, BMP580_REG_NVM_ADDR,
2307 					BMP580_NVM_PROG_EN);
2308 		if (ret) {
2309 			dev_err(data->dev, "error resetting nvm write\n");
2310 			goto exit;
2311 		}
2312 
2313 		bytes -= sizeof(*buf);
2314 		offset += sizeof(*buf);
2315 	}
2316 exit:
2317 	/* Restore chip config */
2318 	data->chip_info->chip_config(data);
2319 	return ret;
2320 }
2321 
2322 static int bmp580_nvmem_write(void *priv, unsigned int offset, void *val,
2323 			      size_t bytes)
2324 {
2325 	struct bmp280_data *data = priv;
2326 	int ret;
2327 
2328 	pm_runtime_get_sync(data->dev);
2329 	ret = bmp580_nvmem_write_impl(priv, offset, val, bytes);
2330 	pm_runtime_put_autosuspend(data->dev);
2331 
2332 	return ret;
2333 }
2334 
2335 static int bmp580_preinit(struct bmp280_data *data)
2336 {
2337 	struct nvmem_config config = {
2338 		.dev = data->dev,
2339 		.priv = data,
2340 		.name = "bmp580_nvmem",
2341 		.word_size = sizeof(u16),
2342 		.stride = sizeof(u16),
2343 		.size = 3 * sizeof(u16),
2344 		.reg_read = bmp580_nvmem_read,
2345 		.reg_write = bmp580_nvmem_write,
2346 	};
2347 	unsigned int reg;
2348 	int ret;
2349 
2350 	/* Issue soft-reset command */
2351 	ret = bmp580_soft_reset(data);
2352 	if (ret)
2353 		return ret;
2354 
2355 	/* Post powerup sequence */
2356 	ret = regmap_read(data->regmap, BMP580_REG_CHIP_ID, &reg);
2357 	if (ret) {
2358 		dev_err(data->dev, "failed to establish comms with the chip\n");
2359 		return ret;
2360 	}
2361 
2362 	/* Print warn message if we don't know the chip id */
2363 	if (reg != BMP580_CHIP_ID && reg != BMP580_CHIP_ID_ALT)
2364 		dev_warn(data->dev, "unexpected chip_id\n");
2365 
2366 	ret = regmap_read(data->regmap, BMP580_REG_STATUS, &reg);
2367 	if (ret) {
2368 		dev_err(data->dev, "failed to read nvm status\n");
2369 		return ret;
2370 	}
2371 
2372 	/* Check nvm status */
2373 	if (!(reg & BMP580_STATUS_NVM_RDY_MASK) || (reg & BMP580_STATUS_NVM_ERR_MASK)) {
2374 		dev_err(data->dev, "nvm error on powerup sequence\n");
2375 		return -EIO;
2376 	}
2377 
2378 	/* Register nvmem device */
2379 	return PTR_ERR_OR_ZERO(devm_nvmem_register(config.dev, &config));
2380 }
2381 
2382 static const u8 bmp580_operation_mode[] = {
2383 	[BMP280_SLEEP] = BMP580_MODE_SLEEP,
2384 	[BMP280_FORCED] = BMP580_MODE_FORCED,
2385 	[BMP280_NORMAL] = BMP580_MODE_NORMAL,
2386 };
2387 
2388 static int bmp580_set_mode(struct bmp280_data *data, enum bmp280_op_mode mode)
2389 {
2390 	struct device *dev = data->dev;
2391 	int ret;
2392 
2393 	if (mode == BMP280_FORCED) {
2394 		ret = regmap_set_bits(data->regmap, BMP580_REG_DSP_CONFIG,
2395 				      BMP580_DSP_IIR_FORCED_FLUSH);
2396 		if (ret) {
2397 			dev_err(dev, "Could not flush IIR filter constants.\n");
2398 			return ret;
2399 		}
2400 	}
2401 
2402 	ret = regmap_write_bits(data->regmap, BMP580_REG_ODR_CONFIG,
2403 				BMP580_MODE_MASK,
2404 				FIELD_PREP(BMP580_MODE_MASK,
2405 					   bmp580_operation_mode[mode]));
2406 	if (ret) {
2407 		dev_err(dev, "failed to  write power control register.\n");
2408 		return ret;
2409 	}
2410 
2411 	data->op_mode = mode;
2412 
2413 	return 0;
2414 }
2415 
2416 static int bmp580_wait_conv(struct bmp280_data *data)
2417 {
2418 	/*
2419 	 * Taken from datasheet, Section 2 "Specification, Table 3 "Electrical
2420 	 * characteristics.
2421 	 */
2422 	static const int time_conv_press[] = {
2423 		0, 1050, 1785, 3045, 5670, 10920, 21420, 42420,
2424 		84420,
2425 	};
2426 	static const int time_conv_temp[] = {
2427 		0, 1050, 1105, 1575, 2205, 3465, 6090, 11340,
2428 		21840,
2429 	};
2430 	int meas_time_us;
2431 
2432 	meas_time_us = 4 * USEC_PER_MSEC +
2433 		       time_conv_temp[data->oversampling_temp] +
2434 		       time_conv_press[data->oversampling_press];
2435 
2436 	/*
2437 	 * Measurement time mentioned in Chapter 2, Table 4 of the datasheet.
2438 	 * The extra 4ms is the required mode change to start of measurement
2439 	 * time.
2440 	 */
2441 	fsleep(meas_time_us);
2442 
2443 	return 0;
2444 }
2445 
2446 static int bmp580_chip_config(struct bmp280_data *data)
2447 {
2448 	bool change = false, aux;
2449 	unsigned int tmp;
2450 	u8 reg_val;
2451 	int ret;
2452 
2453 	/* Sets sensor in standby mode */
2454 	ret = regmap_update_bits(data->regmap, BMP580_REG_ODR_CONFIG,
2455 				 BMP580_MODE_MASK | BMP580_ODR_DEEPSLEEP_DIS,
2456 				 BMP580_ODR_DEEPSLEEP_DIS |
2457 				 FIELD_PREP(BMP580_MODE_MASK, BMP580_MODE_SLEEP));
2458 	if (ret) {
2459 		dev_err(data->dev, "failed to change sensor to standby mode\n");
2460 		return ret;
2461 	}
2462 	/* From datasheet's table 4: electrical characteristics */
2463 	fsleep(2500);
2464 
2465 	/* Set default DSP mode settings */
2466 	reg_val = FIELD_PREP(BMP580_DSP_COMP_MASK, BMP580_DSP_PRESS_TEMP_COMP_EN) |
2467 		  BMP580_DSP_SHDW_IIR_TEMP_EN | BMP580_DSP_SHDW_IIR_PRESS_EN;
2468 
2469 	ret = regmap_update_bits(data->regmap, BMP580_REG_DSP_CONFIG,
2470 				 BMP580_DSP_COMP_MASK |
2471 				 BMP580_DSP_SHDW_IIR_TEMP_EN |
2472 				 BMP580_DSP_SHDW_IIR_PRESS_EN, reg_val);
2473 	if (ret) {
2474 		dev_err(data->dev, "failed to change DSP mode settings\n");
2475 		return ret;
2476 	}
2477 
2478 	/* Configure oversampling */
2479 	reg_val = FIELD_PREP(BMP580_OSR_TEMP_MASK, data->oversampling_temp) |
2480 		  FIELD_PREP(BMP580_OSR_PRESS_MASK, data->oversampling_press) |
2481 		  BMP580_OSR_PRESS_EN;
2482 
2483 	ret = regmap_update_bits_check(data->regmap, BMP580_REG_OSR_CONFIG,
2484 				       BMP580_OSR_TEMP_MASK |
2485 				       BMP580_OSR_PRESS_MASK |
2486 				       BMP580_OSR_PRESS_EN,
2487 				       reg_val, &aux);
2488 	if (ret) {
2489 		dev_err(data->dev, "failed to write oversampling register\n");
2490 		return ret;
2491 	}
2492 	change = change || aux;
2493 
2494 	/* Configure output data rate */
2495 	ret = regmap_update_bits_check(data->regmap, BMP580_REG_ODR_CONFIG, BMP580_ODR_MASK,
2496 				       FIELD_PREP(BMP580_ODR_MASK, data->sampling_freq),
2497 				       &aux);
2498 	if (ret) {
2499 		dev_err(data->dev, "failed to write ODR configuration register\n");
2500 		return ret;
2501 	}
2502 	change = change || aux;
2503 
2504 	/* Set filter data */
2505 	reg_val = FIELD_PREP(BMP580_DSP_IIR_PRESS_MASK, data->iir_filter_coeff) |
2506 		  FIELD_PREP(BMP580_DSP_IIR_TEMP_MASK, data->iir_filter_coeff);
2507 
2508 	ret = regmap_update_bits(data->regmap, BMP580_REG_DSP_IIR,
2509 				 BMP580_DSP_IIR_PRESS_MASK | BMP580_DSP_IIR_TEMP_MASK,
2510 				 reg_val);
2511 	if (ret) {
2512 		dev_err(data->dev, "failed to write config register\n");
2513 		return ret;
2514 	}
2515 
2516 	if (change) {
2517 		/*
2518 		 * Check if ODR and OSR settings are valid or we are
2519 		 * operating in a degraded mode.
2520 		 */
2521 		ret = regmap_read(data->regmap, BMP580_REG_EFF_OSR, &tmp);
2522 		if (ret) {
2523 			dev_err(data->dev,
2524 				"error reading effective OSR register\n");
2525 			return ret;
2526 		}
2527 		if (!(tmp & BMP580_EFF_OSR_VALID_ODR)) {
2528 			dev_warn(data->dev, "OSR and ODR incompatible settings detected\n");
2529 			/* Set current OSR settings from data on effective OSR */
2530 			data->oversampling_temp = FIELD_GET(BMP580_EFF_OSR_TEMP_MASK, tmp);
2531 			data->oversampling_press = FIELD_GET(BMP580_EFF_OSR_PRESS_MASK, tmp);
2532 			return -EINVAL;
2533 		}
2534 	}
2535 
2536 	return 0;
2537 }
2538 
2539 static int bmp580_data_rdy_trigger_set_state(struct iio_trigger *trig,
2540 					     bool state)
2541 {
2542 	struct bmp280_data *data = iio_trigger_get_drvdata(trig);
2543 	int ret;
2544 
2545 	guard(mutex)(&data->lock);
2546 
2547 	ret = regmap_update_bits(data->regmap, BMP580_REG_INT_CONFIG,
2548 				 BMP580_INT_CONFIG_INT_EN,
2549 				 FIELD_PREP(BMP580_INT_CONFIG_INT_EN, !!state));
2550 	if (ret)
2551 		dev_err(data->dev,
2552 			"Could not %s interrupt.\n", str_enable_disable(state));
2553 	return ret;
2554 }
2555 
2556 static const struct iio_trigger_ops bmp580_trigger_ops = {
2557 	.set_trigger_state = &bmp580_data_rdy_trigger_set_state,
2558 };
2559 
2560 static int bmp580_int_pin_config(struct bmp280_data *data)
2561 {
2562 	int pin_drive_cfg = FIELD_PREP(BMP580_INT_CONFIG_OPEN_DRAIN,
2563 				       data->trig_open_drain);
2564 	int pin_level_cfg = FIELD_PREP(BMP580_INT_CONFIG_LEVEL,
2565 				       data->trig_active_high);
2566 	int ret, int_pin_cfg = pin_drive_cfg | pin_level_cfg;
2567 
2568 	ret = regmap_update_bits(data->regmap, BMP580_REG_INT_CONFIG,
2569 				 BMP580_INT_CONFIG_MASK, int_pin_cfg);
2570 	if (ret) {
2571 		dev_err(data->dev, "Could not set interrupt settings.\n");
2572 		return ret;
2573 	}
2574 
2575 	ret = regmap_set_bits(data->regmap, BMP580_REG_INT_SOURCE,
2576 			      BMP580_INT_SOURCE_DRDY);
2577 	if (ret)
2578 		dev_err(data->dev, "Could not set interrupt source.\n");
2579 
2580 	return ret;
2581 }
2582 
2583 static irqreturn_t bmp580_irq_thread_handler(int irq, void *p)
2584 {
2585 	struct iio_dev *indio_dev = p;
2586 	struct bmp280_data *data = iio_priv(indio_dev);
2587 	unsigned int int_ctrl;
2588 	int ret;
2589 
2590 	ret = regmap_read(data->regmap, BMP580_REG_INT_STATUS, &int_ctrl);
2591 	if (ret)
2592 		return IRQ_NONE;
2593 
2594 	if (FIELD_GET(BMP580_INT_STATUS_DRDY_MASK, int_ctrl))
2595 		iio_trigger_poll_nested(data->trig);
2596 
2597 	return IRQ_HANDLED;
2598 }
2599 
2600 static int bmp580_trigger_probe(struct iio_dev *indio_dev)
2601 {
2602 	return __bmp280_trigger_probe(indio_dev, &bmp580_trigger_ops,
2603 				      bmp580_int_pin_config,
2604 				      bmp580_irq_thread_handler);
2605 }
2606 
2607 static irqreturn_t bmp580_trigger_handler(int irq, void *p)
2608 {
2609 	struct iio_poll_func *pf = p;
2610 	struct iio_dev *indio_dev = pf->indio_dev;
2611 	struct bmp280_data *data = iio_priv(indio_dev);
2612 	struct {
2613 		__le32 comp_temp;
2614 		__le32 comp_press;
2615 		aligned_s64 timestamp;
2616 	} buffer;
2617 	int ret;
2618 
2619 	guard(mutex)(&data->lock);
2620 
2621 	/* Burst read data registers */
2622 	ret = regmap_bulk_read(data->regmap, BMP580_REG_TEMP_XLSB,
2623 			       data->buf, BMP280_BURST_READ_BYTES);
2624 	if (ret) {
2625 		dev_err(data->dev, "failed to burst read sensor data\n");
2626 		goto out;
2627 	}
2628 
2629 	/* Pressure calculations */
2630 	memcpy(&buffer.comp_press, &data->buf[3], 3);
2631 
2632 	/* Temperature calculations */
2633 	memcpy(&buffer.comp_temp, &data->buf[0], 3);
2634 
2635 	iio_push_to_buffers_with_ts(indio_dev, &buffer, sizeof(buffer),
2636 				    iio_get_time_ns(indio_dev));
2637 
2638 out:
2639 	iio_trigger_notify_done(indio_dev->trig);
2640 
2641 	return IRQ_HANDLED;
2642 }
2643 
2644 static const int bmp580_oversampling_avail[] = { 1, 2, 4, 8, 16, 32, 64, 128 };
2645 static const u8 bmp580_chip_ids[] = { BMP580_CHIP_ID, BMP580_CHIP_ID_ALT };
2646 /* Instead of { 1000, 16 } we do this, to avoid overflow issues */
2647 static const int bmp580_temp_coeffs[] = { 125, 13 };
2648 static const int bmp580_press_coeffs[] = { 1, 64000};
2649 
2650 const struct bmp280_chip_info bmp580_chip_info = {
2651 	.id_reg = BMP580_REG_CHIP_ID,
2652 	.chip_id = bmp580_chip_ids,
2653 	.num_chip_id = ARRAY_SIZE(bmp580_chip_ids),
2654 	.regmap_config = &bmp580_regmap_config,
2655 	.start_up_time_us = 2000,
2656 	.channels = bmp580_channels,
2657 	.num_channels = ARRAY_SIZE(bmp580_channels),
2658 	.avail_scan_masks = bmp280_avail_scan_masks,
2659 
2660 	.oversampling_temp_avail = bmp580_oversampling_avail,
2661 	.num_oversampling_temp_avail = ARRAY_SIZE(bmp580_oversampling_avail),
2662 	.oversampling_temp_default = ilog2(1),
2663 
2664 	.oversampling_press_avail = bmp580_oversampling_avail,
2665 	.num_oversampling_press_avail = ARRAY_SIZE(bmp580_oversampling_avail),
2666 	.oversampling_press_default = ilog2(4),
2667 
2668 	.sampling_freq_avail = bmp580_odr_table,
2669 	.num_sampling_freq_avail = ARRAY_SIZE(bmp580_odr_table) * 2,
2670 	.sampling_freq_default = BMP580_ODR_50HZ,
2671 
2672 	.iir_filter_coeffs_avail = bmp380_iir_filter_coeffs_avail,
2673 	.num_iir_filter_coeffs_avail = ARRAY_SIZE(bmp380_iir_filter_coeffs_avail),
2674 	.iir_filter_coeff_default = 2,
2675 
2676 	.temp_coeffs = bmp580_temp_coeffs,
2677 	.temp_coeffs_type = IIO_VAL_FRACTIONAL_LOG2,
2678 	.press_coeffs = bmp580_press_coeffs,
2679 	.press_coeffs_type = IIO_VAL_FRACTIONAL,
2680 
2681 	.chip_config = bmp580_chip_config,
2682 	.read_temp = bmp580_read_temp,
2683 	.read_press = bmp580_read_press,
2684 	.set_mode = bmp580_set_mode,
2685 	.wait_conv = bmp580_wait_conv,
2686 	.preinit = bmp580_preinit,
2687 
2688 	.trigger_probe = bmp580_trigger_probe,
2689 	.trigger_handler = bmp580_trigger_handler,
2690 };
2691 EXPORT_SYMBOL_NS(bmp580_chip_info, "IIO_BMP280");
2692 
2693 static int bmp180_wait_for_eoc(struct bmp280_data *data, u8 ctrl_meas)
2694 {
2695 	static const int conversion_time_max[] = { 4500, 7500, 13500, 25500 };
2696 	unsigned int delay_us;
2697 	unsigned int ctrl;
2698 	int ret;
2699 
2700 	if (data->use_eoc)
2701 		reinit_completion(&data->done);
2702 
2703 	ret = regmap_write(data->regmap, BMP280_REG_CTRL_MEAS, ctrl_meas);
2704 	if (ret) {
2705 		dev_err(data->dev, "failed to write crtl_meas register\n");
2706 		return ret;
2707 	}
2708 
2709 	if (data->use_eoc) {
2710 		/*
2711 		 * If we have a completion interrupt, use it, wait up to
2712 		 * 100ms. The longest conversion time listed is 76.5 ms for
2713 		 * advanced resolution mode.
2714 		 */
2715 		ret = wait_for_completion_timeout(&data->done,
2716 						  1 + msecs_to_jiffies(100));
2717 		if (!ret)
2718 			dev_err(data->dev, "timeout waiting for completion\n");
2719 	} else {
2720 		if (FIELD_GET(BMP180_MEAS_CTRL_MASK, ctrl_meas) == BMP180_MEAS_TEMP)
2721 			delay_us = 4500;
2722 		else
2723 			delay_us =
2724 				conversion_time_max[data->oversampling_press];
2725 
2726 		fsleep(delay_us);
2727 	}
2728 
2729 	ret = regmap_read(data->regmap, BMP280_REG_CTRL_MEAS, &ctrl);
2730 	if (ret) {
2731 		dev_err(data->dev, "failed to read ctrl_meas register\n");
2732 		return ret;
2733 	}
2734 
2735 	/* The value of this bit reset to "0" after conversion is complete */
2736 	if (ctrl & BMP180_MEAS_SCO) {
2737 		dev_err(data->dev, "conversion didn't complete\n");
2738 		return -EIO;
2739 	}
2740 
2741 	return 0;
2742 }
2743 
2744 static int bmp180_read_temp_adc(struct bmp280_data *data, u32 *adc_temp)
2745 {
2746 	int ret;
2747 
2748 	ret = bmp180_wait_for_eoc(data,
2749 				  FIELD_PREP(BMP180_MEAS_CTRL_MASK, BMP180_MEAS_TEMP) |
2750 				  BMP180_MEAS_SCO);
2751 	if (ret)
2752 		return ret;
2753 
2754 	ret = regmap_bulk_read(data->regmap, BMP180_REG_OUT_MSB,
2755 			       &data->be16, sizeof(data->be16));
2756 	if (ret) {
2757 		dev_err(data->dev, "failed to read temperature\n");
2758 		return ret;
2759 	}
2760 
2761 	*adc_temp = be16_to_cpu(data->be16);
2762 
2763 	return 0;
2764 }
2765 
2766 static int bmp180_read_calib(struct bmp280_data *data)
2767 {
2768 	struct bmp180_calib *calib = &data->calib.bmp180;
2769 	int ret;
2770 	int i;
2771 
2772 	ret = regmap_bulk_read(data->regmap, BMP180_REG_CALIB_START,
2773 			       data->bmp180_cal_buf, sizeof(data->bmp180_cal_buf));
2774 	if (ret) {
2775 		dev_err(data->dev, "failed to read calibration parameters\n");
2776 		return ret;
2777 	}
2778 
2779 	/* None of the words has the value 0 or 0xFFFF */
2780 	for (i = 0; i < ARRAY_SIZE(data->bmp180_cal_buf); i++) {
2781 		if (data->bmp180_cal_buf[i] == cpu_to_be16(0) ||
2782 		    data->bmp180_cal_buf[i] == cpu_to_be16(0xffff))
2783 			return -EIO;
2784 	}
2785 
2786 	/* Toss the calibration data into the entropy pool */
2787 	add_device_randomness(data->bmp180_cal_buf,
2788 			      sizeof(data->bmp180_cal_buf));
2789 
2790 	calib->AC1 = be16_to_cpu(data->bmp180_cal_buf[AC1]);
2791 	calib->AC2 = be16_to_cpu(data->bmp180_cal_buf[AC2]);
2792 	calib->AC3 = be16_to_cpu(data->bmp180_cal_buf[AC3]);
2793 	calib->AC4 = be16_to_cpu(data->bmp180_cal_buf[AC4]);
2794 	calib->AC5 = be16_to_cpu(data->bmp180_cal_buf[AC5]);
2795 	calib->AC6 = be16_to_cpu(data->bmp180_cal_buf[AC6]);
2796 	calib->B1 = be16_to_cpu(data->bmp180_cal_buf[B1]);
2797 	calib->B2 = be16_to_cpu(data->bmp180_cal_buf[B2]);
2798 	calib->MB = be16_to_cpu(data->bmp180_cal_buf[MB]);
2799 	calib->MC = be16_to_cpu(data->bmp180_cal_buf[MC]);
2800 	calib->MD = be16_to_cpu(data->bmp180_cal_buf[MD]);
2801 
2802 	return 0;
2803 }
2804 
2805 /*
2806  * Returns temperature in DegC, resolution is 0.1 DegC.
2807  * t_fine carries fine temperature as global value.
2808  *
2809  * Taken from datasheet, Section 3.5, "Calculating pressure and temperature".
2810  */
2811 
2812 static s32 bmp180_calc_t_fine(struct bmp280_data *data, u32 adc_temp)
2813 {
2814 	struct bmp180_calib *calib = &data->calib.bmp180;
2815 	s32 x1, x2;
2816 
2817 	x1 = ((((s32)adc_temp) - calib->AC6) * calib->AC5) >> 15;
2818 	x2 = (calib->MC << 11) / (x1 + calib->MD);
2819 	return x1 + x2; /* t_fine = x1 + x2; */
2820 }
2821 
2822 static int bmp180_get_t_fine(struct bmp280_data *data, s32 *t_fine)
2823 {
2824 	s32 adc_temp;
2825 	int ret;
2826 
2827 	ret = bmp180_read_temp_adc(data, &adc_temp);
2828 	if (ret)
2829 		return ret;
2830 
2831 	*t_fine = bmp180_calc_t_fine(data, adc_temp);
2832 
2833 	return 0;
2834 }
2835 
2836 static s32 bmp180_compensate_temp(struct bmp280_data *data, u32 adc_temp)
2837 {
2838 	return (bmp180_calc_t_fine(data, adc_temp) + 8) / 16;
2839 }
2840 
2841 static int bmp180_read_temp(struct bmp280_data *data, s32 *comp_temp)
2842 {
2843 	u32 adc_temp;
2844 	int ret;
2845 
2846 	ret = bmp180_read_temp_adc(data, &adc_temp);
2847 	if (ret)
2848 		return ret;
2849 
2850 	*comp_temp = bmp180_compensate_temp(data, adc_temp);
2851 
2852 	return 0;
2853 }
2854 
2855 static int bmp180_read_press_adc(struct bmp280_data *data, u32 *adc_press)
2856 {
2857 	u8 oss = data->oversampling_press;
2858 	int ret;
2859 
2860 	ret = bmp180_wait_for_eoc(data,
2861 				  FIELD_PREP(BMP180_MEAS_CTRL_MASK, BMP180_MEAS_PRESS) |
2862 				  FIELD_PREP(BMP180_OSRS_PRESS_MASK, oss) |
2863 				  BMP180_MEAS_SCO);
2864 	if (ret)
2865 		return ret;
2866 
2867 	ret = regmap_bulk_read(data->regmap, BMP180_REG_OUT_MSB,
2868 			       data->buf, BMP280_NUM_PRESS_BYTES);
2869 	if (ret) {
2870 		dev_err(data->dev, "failed to read pressure\n");
2871 		return ret;
2872 	}
2873 
2874 	*adc_press = get_unaligned_be24(data->buf) >> (8 - oss);
2875 
2876 	return 0;
2877 }
2878 
2879 /*
2880  * Returns pressure in Pa, resolution is 1 Pa.
2881  *
2882  * Taken from datasheet, Section 3.5, "Calculating pressure and temperature".
2883  */
2884 static u32 bmp180_compensate_press(struct bmp280_data *data, u32 adc_press,
2885 				   s32 t_fine)
2886 {
2887 	struct bmp180_calib *calib = &data->calib.bmp180;
2888 	s32 oss = data->oversampling_press;
2889 	s32 x1, x2, x3, p;
2890 	s32 b3, b6;
2891 	u32 b4, b7;
2892 
2893 	b6 = t_fine - 4000;
2894 	x1 = (calib->B2 * (b6 * b6 >> 12)) >> 11;
2895 	x2 = calib->AC2 * b6 >> 11;
2896 	x3 = x1 + x2;
2897 	b3 = ((((s32)calib->AC1 * 4 + x3) << oss) + 2) / 4;
2898 	x1 = calib->AC3 * b6 >> 13;
2899 	x2 = (calib->B1 * ((b6 * b6) >> 12)) >> 16;
2900 	x3 = (x1 + x2 + 2) >> 2;
2901 	b4 = calib->AC4 * (u32)(x3 + 32768) >> 15;
2902 	b7 = (adc_press - b3) * (50000 >> oss);
2903 	if (b7 < 0x80000000)
2904 		p = (b7 * 2) / b4;
2905 	else
2906 		p = (b7 / b4) * 2;
2907 
2908 	x1 = (p >> 8) * (p >> 8);
2909 	x1 = (x1 * 3038) >> 16;
2910 	x2 = (-7357 * p) >> 16;
2911 
2912 	return p + ((x1 + x2 + 3791) >> 4);
2913 }
2914 
2915 static int bmp180_read_press(struct bmp280_data *data, u32 *comp_press)
2916 {
2917 	u32 adc_press;
2918 	s32 t_fine;
2919 	int ret;
2920 
2921 	ret = bmp180_get_t_fine(data, &t_fine);
2922 	if (ret)
2923 		return ret;
2924 
2925 	ret = bmp180_read_press_adc(data, &adc_press);
2926 	if (ret)
2927 		return ret;
2928 
2929 	*comp_press = bmp180_compensate_press(data, adc_press, t_fine);
2930 
2931 	return 0;
2932 }
2933 
2934 /* Keep compatibility with newer generations of the sensor */
2935 static int bmp180_set_mode(struct bmp280_data *data, enum bmp280_op_mode mode)
2936 {
2937 	return 0;
2938 }
2939 
2940 /* Keep compatibility with newer generations of the sensor */
2941 static int bmp180_wait_conv(struct bmp280_data *data)
2942 {
2943 	return 0;
2944 }
2945 
2946 /* Keep compatibility with newer generations of the sensor */
2947 static int bmp180_chip_config(struct bmp280_data *data)
2948 {
2949 	return 0;
2950 }
2951 
2952 static irqreturn_t bmp180_trigger_handler(int irq, void *p)
2953 {
2954 	struct iio_poll_func *pf = p;
2955 	struct iio_dev *indio_dev = pf->indio_dev;
2956 	struct bmp280_data *data = iio_priv(indio_dev);
2957 	struct {
2958 		u32 comp_press;
2959 		s32 comp_temp;
2960 		aligned_s64 timestamp;
2961 	} buffer;
2962 	int ret;
2963 
2964 	guard(mutex)(&data->lock);
2965 
2966 	ret = bmp180_read_temp(data, &buffer.comp_temp);
2967 	if (ret)
2968 		goto out;
2969 
2970 
2971 	ret = bmp180_read_press(data, &buffer.comp_press);
2972 	if (ret)
2973 		goto out;
2974 
2975 	iio_push_to_buffers_with_ts(indio_dev, &buffer, sizeof(buffer),
2976 				    iio_get_time_ns(indio_dev));
2977 
2978 out:
2979 	iio_trigger_notify_done(indio_dev->trig);
2980 
2981 	return IRQ_HANDLED;
2982 }
2983 
2984 static const int bmp180_oversampling_temp_avail[] = { 1 };
2985 static const int bmp180_oversampling_press_avail[] = { 1, 2, 4, 8 };
2986 static const u8 bmp180_chip_ids[] = { BMP180_CHIP_ID };
2987 static const int bmp180_temp_coeffs[] = { 100, 1 };
2988 static const int bmp180_press_coeffs[] = { 1, 1000 };
2989 
2990 const struct bmp280_chip_info bmp180_chip_info = {
2991 	.id_reg = BMP280_REG_ID,
2992 	.chip_id = bmp180_chip_ids,
2993 	.num_chip_id = ARRAY_SIZE(bmp180_chip_ids),
2994 	.regmap_config = &bmp180_regmap_config,
2995 	.start_up_time_us = 2000,
2996 	.channels = bmp280_channels,
2997 	.num_channels = ARRAY_SIZE(bmp280_channels),
2998 	.avail_scan_masks = bmp280_avail_scan_masks,
2999 
3000 	.oversampling_temp_avail = bmp180_oversampling_temp_avail,
3001 	.num_oversampling_temp_avail =
3002 		ARRAY_SIZE(bmp180_oversampling_temp_avail),
3003 	.oversampling_temp_default = 0,
3004 
3005 	.oversampling_press_avail = bmp180_oversampling_press_avail,
3006 	.num_oversampling_press_avail =
3007 		ARRAY_SIZE(bmp180_oversampling_press_avail),
3008 	.oversampling_press_default = BMP180_MEAS_PRESS_8X,
3009 
3010 	.temp_coeffs = bmp180_temp_coeffs,
3011 	.temp_coeffs_type = IIO_VAL_FRACTIONAL,
3012 	.press_coeffs = bmp180_press_coeffs,
3013 	.press_coeffs_type = IIO_VAL_FRACTIONAL,
3014 
3015 	.chip_config = bmp180_chip_config,
3016 	.read_temp = bmp180_read_temp,
3017 	.read_press = bmp180_read_press,
3018 	.read_calib = bmp180_read_calib,
3019 	.set_mode = bmp180_set_mode,
3020 	.wait_conv = bmp180_wait_conv,
3021 
3022 	.trigger_handler = bmp180_trigger_handler,
3023 };
3024 EXPORT_SYMBOL_NS(bmp180_chip_info, "IIO_BMP280");
3025 
3026 static irqreturn_t bmp085_eoc_irq(int irq, void *d)
3027 {
3028 	struct bmp280_data *data = d;
3029 
3030 	complete(&data->done);
3031 
3032 	return IRQ_HANDLED;
3033 }
3034 
3035 static int bmp085_trigger_probe(struct iio_dev *indio_dev)
3036 {
3037 	struct bmp280_data *data = iio_priv(indio_dev);
3038 	struct device *dev = data->dev;
3039 	unsigned long irq_trig;
3040 	int ret, irq;
3041 
3042 	irq = fwnode_irq_get(dev_fwnode(dev), 0);
3043 	if (irq < 0)
3044 		return dev_err_probe(dev, irq, "No interrupt found.\n");
3045 
3046 	irq_trig = irq_get_trigger_type(irq);
3047 	if (irq_trig != IRQF_TRIGGER_RISING) {
3048 		dev_err(dev, "non-rising trigger given for EOC interrupt, trying to enforce it\n");
3049 		irq_trig = IRQF_TRIGGER_RISING;
3050 	}
3051 
3052 	init_completion(&data->done);
3053 
3054 	ret = devm_request_irq(dev, irq, bmp085_eoc_irq, irq_trig,
3055 			       indio_dev->name, data);
3056 	if (ret) {
3057 		/* Bail out without IRQ but keep the driver in place */
3058 		dev_err(dev, "unable to request DRDY IRQ\n");
3059 		return 0;
3060 	}
3061 
3062 	data->use_eoc = true;
3063 
3064 	return 0;
3065 }
3066 
3067 /* Identical to bmp180_chip_info + bmp085_trigger_probe */
3068 const struct bmp280_chip_info bmp085_chip_info = {
3069 	.id_reg = BMP280_REG_ID,
3070 	.chip_id = bmp180_chip_ids,
3071 	.num_chip_id = ARRAY_SIZE(bmp180_chip_ids),
3072 	.regmap_config = &bmp180_regmap_config,
3073 	.start_up_time_us = 2000,
3074 	.channels = bmp280_channels,
3075 	.num_channels = ARRAY_SIZE(bmp280_channels),
3076 	.avail_scan_masks = bmp280_avail_scan_masks,
3077 
3078 	.oversampling_temp_avail = bmp180_oversampling_temp_avail,
3079 	.num_oversampling_temp_avail =
3080 		ARRAY_SIZE(bmp180_oversampling_temp_avail),
3081 	.oversampling_temp_default = 0,
3082 
3083 	.oversampling_press_avail = bmp180_oversampling_press_avail,
3084 	.num_oversampling_press_avail =
3085 		ARRAY_SIZE(bmp180_oversampling_press_avail),
3086 	.oversampling_press_default = BMP180_MEAS_PRESS_8X,
3087 
3088 	.temp_coeffs = bmp180_temp_coeffs,
3089 	.temp_coeffs_type = IIO_VAL_FRACTIONAL,
3090 	.press_coeffs = bmp180_press_coeffs,
3091 	.press_coeffs_type = IIO_VAL_FRACTIONAL,
3092 
3093 	.chip_config = bmp180_chip_config,
3094 	.read_temp = bmp180_read_temp,
3095 	.read_press = bmp180_read_press,
3096 	.read_calib = bmp180_read_calib,
3097 	.set_mode = bmp180_set_mode,
3098 	.wait_conv = bmp180_wait_conv,
3099 
3100 	.trigger_probe = bmp085_trigger_probe,
3101 	.trigger_handler = bmp180_trigger_handler,
3102 };
3103 EXPORT_SYMBOL_NS(bmp085_chip_info, "IIO_BMP280");
3104 
3105 static int bmp280_buffer_preenable(struct iio_dev *indio_dev)
3106 {
3107 	struct bmp280_data *data = iio_priv(indio_dev);
3108 
3109 	pm_runtime_get_sync(data->dev);
3110 	data->chip_info->set_mode(data, BMP280_NORMAL);
3111 
3112 	return 0;
3113 }
3114 
3115 static int bmp280_buffer_postdisable(struct iio_dev *indio_dev)
3116 {
3117 	struct bmp280_data *data = iio_priv(indio_dev);
3118 
3119 	pm_runtime_put_autosuspend(data->dev);
3120 
3121 	return 0;
3122 }
3123 
3124 static const struct iio_buffer_setup_ops bmp280_buffer_setup_ops = {
3125 	.preenable = bmp280_buffer_preenable,
3126 	.postdisable = bmp280_buffer_postdisable,
3127 };
3128 
3129 static void bmp280_pm_disable(void *data)
3130 {
3131 	struct device *dev = data;
3132 
3133 	pm_runtime_get_sync(dev);
3134 	pm_runtime_put_noidle(dev);
3135 	pm_runtime_disable(dev);
3136 }
3137 
3138 static void bmp280_regulators_disable(void *data)
3139 {
3140 	struct regulator_bulk_data *supplies = data;
3141 
3142 	regulator_bulk_disable(BMP280_NUM_SUPPLIES, supplies);
3143 }
3144 
3145 int bmp280_common_probe(struct device *dev,
3146 			struct regmap *regmap,
3147 			const struct bmp280_chip_info *chip_info,
3148 			const char *name,
3149 			int irq)
3150 {
3151 	struct iio_dev *indio_dev;
3152 	struct bmp280_data *data;
3153 	struct gpio_desc *gpiod;
3154 	unsigned int chip_id;
3155 	unsigned int i;
3156 	int ret;
3157 
3158 	indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
3159 	if (!indio_dev)
3160 		return -ENOMEM;
3161 
3162 	data = iio_priv(indio_dev);
3163 	mutex_init(&data->lock);
3164 	data->dev = dev;
3165 
3166 	indio_dev->name = name;
3167 	indio_dev->info = &bmp280_info;
3168 	indio_dev->modes = INDIO_DIRECT_MODE;
3169 
3170 	data->chip_info = chip_info;
3171 
3172 	/* Apply initial values from chip info structure */
3173 	indio_dev->channels = chip_info->channels;
3174 	indio_dev->num_channels = chip_info->num_channels;
3175 	indio_dev->available_scan_masks = chip_info->avail_scan_masks;
3176 	data->oversampling_press = chip_info->oversampling_press_default;
3177 	data->oversampling_humid = chip_info->oversampling_humid_default;
3178 	data->oversampling_temp = chip_info->oversampling_temp_default;
3179 	data->iir_filter_coeff = chip_info->iir_filter_coeff_default;
3180 	data->sampling_freq = chip_info->sampling_freq_default;
3181 	data->start_up_time_us = chip_info->start_up_time_us;
3182 
3183 	/* Bring up regulators */
3184 	regulator_bulk_set_supply_names(data->supplies,
3185 					bmp280_supply_names,
3186 					BMP280_NUM_SUPPLIES);
3187 
3188 	ret = devm_regulator_bulk_get(dev,
3189 				      BMP280_NUM_SUPPLIES, data->supplies);
3190 	if (ret) {
3191 		dev_err(dev, "failed to get regulators\n");
3192 		return ret;
3193 	}
3194 
3195 	ret = regulator_bulk_enable(BMP280_NUM_SUPPLIES, data->supplies);
3196 	if (ret) {
3197 		dev_err(dev, "failed to enable regulators\n");
3198 		return ret;
3199 	}
3200 
3201 	ret = devm_add_action_or_reset(dev, bmp280_regulators_disable,
3202 				       data->supplies);
3203 	if (ret)
3204 		return ret;
3205 
3206 	/* Wait to make sure we started up properly */
3207 	fsleep(data->start_up_time_us);
3208 
3209 	/* Bring chip out of reset if there is an assigned GPIO line */
3210 	gpiod = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
3211 	if (IS_ERR(gpiod))
3212 		return dev_err_probe(dev, PTR_ERR(gpiod), "failed to get reset GPIO\n");
3213 
3214 	/* Deassert the signal */
3215 	gpiod_set_value_cansleep(gpiod, 0);
3216 
3217 	data->regmap = regmap;
3218 
3219 	ret = regmap_read(regmap, data->chip_info->id_reg, &chip_id);
3220 	if (ret) {
3221 		dev_err(data->dev, "failed to read chip id\n");
3222 		return ret;
3223 	}
3224 
3225 	for (i = 0; i < data->chip_info->num_chip_id; i++) {
3226 		if (chip_id == data->chip_info->chip_id[i]) {
3227 			dev_info(dev, "0x%x is a known chip id for %s\n", chip_id, name);
3228 			break;
3229 		}
3230 	}
3231 
3232 	if (i == data->chip_info->num_chip_id)
3233 		dev_warn(dev, "bad chip id: 0x%x is not a known chip id\n", chip_id);
3234 
3235 	if (data->chip_info->preinit) {
3236 		ret = data->chip_info->preinit(data);
3237 		if (ret)
3238 			return dev_err_probe(data->dev, ret,
3239 					     "error running preinit tasks\n");
3240 	}
3241 
3242 	ret = data->chip_info->chip_config(data);
3243 	if (ret)
3244 		return ret;
3245 
3246 	dev_set_drvdata(dev, indio_dev);
3247 
3248 	/*
3249 	 * Some chips have calibration parameters "programmed into the devices'
3250 	 * non-volatile memory during production". Let's read them out at probe
3251 	 * time once. They will not change.
3252 	 */
3253 
3254 	if (data->chip_info->read_calib) {
3255 		ret = data->chip_info->read_calib(data);
3256 		if (ret)
3257 			return dev_err_probe(data->dev, ret,
3258 					     "failed to read calibration coefficients\n");
3259 	}
3260 
3261 	ret = devm_iio_triggered_buffer_setup(data->dev, indio_dev,
3262 					      iio_pollfunc_store_time,
3263 					      data->chip_info->trigger_handler,
3264 					      &bmp280_buffer_setup_ops);
3265 	if (ret)
3266 		return dev_err_probe(data->dev, ret,
3267 				     "iio triggered buffer setup failed\n");
3268 
3269 	/*
3270 	 * Attempt to grab an optional EOC IRQ - only the BMP085 has this
3271 	 * however as it happens, the BMP085 shares the chip ID of BMP180
3272 	 * so we look for an IRQ if we have that.
3273 	 */
3274 	if (irq > 0) {
3275 		if (data->chip_info->trigger_probe)
3276 			ret = data->chip_info->trigger_probe(indio_dev);
3277 		if (ret)
3278 			return ret;
3279 	}
3280 
3281 	ret = data->chip_info->set_mode(data, BMP280_SLEEP);
3282 	if (ret)
3283 		return dev_err_probe(dev, ret, "Failed to set sleep mode\n");
3284 
3285 	/* Enable runtime PM */
3286 	pm_runtime_get_noresume(dev);
3287 	pm_runtime_set_active(dev);
3288 	pm_runtime_enable(dev);
3289 	/*
3290 	 * Set autosuspend to two orders of magnitude larger than the
3291 	 * start-up time.
3292 	 */
3293 	pm_runtime_set_autosuspend_delay(dev, data->start_up_time_us / 10);
3294 	pm_runtime_use_autosuspend(dev);
3295 	pm_runtime_put(dev);
3296 
3297 	ret = devm_add_action_or_reset(dev, bmp280_pm_disable, dev);
3298 	if (ret)
3299 		return ret;
3300 
3301 	return devm_iio_device_register(dev, indio_dev);
3302 }
3303 EXPORT_SYMBOL_NS(bmp280_common_probe, "IIO_BMP280");
3304 
3305 static int bmp280_runtime_suspend(struct device *dev)
3306 {
3307 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
3308 	struct bmp280_data *data = iio_priv(indio_dev);
3309 
3310 	data->chip_info->set_mode(data, BMP280_SLEEP);
3311 
3312 	fsleep(data->start_up_time_us);
3313 	return regulator_bulk_disable(BMP280_NUM_SUPPLIES, data->supplies);
3314 }
3315 
3316 static int bmp280_runtime_resume(struct device *dev)
3317 {
3318 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
3319 	struct bmp280_data *data = iio_priv(indio_dev);
3320 	int ret;
3321 
3322 	ret = regulator_bulk_enable(BMP280_NUM_SUPPLIES, data->supplies);
3323 	if (ret)
3324 		return ret;
3325 
3326 	fsleep(data->start_up_time_us);
3327 
3328 	ret = data->chip_info->chip_config(data);
3329 	if (ret)
3330 		return ret;
3331 
3332 	return data->chip_info->set_mode(data, data->op_mode);
3333 }
3334 
3335 EXPORT_RUNTIME_DEV_PM_OPS(bmp280_dev_pm_ops, bmp280_runtime_suspend,
3336 			  bmp280_runtime_resume, NULL);
3337 
3338 MODULE_AUTHOR("Vlad Dogaru <vlad.dogaru@intel.com>");
3339 MODULE_DESCRIPTION("Driver for Bosch Sensortec BMP180/BMP280 pressure and temperature sensor");
3340 MODULE_LICENSE("GPL v2");
3341