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, ®); 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, ®); 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, ®); 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, ®); 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, ®); 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, ®); 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, ®); 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, ®); 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, ®); 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, ®); 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