Lines Matching full:data

179 static int bmp280_read_calib(struct bmp280_data *data)  in bmp280_read_calib()  argument
181 struct bmp280_calib *calib = &data->calib.bmp280; in bmp280_read_calib()
186 ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_TEMP_START, in bmp280_read_calib()
187 data->bmp280_cal_buf, sizeof(data->bmp280_cal_buf)); in bmp280_read_calib()
189 dev_err(data->dev, in bmp280_read_calib()
194 /* Toss the temperature and pressure calibration data into the entropy pool */ in bmp280_read_calib()
195 add_device_randomness(data->bmp280_cal_buf, sizeof(data->bmp280_cal_buf)); in bmp280_read_calib()
198 calib->T1 = le16_to_cpu(data->bmp280_cal_buf[T1]); in bmp280_read_calib()
199 calib->T2 = le16_to_cpu(data->bmp280_cal_buf[T2]); in bmp280_read_calib()
200 calib->T3 = le16_to_cpu(data->bmp280_cal_buf[T3]); in bmp280_read_calib()
203 calib->P1 = le16_to_cpu(data->bmp280_cal_buf[P1]); in bmp280_read_calib()
204 calib->P2 = le16_to_cpu(data->bmp280_cal_buf[P2]); in bmp280_read_calib()
205 calib->P3 = le16_to_cpu(data->bmp280_cal_buf[P3]); in bmp280_read_calib()
206 calib->P4 = le16_to_cpu(data->bmp280_cal_buf[P4]); in bmp280_read_calib()
207 calib->P5 = le16_to_cpu(data->bmp280_cal_buf[P5]); in bmp280_read_calib()
208 calib->P6 = le16_to_cpu(data->bmp280_cal_buf[P6]); in bmp280_read_calib()
209 calib->P7 = le16_to_cpu(data->bmp280_cal_buf[P7]); in bmp280_read_calib()
210 calib->P8 = le16_to_cpu(data->bmp280_cal_buf[P8]); in bmp280_read_calib()
211 calib->P9 = le16_to_cpu(data->bmp280_cal_buf[P9]); in bmp280_read_calib()
216 static int bme280_read_calib(struct bmp280_data *data) in bme280_read_calib() argument
218 struct bmp280_calib *calib = &data->calib.bmp280; in bme280_read_calib()
219 struct device *dev = data->dev; in bme280_read_calib()
224 ret = bmp280_read_calib(data); in bme280_read_calib()
235 * Humidity data is only available on BME280. in bme280_read_calib()
238 ret = regmap_read(data->regmap, BMP280_REG_COMP_H1, &tmp); in bme280_read_calib()
245 ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_H2, in bme280_read_calib()
246 &data->le16, sizeof(data->le16)); in bme280_read_calib()
251 calib->H2 = sign_extend32(le16_to_cpu(data->le16), 15); in bme280_read_calib()
253 ret = regmap_read(data->regmap, BMP280_REG_COMP_H3, &tmp); in bme280_read_calib()
260 ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_H4, in bme280_read_calib()
261 &data->be16, sizeof(data->be16)); in bme280_read_calib()
266 calib->H4 = sign_extend32(((be16_to_cpu(data->be16) >> 4) & 0xff0) | in bme280_read_calib()
267 (be16_to_cpu(data->be16) & 0xf), 11); in bme280_read_calib()
269 ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_H5, in bme280_read_calib()
270 &data->le16, sizeof(data->le16)); in bme280_read_calib()
275 calib->H5 = sign_extend32(FIELD_GET(BMP280_COMP_H5_MASK, le16_to_cpu(data->le16)), 11); in bme280_read_calib()
277 ret = regmap_read(data->regmap, BMP280_REG_COMP_H6, &tmp); in bme280_read_calib()
292 static u32 bmp280_compensate_humidity(struct bmp280_data *data, in bmp280_compensate_humidity() argument
295 struct bmp280_calib *calib = &data->calib.bmp280; in bmp280_compensate_humidity()
298 var = ((s32)data->t_fine) - (s32)76800; in bmp280_compensate_humidity()
317 static s32 bmp280_compensate_temp(struct bmp280_data *data, in bmp280_compensate_temp() argument
320 struct bmp280_calib *calib = &data->calib.bmp280; in bmp280_compensate_temp()
328 data->t_fine = var1 + var2; in bmp280_compensate_temp()
330 return (data->t_fine * 5 + 128) >> 8; in bmp280_compensate_temp()
340 static u32 bmp280_compensate_press(struct bmp280_data *data, in bmp280_compensate_press() argument
343 struct bmp280_calib *calib = &data->calib.bmp280; in bmp280_compensate_press()
346 var1 = ((s64)data->t_fine) - 128000; in bmp280_compensate_press()
366 static int bmp280_read_temp(struct bmp280_data *data, in bmp280_read_temp() argument
372 ret = regmap_bulk_read(data->regmap, BMP280_REG_TEMP_MSB, in bmp280_read_temp()
373 data->buf, sizeof(data->buf)); in bmp280_read_temp()
375 dev_err(data->dev, "failed to read temperature\n"); in bmp280_read_temp()
379 adc_temp = FIELD_GET(BMP280_MEAS_TRIM_MASK, get_unaligned_be24(data->buf)); in bmp280_read_temp()
382 dev_err(data->dev, "reading temperature skipped\n"); in bmp280_read_temp()
385 comp_temp = bmp280_compensate_temp(data, adc_temp); in bmp280_read_temp()
399 static int bmp280_read_press(struct bmp280_data *data, in bmp280_read_press() argument
407 ret = bmp280_read_temp(data, NULL, NULL); in bmp280_read_press()
411 ret = regmap_bulk_read(data->regmap, BMP280_REG_PRESS_MSB, in bmp280_read_press()
412 data->buf, sizeof(data->buf)); in bmp280_read_press()
414 dev_err(data->dev, "failed to read pressure\n"); in bmp280_read_press()
418 adc_press = FIELD_GET(BMP280_MEAS_TRIM_MASK, get_unaligned_be24(data->buf)); in bmp280_read_press()
421 dev_err(data->dev, "reading pressure skipped\n"); in bmp280_read_press()
424 comp_press = bmp280_compensate_press(data, adc_press); in bmp280_read_press()
432 static int bmp280_read_humid(struct bmp280_data *data, int *val, int *val2) in bmp280_read_humid() argument
439 ret = bmp280_read_temp(data, NULL, NULL); in bmp280_read_humid()
443 ret = regmap_bulk_read(data->regmap, BMP280_REG_HUMIDITY_MSB, in bmp280_read_humid()
444 &data->be16, sizeof(data->be16)); in bmp280_read_humid()
446 dev_err(data->dev, "failed to read humidity\n"); in bmp280_read_humid()
450 adc_humidity = be16_to_cpu(data->be16); in bmp280_read_humid()
453 dev_err(data->dev, "reading humidity skipped\n"); in bmp280_read_humid()
456 comp_humidity = bmp280_compensate_humidity(data, adc_humidity); in bmp280_read_humid()
467 struct bmp280_data *data = iio_priv(indio_dev); in bmp280_read_raw() local
470 pm_runtime_get_sync(data->dev); in bmp280_read_raw()
471 mutex_lock(&data->lock); in bmp280_read_raw()
477 ret = data->chip_info->read_humid(data, val, val2); in bmp280_read_raw()
480 ret = data->chip_info->read_press(data, val, val2); in bmp280_read_raw()
483 ret = data->chip_info->read_temp(data, val, val2); in bmp280_read_raw()
493 *val = 1 << data->oversampling_humid; in bmp280_read_raw()
497 *val = 1 << data->oversampling_press; in bmp280_read_raw()
501 *val = 1 << data->oversampling_temp; in bmp280_read_raw()
510 if (!data->chip_info->sampling_freq_avail) { in bmp280_read_raw()
515 *val = data->chip_info->sampling_freq_avail[data->sampling_freq][0]; in bmp280_read_raw()
516 *val2 = data->chip_info->sampling_freq_avail[data->sampling_freq][1]; in bmp280_read_raw()
520 if (!data->chip_info->iir_filter_coeffs_avail) { in bmp280_read_raw()
525 *val = (1 << data->iir_filter_coeff) - 1; in bmp280_read_raw()
533 mutex_unlock(&data->lock); in bmp280_read_raw()
534 pm_runtime_mark_last_busy(data->dev); in bmp280_read_raw()
535 pm_runtime_put_autosuspend(data->dev); in bmp280_read_raw()
540 static int bmp280_write_oversampling_ratio_humid(struct bmp280_data *data, in bmp280_write_oversampling_ratio_humid() argument
543 const int *avail = data->chip_info->oversampling_humid_avail; in bmp280_write_oversampling_ratio_humid()
544 const int n = data->chip_info->num_oversampling_humid_avail; in bmp280_write_oversampling_ratio_humid()
550 prev = data->oversampling_humid; in bmp280_write_oversampling_ratio_humid()
551 data->oversampling_humid = ilog2(val); in bmp280_write_oversampling_ratio_humid()
553 ret = data->chip_info->chip_config(data); in bmp280_write_oversampling_ratio_humid()
555 data->oversampling_humid = prev; in bmp280_write_oversampling_ratio_humid()
556 data->chip_info->chip_config(data); in bmp280_write_oversampling_ratio_humid()
565 static int bmp280_write_oversampling_ratio_temp(struct bmp280_data *data, in bmp280_write_oversampling_ratio_temp() argument
568 const int *avail = data->chip_info->oversampling_temp_avail; in bmp280_write_oversampling_ratio_temp()
569 const int n = data->chip_info->num_oversampling_temp_avail; in bmp280_write_oversampling_ratio_temp()
575 prev = data->oversampling_temp; in bmp280_write_oversampling_ratio_temp()
576 data->oversampling_temp = ilog2(val); in bmp280_write_oversampling_ratio_temp()
578 ret = data->chip_info->chip_config(data); in bmp280_write_oversampling_ratio_temp()
580 data->oversampling_temp = prev; in bmp280_write_oversampling_ratio_temp()
581 data->chip_info->chip_config(data); in bmp280_write_oversampling_ratio_temp()
590 static int bmp280_write_oversampling_ratio_press(struct bmp280_data *data, in bmp280_write_oversampling_ratio_press() argument
593 const int *avail = data->chip_info->oversampling_press_avail; in bmp280_write_oversampling_ratio_press()
594 const int n = data->chip_info->num_oversampling_press_avail; in bmp280_write_oversampling_ratio_press()
600 prev = data->oversampling_press; in bmp280_write_oversampling_ratio_press()
601 data->oversampling_press = ilog2(val); in bmp280_write_oversampling_ratio_press()
603 ret = data->chip_info->chip_config(data); in bmp280_write_oversampling_ratio_press()
605 data->oversampling_press = prev; in bmp280_write_oversampling_ratio_press()
606 data->chip_info->chip_config(data); in bmp280_write_oversampling_ratio_press()
615 static int bmp280_write_sampling_frequency(struct bmp280_data *data, in bmp280_write_sampling_frequency() argument
618 const int (*avail)[2] = data->chip_info->sampling_freq_avail; in bmp280_write_sampling_frequency()
619 const int n = data->chip_info->num_sampling_freq_avail; in bmp280_write_sampling_frequency()
625 prev = data->sampling_freq; in bmp280_write_sampling_frequency()
626 data->sampling_freq = i; in bmp280_write_sampling_frequency()
628 ret = data->chip_info->chip_config(data); in bmp280_write_sampling_frequency()
630 data->sampling_freq = prev; in bmp280_write_sampling_frequency()
631 data->chip_info->chip_config(data); in bmp280_write_sampling_frequency()
640 static int bmp280_write_iir_filter_coeffs(struct bmp280_data *data, int val) in bmp280_write_iir_filter_coeffs() argument
642 const int *avail = data->chip_info->iir_filter_coeffs_avail; in bmp280_write_iir_filter_coeffs()
643 const int n = data->chip_info->num_iir_filter_coeffs_avail; in bmp280_write_iir_filter_coeffs()
649 prev = data->iir_filter_coeff; in bmp280_write_iir_filter_coeffs()
650 data->iir_filter_coeff = i; in bmp280_write_iir_filter_coeffs()
652 ret = data->chip_info->chip_config(data); in bmp280_write_iir_filter_coeffs()
654 data->iir_filter_coeff = prev; in bmp280_write_iir_filter_coeffs()
655 data->chip_info->chip_config(data); in bmp280_write_iir_filter_coeffs()
669 struct bmp280_data *data = iio_priv(indio_dev); in bmp280_write_raw() local
680 pm_runtime_get_sync(data->dev); in bmp280_write_raw()
681 mutex_lock(&data->lock); in bmp280_write_raw()
684 ret = bmp280_write_oversampling_ratio_humid(data, val); in bmp280_write_raw()
687 ret = bmp280_write_oversampling_ratio_press(data, val); in bmp280_write_raw()
690 ret = bmp280_write_oversampling_ratio_temp(data, val); in bmp280_write_raw()
696 mutex_unlock(&data->lock); in bmp280_write_raw()
697 pm_runtime_mark_last_busy(data->dev); in bmp280_write_raw()
698 pm_runtime_put_autosuspend(data->dev); in bmp280_write_raw()
701 pm_runtime_get_sync(data->dev); in bmp280_write_raw()
702 mutex_lock(&data->lock); in bmp280_write_raw()
703 ret = bmp280_write_sampling_frequency(data, val, val2); in bmp280_write_raw()
704 mutex_unlock(&data->lock); in bmp280_write_raw()
705 pm_runtime_mark_last_busy(data->dev); in bmp280_write_raw()
706 pm_runtime_put_autosuspend(data->dev); in bmp280_write_raw()
709 pm_runtime_get_sync(data->dev); in bmp280_write_raw()
710 mutex_lock(&data->lock); in bmp280_write_raw()
711 ret = bmp280_write_iir_filter_coeffs(data, val); in bmp280_write_raw()
712 mutex_unlock(&data->lock); in bmp280_write_raw()
713 pm_runtime_mark_last_busy(data->dev); in bmp280_write_raw()
714 pm_runtime_put_autosuspend(data->dev); in bmp280_write_raw()
728 struct bmp280_data *data = iio_priv(indio_dev); in bmp280_read_avail() local
734 *vals = data->chip_info->oversampling_press_avail; in bmp280_read_avail()
735 *length = data->chip_info->num_oversampling_press_avail; in bmp280_read_avail()
738 *vals = data->chip_info->oversampling_temp_avail; in bmp280_read_avail()
739 *length = data->chip_info->num_oversampling_temp_avail; in bmp280_read_avail()
747 *vals = (const int *)data->chip_info->sampling_freq_avail; in bmp280_read_avail()
750 *length = data->chip_info->num_sampling_freq_avail; in bmp280_read_avail()
753 *vals = data->chip_info->iir_filter_coeffs_avail; in bmp280_read_avail()
755 *length = data->chip_info->num_iir_filter_coeffs_avail; in bmp280_read_avail()
768 static int bmp280_chip_config(struct bmp280_data *data) in bmp280_chip_config() argument
770 u8 osrs = FIELD_PREP(BMP280_OSRS_TEMP_MASK, data->oversampling_temp + 1) | in bmp280_chip_config()
771 FIELD_PREP(BMP280_OSRS_PRESS_MASK, data->oversampling_press + 1); in bmp280_chip_config()
774 ret = regmap_write_bits(data->regmap, BMP280_REG_CTRL_MEAS, in bmp280_chip_config()
780 dev_err(data->dev, in bmp280_chip_config()
785 ret = regmap_update_bits(data->regmap, BMP280_REG_CONFIG, in bmp280_chip_config()
789 dev_err(data->dev, in bmp280_chip_config()
834 static int bme280_chip_config(struct bmp280_data *data) in bme280_chip_config() argument
836 u8 osrs = FIELD_PREP(BMP280_OSRS_HUMIDITY_MASK, data->oversampling_humid + 1); in bme280_chip_config()
843 ret = regmap_update_bits(data->regmap, BMP280_REG_CTRL_HUMIDITY, in bme280_chip_config()
849 return bmp280_chip_config(data); in bme280_chip_config()
890 static int bmp380_cmd(struct bmp280_data *data, u8 cmd) in bmp380_cmd() argument
896 ret = regmap_read(data->regmap, BMP380_REG_STATUS, &reg); in bmp380_cmd()
898 dev_err(data->dev, "failed to read error register\n"); in bmp380_cmd()
902 dev_err(data->dev, "device is not ready to accept commands\n"); in bmp380_cmd()
907 ret = regmap_write(data->regmap, BMP380_REG_CMD, cmd); in bmp380_cmd()
909 dev_err(data->dev, "failed to send command to device\n"); in bmp380_cmd()
913 usleep_range(data->start_up_time, data->start_up_time + 100); in bmp380_cmd()
915 ret = regmap_read(data->regmap, BMP380_REG_ERROR, &reg); in bmp380_cmd()
917 dev_err(data->dev, "error reading ERROR reg\n"); in bmp380_cmd()
921 dev_err(data->dev, "error processing command 0x%X\n", cmd); in bmp380_cmd()
935 static s32 bmp380_compensate_temp(struct bmp280_data *data, u32 adc_temp) in bmp380_compensate_temp() argument
938 struct bmp380_calib *calib = &data->calib.bmp380; in bmp380_compensate_temp()
946 data->t_fine = (s32) var6; in bmp380_compensate_temp()
960 static u32 bmp380_compensate_press(struct bmp280_data *data, u32 adc_press) in bmp380_compensate_press() argument
963 struct bmp380_calib *calib = &data->calib.bmp380; in bmp380_compensate_press()
966 var1 = (s64)data->t_fine * (s64)data->t_fine; in bmp380_compensate_press()
968 var3 = (var2 * ((s64) data->t_fine)) >> 8; in bmp380_compensate_press()
971 var6 = ((s64)calib->P6 * (s64)data->t_fine) << 22; in bmp380_compensate_press()
976 ((s64)data->t_fine << 21); in bmp380_compensate_press()
980 var2 = (s64)calib->P10 * (s64)data->t_fine; in bmp380_compensate_press()
1000 static int bmp380_read_temp(struct bmp280_data *data, int *val, int *val2) in bmp380_read_temp() argument
1006 ret = regmap_bulk_read(data->regmap, BMP380_REG_TEMP_XLSB, in bmp380_read_temp()
1007 data->buf, sizeof(data->buf)); in bmp380_read_temp()
1009 dev_err(data->dev, "failed to read temperature\n"); in bmp380_read_temp()
1013 adc_temp = get_unaligned_le24(data->buf); in bmp380_read_temp()
1015 dev_err(data->dev, "reading temperature skipped\n"); in bmp380_read_temp()
1018 comp_temp = bmp380_compensate_temp(data, adc_temp); in bmp380_read_temp()
1033 static int bmp380_read_press(struct bmp280_data *data, int *val, int *val2) in bmp380_read_press() argument
1040 ret = bmp380_read_temp(data, NULL, NULL); in bmp380_read_press()
1044 ret = regmap_bulk_read(data->regmap, BMP380_REG_PRESS_XLSB, in bmp380_read_press()
1045 data->buf, sizeof(data->buf)); in bmp380_read_press()
1047 dev_err(data->dev, "failed to read pressure\n"); in bmp380_read_press()
1051 adc_press = get_unaligned_le24(data->buf); in bmp380_read_press()
1053 dev_err(data->dev, "reading pressure skipped\n"); in bmp380_read_press()
1056 comp_press = bmp380_compensate_press(data, adc_press); in bmp380_read_press()
1065 static int bmp380_read_calib(struct bmp280_data *data) in bmp380_read_calib() argument
1067 struct bmp380_calib *calib = &data->calib.bmp380; in bmp380_read_calib()
1070 /* Read temperature and pressure calibration data */ in bmp380_read_calib()
1071 ret = regmap_bulk_read(data->regmap, BMP380_REG_CALIB_TEMP_START, in bmp380_read_calib()
1072 data->bmp380_cal_buf, sizeof(data->bmp380_cal_buf)); in bmp380_read_calib()
1074 dev_err(data->dev, in bmp380_read_calib()
1079 /* Toss the temperature calibration data into the entropy pool */ in bmp380_read_calib()
1080 add_device_randomness(data->bmp380_cal_buf, sizeof(data->bmp380_cal_buf)); in bmp380_read_calib()
1083 calib->T1 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_T1]); in bmp380_read_calib()
1084 calib->T2 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_T2]); in bmp380_read_calib()
1085 calib->T3 = data->bmp380_cal_buf[BMP380_T3]; in bmp380_read_calib()
1086 calib->P1 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P1]); in bmp380_read_calib()
1087 calib->P2 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P2]); in bmp380_read_calib()
1088 calib->P3 = data->bmp380_cal_buf[BMP380_P3]; in bmp380_read_calib()
1089 calib->P4 = data->bmp380_cal_buf[BMP380_P4]; in bmp380_read_calib()
1090 calib->P5 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P5]); in bmp380_read_calib()
1091 calib->P6 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P6]); in bmp380_read_calib()
1092 calib->P7 = data->bmp380_cal_buf[BMP380_P7]; in bmp380_read_calib()
1093 calib->P8 = data->bmp380_cal_buf[BMP380_P8]; in bmp380_read_calib()
1094 calib->P9 = get_unaligned_le16(&data->bmp380_cal_buf[BMP380_P9]); in bmp380_read_calib()
1095 calib->P10 = data->bmp380_cal_buf[BMP380_P10]; in bmp380_read_calib()
1096 calib->P11 = data->bmp380_cal_buf[BMP380_P11]; in bmp380_read_calib()
1122 static int bmp380_preinit(struct bmp280_data *data) in bmp380_preinit() argument
1125 return bmp380_cmd(data, BMP380_CMD_SOFT_RESET); in bmp380_preinit()
1128 static int bmp380_chip_config(struct bmp280_data *data) in bmp380_chip_config() argument
1136 ret = regmap_update_bits(data->regmap, BMP380_REG_POWER_CONTROL, in bmp380_chip_config()
1141 dev_err(data->dev, in bmp380_chip_config()
1147 osrs = FIELD_PREP(BMP380_OSRS_TEMP_MASK, data->oversampling_temp) | in bmp380_chip_config()
1148 FIELD_PREP(BMP380_OSRS_PRESS_MASK, data->oversampling_press); in bmp380_chip_config()
1150 ret = regmap_update_bits_check(data->regmap, BMP380_REG_OSR, in bmp380_chip_config()
1155 dev_err(data->dev, "failed to write oversampling register\n"); in bmp380_chip_config()
1160 /* Configure output data rate */ in bmp380_chip_config()
1161 ret = regmap_update_bits_check(data->regmap, BMP380_REG_ODR, in bmp380_chip_config()
1162 BMP380_ODRS_MASK, data->sampling_freq, &aux); in bmp380_chip_config()
1164 dev_err(data->dev, "failed to write ODR selection register\n"); in bmp380_chip_config()
1169 /* Set filter data */ in bmp380_chip_config()
1170 ret = regmap_update_bits_check(data->regmap, BMP380_REG_CONFIG, BMP380_FILTER_MASK, in bmp380_chip_config()
1171 FIELD_PREP(BMP380_FILTER_MASK, data->iir_filter_coeff), in bmp380_chip_config()
1174 dev_err(data->dev, "failed to write config register\n"); in bmp380_chip_config()
1188 ret = regmap_write_bits(data->regmap, BMP380_REG_POWER_CONTROL, in bmp380_chip_config()
1192 dev_err(data->dev, "failed to set sleep mode\n"); in bmp380_chip_config()
1196 ret = regmap_write_bits(data->regmap, BMP380_REG_POWER_CONTROL, in bmp380_chip_config()
1200 dev_err(data->dev, "failed to set normal mode\n"); in bmp380_chip_config()
1211 ret = regmap_read(data->regmap, BMP380_REG_ERROR, &tmp); in bmp380_chip_config()
1213 dev_err(data->dev, in bmp380_chip_config()
1218 dev_warn(data->dev, in bmp380_chip_config()
1264 static int bmp580_soft_reset(struct bmp280_data *data) in bmp580_soft_reset() argument
1269 ret = regmap_write(data->regmap, BMP580_REG_CMD, BMP580_CMD_SOFT_RESET); in bmp580_soft_reset()
1271 dev_err(data->dev, "failed to send reset command to device\n"); in bmp580_soft_reset()
1277 ret = regmap_read(data->regmap, BMP580_REG_CHIP_ID, &reg); in bmp580_soft_reset()
1279 dev_err(data->dev, "failed to reestablish comms after reset\n"); in bmp580_soft_reset()
1283 ret = regmap_read(data->regmap, BMP580_REG_INT_STATUS, &reg); in bmp580_soft_reset()
1285 dev_err(data->dev, "error reading interrupt status register\n"); in bmp580_soft_reset()
1289 dev_err(data->dev, "error resetting sensor\n"); in bmp580_soft_reset()
1298 * @data: sensor data struct
1301 static int bmp580_nvm_operation(struct bmp280_data *data, bool is_write) in bmp580_nvm_operation() argument
1308 ret = regmap_read(data->regmap, BMP580_REG_STATUS, &reg); in bmp580_nvm_operation()
1310 dev_err(data->dev, "failed to check nvm status\n"); in bmp580_nvm_operation()
1314 dev_err(data->dev, "sensor's nvm is not ready\n"); in bmp580_nvm_operation()
1319 ret = regmap_write(data->regmap, BMP580_REG_CMD, BMP580_CMD_NVM_OP_SEQ_0); in bmp580_nvm_operation()
1321 dev_err(data->dev, "failed to send nvm operation's first sequence\n"); in bmp580_nvm_operation()
1326 ret = regmap_write(data->regmap, BMP580_REG_CMD, in bmp580_nvm_operation()
1329 dev_err(data->dev, "failed to send nvm write sequence\n"); in bmp580_nvm_operation()
1337 ret = regmap_write(data->regmap, BMP580_REG_CMD, in bmp580_nvm_operation()
1340 dev_err(data->dev, "failed to send nvm read sequence\n"); in bmp580_nvm_operation()
1348 dev_err(data->dev, "failed to write command sequence\n"); in bmp580_nvm_operation()
1353 ret = regmap_read_poll_timeout(data->regmap, BMP580_REG_STATUS, reg, in bmp580_nvm_operation()
1357 dev_err(data->dev, "error checking nvm operation status\n"); in bmp580_nvm_operation()
1363 dev_err(data->dev, "error processing nvm operation\n"); in bmp580_nvm_operation()
1372 * We are only required to read the register raw data and adapt the ranges
1376 static int bmp580_read_temp(struct bmp280_data *data, int *val, int *val2) in bmp580_read_temp() argument
1381 ret = regmap_bulk_read(data->regmap, BMP580_REG_TEMP_XLSB, data->buf, in bmp580_read_temp()
1382 sizeof(data->buf)); in bmp580_read_temp()
1384 dev_err(data->dev, "failed to read temperature\n"); in bmp580_read_temp()
1388 raw_temp = get_unaligned_le24(data->buf); in bmp580_read_temp()
1390 dev_err(data->dev, "reading temperature skipped\n"); in bmp580_read_temp()
1404 static int bmp580_read_press(struct bmp280_data *data, int *val, int *val2) in bmp580_read_press() argument
1409 ret = regmap_bulk_read(data->regmap, BMP580_REG_PRESS_XLSB, data->buf, in bmp580_read_press()
1410 sizeof(data->buf)); in bmp580_read_press()
1412 dev_err(data->dev, "failed to read pressure\n"); in bmp580_read_press()
1416 raw_press = get_unaligned_le24(data->buf); in bmp580_read_press()
1418 dev_err(data->dev, "reading pressure skipped\n"); in bmp580_read_press()
1470 struct bmp280_data *data = priv; in bmp580_nvmem_read() local
1474 pm_runtime_get_sync(data->dev); in bmp580_nvmem_read()
1475 mutex_lock(&data->lock); in bmp580_nvmem_read()
1478 ret = regmap_update_bits(data->regmap, BMP580_REG_ODR_CONFIG, in bmp580_nvmem_read()
1483 dev_err(data->dev, "failed to change sensor to standby mode\n"); in bmp580_nvmem_read()
1492 ret = regmap_write(data->regmap, BMP580_REG_NVM_ADDR, in bmp580_nvmem_read()
1495 dev_err(data->dev, "error writing nvm address\n"); in bmp580_nvmem_read()
1499 ret = bmp580_nvm_operation(data, false); in bmp580_nvmem_read()
1503 ret = regmap_bulk_read(data->regmap, BMP580_REG_NVM_DATA_LSB, &data->le16, in bmp580_nvmem_read()
1504 sizeof(data->le16)); in bmp580_nvmem_read()
1506 dev_err(data->dev, "error reading nvm data regs\n"); in bmp580_nvmem_read()
1510 *dst++ = le16_to_cpu(data->le16); in bmp580_nvmem_read()
1516 data->chip_info->chip_config(data); in bmp580_nvmem_read()
1517 mutex_unlock(&data->lock); in bmp580_nvmem_read()
1518 pm_runtime_mark_last_busy(data->dev); in bmp580_nvmem_read()
1519 pm_runtime_put_autosuspend(data->dev); in bmp580_nvmem_read()
1526 struct bmp280_data *data = priv; in bmp580_nvmem_write() local
1530 pm_runtime_get_sync(data->dev); in bmp580_nvmem_write()
1531 mutex_lock(&data->lock); in bmp580_nvmem_write()
1534 ret = regmap_update_bits(data->regmap, BMP580_REG_ODR_CONFIG, in bmp580_nvmem_write()
1539 dev_err(data->dev, "failed to change sensor to standby mode\n"); in bmp580_nvmem_write()
1548 ret = regmap_write(data->regmap, BMP580_REG_NVM_ADDR, BMP580_NVM_PROG_EN | in bmp580_nvmem_write()
1551 dev_err(data->dev, "error writing nvm address\n"); in bmp580_nvmem_write()
1554 data->le16 = cpu_to_le16(*buf++); in bmp580_nvmem_write()
1556 ret = regmap_bulk_write(data->regmap, BMP580_REG_NVM_DATA_LSB, &data->le16, in bmp580_nvmem_write()
1557 sizeof(data->le16)); in bmp580_nvmem_write()
1559 dev_err(data->dev, "error writing LSB NVM data regs\n"); in bmp580_nvmem_write()
1563 ret = bmp580_nvm_operation(data, true); in bmp580_nvmem_write()
1568 ret = regmap_update_bits(data->regmap, BMP580_REG_NVM_ADDR, in bmp580_nvmem_write()
1571 dev_err(data->dev, "error resetting nvm write\n"); in bmp580_nvmem_write()
1580 data->chip_info->chip_config(data); in bmp580_nvmem_write()
1581 mutex_unlock(&data->lock); in bmp580_nvmem_write()
1582 pm_runtime_mark_last_busy(data->dev); in bmp580_nvmem_write()
1583 pm_runtime_put_autosuspend(data->dev); in bmp580_nvmem_write()
1587 static int bmp580_preinit(struct bmp280_data *data) in bmp580_preinit() argument
1590 .dev = data->dev, in bmp580_preinit()
1591 .priv = data, in bmp580_preinit()
1603 ret = bmp580_soft_reset(data); in bmp580_preinit()
1608 ret = regmap_read(data->regmap, BMP580_REG_CHIP_ID, &reg); in bmp580_preinit()
1614 dev_warn(data->dev, "preinit: unexpected chip_id\n"); in bmp580_preinit()
1616 ret = regmap_read(data->regmap, BMP580_REG_STATUS, &reg); in bmp580_preinit()
1622 dev_err(data->dev, "preinit: nvm error on powerup sequence\n"); in bmp580_preinit()
1630 static int bmp580_chip_config(struct bmp280_data *data) in bmp580_chip_config() argument
1638 ret = regmap_update_bits(data->regmap, BMP580_REG_ODR_CONFIG, in bmp580_chip_config()
1643 dev_err(data->dev, "failed to change sensor to standby mode\n"); in bmp580_chip_config()
1653 ret = regmap_update_bits(data->regmap, BMP580_REG_DSP_CONFIG, in bmp580_chip_config()
1659 reg_val = FIELD_PREP(BMP580_OSR_TEMP_MASK, data->oversampling_temp) | in bmp580_chip_config()
1660 FIELD_PREP(BMP580_OSR_PRESS_MASK, data->oversampling_press) | in bmp580_chip_config()
1663 ret = regmap_update_bits_check(data->regmap, BMP580_REG_OSR_CONFIG, in bmp580_chip_config()
1668 dev_err(data->dev, "failed to write oversampling register\n"); in bmp580_chip_config()
1673 /* Configure output data rate */ in bmp580_chip_config()
1674 ret = regmap_update_bits_check(data->regmap, BMP580_REG_ODR_CONFIG, BMP580_ODR_MASK, in bmp580_chip_config()
1675 FIELD_PREP(BMP580_ODR_MASK, data->sampling_freq), in bmp580_chip_config()
1678 dev_err(data->dev, "failed to write ODR configuration register\n"); in bmp580_chip_config()
1683 /* Set filter data */ in bmp580_chip_config()
1684 reg_val = FIELD_PREP(BMP580_DSP_IIR_PRESS_MASK, data->iir_filter_coeff) | in bmp580_chip_config()
1685 FIELD_PREP(BMP580_DSP_IIR_TEMP_MASK, data->iir_filter_coeff); in bmp580_chip_config()
1687 ret = regmap_update_bits_check(data->regmap, BMP580_REG_DSP_IIR, in bmp580_chip_config()
1692 dev_err(data->dev, "failed to write config register\n"); in bmp580_chip_config()
1698 ret = regmap_write_bits(data->regmap, BMP580_REG_ODR_CONFIG, in bmp580_chip_config()
1702 dev_err(data->dev, "failed to set normal mode\n"); in bmp580_chip_config()
1713 ret = regmap_read(data->regmap, BMP580_REG_EFF_OSR, &tmp); in bmp580_chip_config()
1715 dev_err(data->dev, "error reading effective OSR register\n"); in bmp580_chip_config()
1719 dev_warn(data->dev, "OSR and ODR incompatible settings detected\n"); in bmp580_chip_config()
1720 /* Set current OSR settings from data on effective OSR */ in bmp580_chip_config()
1721 data->oversampling_temp = FIELD_GET(BMP580_EFF_OSR_TEMP_MASK, tmp); in bmp580_chip_config()
1722 data->oversampling_press = FIELD_GET(BMP580_EFF_OSR_PRESS_MASK, tmp); in bmp580_chip_config()
1765 static int bmp180_measure(struct bmp280_data *data, u8 ctrl_meas) in bmp180_measure() argument
1772 if (data->use_eoc) in bmp180_measure()
1773 reinit_completion(&data->done); in bmp180_measure()
1775 ret = regmap_write(data->regmap, BMP280_REG_CTRL_MEAS, ctrl_meas); in bmp180_measure()
1779 if (data->use_eoc) { in bmp180_measure()
1785 ret = wait_for_completion_timeout(&data->done, in bmp180_measure()
1788 dev_err(data->dev, "timeout waiting for completion\n"); in bmp180_measure()
1794 conversion_time_max[data->oversampling_press]; in bmp180_measure()
1799 ret = regmap_read(data->regmap, BMP280_REG_CTRL_MEAS, &ctrl); in bmp180_measure()
1810 static int bmp180_read_adc_temp(struct bmp280_data *data, int *val) in bmp180_read_adc_temp() argument
1814 ret = bmp180_measure(data, in bmp180_read_adc_temp()
1820 ret = regmap_bulk_read(data->regmap, BMP180_REG_OUT_MSB, in bmp180_read_adc_temp()
1821 &data->be16, sizeof(data->be16)); in bmp180_read_adc_temp()
1825 *val = be16_to_cpu(data->be16); in bmp180_read_adc_temp()
1830 static int bmp180_read_calib(struct bmp280_data *data) in bmp180_read_calib() argument
1832 struct bmp180_calib *calib = &data->calib.bmp180; in bmp180_read_calib()
1836 ret = regmap_bulk_read(data->regmap, BMP180_REG_CALIB_START, in bmp180_read_calib()
1837 data->bmp180_cal_buf, sizeof(data->bmp180_cal_buf)); in bmp180_read_calib()
1843 for (i = 0; i < ARRAY_SIZE(data->bmp180_cal_buf); i++) { in bmp180_read_calib()
1844 if (data->bmp180_cal_buf[i] == cpu_to_be16(0) || in bmp180_read_calib()
1845 data->bmp180_cal_buf[i] == cpu_to_be16(0xffff)) in bmp180_read_calib()
1849 /* Toss the calibration data into the entropy pool */ in bmp180_read_calib()
1850 add_device_randomness(data->bmp180_cal_buf, sizeof(data->bmp180_cal_buf)); in bmp180_read_calib()
1852 calib->AC1 = be16_to_cpu(data->bmp180_cal_buf[AC1]); in bmp180_read_calib()
1853 calib->AC2 = be16_to_cpu(data->bmp180_cal_buf[AC2]); in bmp180_read_calib()
1854 calib->AC3 = be16_to_cpu(data->bmp180_cal_buf[AC3]); in bmp180_read_calib()
1855 calib->AC4 = be16_to_cpu(data->bmp180_cal_buf[AC4]); in bmp180_read_calib()
1856 calib->AC5 = be16_to_cpu(data->bmp180_cal_buf[AC5]); in bmp180_read_calib()
1857 calib->AC6 = be16_to_cpu(data->bmp180_cal_buf[AC6]); in bmp180_read_calib()
1858 calib->B1 = be16_to_cpu(data->bmp180_cal_buf[B1]); in bmp180_read_calib()
1859 calib->B2 = be16_to_cpu(data->bmp180_cal_buf[B2]); in bmp180_read_calib()
1860 calib->MB = be16_to_cpu(data->bmp180_cal_buf[MB]); in bmp180_read_calib()
1861 calib->MC = be16_to_cpu(data->bmp180_cal_buf[MC]); in bmp180_read_calib()
1862 calib->MD = be16_to_cpu(data->bmp180_cal_buf[MD]); in bmp180_read_calib()
1873 static s32 bmp180_compensate_temp(struct bmp280_data *data, s32 adc_temp) in bmp180_compensate_temp() argument
1875 struct bmp180_calib *calib = &data->calib.bmp180; in bmp180_compensate_temp()
1880 data->t_fine = x1 + x2; in bmp180_compensate_temp()
1882 return (data->t_fine + 8) >> 4; in bmp180_compensate_temp()
1885 static int bmp180_read_temp(struct bmp280_data *data, int *val, int *val2) in bmp180_read_temp() argument
1890 ret = bmp180_read_adc_temp(data, &adc_temp); in bmp180_read_temp()
1894 comp_temp = bmp180_compensate_temp(data, adc_temp); in bmp180_read_temp()
1908 static int bmp180_read_adc_press(struct bmp280_data *data, int *val) in bmp180_read_adc_press() argument
1910 u8 oss = data->oversampling_press; in bmp180_read_adc_press()
1913 ret = bmp180_measure(data, in bmp180_read_adc_press()
1920 ret = regmap_bulk_read(data->regmap, BMP180_REG_OUT_MSB, in bmp180_read_adc_press()
1921 data->buf, sizeof(data->buf)); in bmp180_read_adc_press()
1925 *val = get_unaligned_be24(data->buf) >> (8 - oss); in bmp180_read_adc_press()
1935 static u32 bmp180_compensate_press(struct bmp280_data *data, s32 adc_press) in bmp180_compensate_press() argument
1937 struct bmp180_calib *calib = &data->calib.bmp180; in bmp180_compensate_press()
1938 s32 oss = data->oversampling_press; in bmp180_compensate_press()
1943 b6 = data->t_fine - 4000; in bmp180_compensate_press()
1965 static int bmp180_read_press(struct bmp280_data *data, in bmp180_read_press() argument
1973 ret = bmp180_read_temp(data, NULL, NULL); in bmp180_read_press()
1977 ret = bmp180_read_adc_press(data, &adc_press); in bmp180_read_press()
1981 comp_press = bmp180_compensate_press(data, adc_press); in bmp180_read_press()
1989 static int bmp180_chip_config(struct bmp280_data *data) in bmp180_chip_config() argument
2026 struct bmp280_data *data = d; in bmp085_eoc_irq() local
2028 complete(&data->done); in bmp085_eoc_irq()
2036 struct bmp280_data *data) in bmp085_fetch_eoc_irq() argument
2047 init_completion(&data->done); in bmp085_fetch_eoc_irq()
2055 data); in bmp085_fetch_eoc_irq()
2062 data->use_eoc = true; in bmp085_fetch_eoc_irq()
2066 static void bmp280_pm_disable(void *data) in bmp280_pm_disable() argument
2068 struct device *dev = data; in bmp280_pm_disable()
2075 static void bmp280_regulators_disable(void *data) in bmp280_regulators_disable() argument
2077 struct regulator_bulk_data *supplies = data; in bmp280_regulators_disable()
2089 struct bmp280_data *data; in bmp280_common_probe() local
2095 indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); in bmp280_common_probe()
2099 data = iio_priv(indio_dev); in bmp280_common_probe()
2100 mutex_init(&data->lock); in bmp280_common_probe()
2101 data->dev = dev; in bmp280_common_probe()
2107 data->chip_info = chip_info; in bmp280_common_probe()
2112 data->oversampling_press = chip_info->oversampling_press_default; in bmp280_common_probe()
2113 data->oversampling_humid = chip_info->oversampling_humid_default; in bmp280_common_probe()
2114 data->oversampling_temp = chip_info->oversampling_temp_default; in bmp280_common_probe()
2115 data->iir_filter_coeff = chip_info->iir_filter_coeff_default; in bmp280_common_probe()
2116 data->sampling_freq = chip_info->sampling_freq_default; in bmp280_common_probe()
2117 data->start_up_time = chip_info->start_up_time; in bmp280_common_probe()
2120 regulator_bulk_set_supply_names(data->supplies, in bmp280_common_probe()
2125 BMP280_NUM_SUPPLIES, data->supplies); in bmp280_common_probe()
2131 ret = regulator_bulk_enable(BMP280_NUM_SUPPLIES, data->supplies); in bmp280_common_probe()
2138 data->supplies); in bmp280_common_probe()
2143 usleep_range(data->start_up_time, data->start_up_time + 100); in bmp280_common_probe()
2153 data->regmap = regmap; in bmp280_common_probe()
2155 ret = regmap_read(regmap, data->chip_info->id_reg, &chip_id); in bmp280_common_probe()
2159 for (i = 0; i < data->chip_info->num_chip_id; i++) { in bmp280_common_probe()
2160 if (chip_id == data->chip_info->chip_id[i]) { in bmp280_common_probe()
2166 if (i == data->chip_info->num_chip_id) in bmp280_common_probe()
2169 if (data->chip_info->preinit) { in bmp280_common_probe()
2170 ret = data->chip_info->preinit(data); in bmp280_common_probe()
2172 return dev_err_probe(data->dev, ret, in bmp280_common_probe()
2176 ret = data->chip_info->chip_config(data); in bmp280_common_probe()
2188 if (data->chip_info->read_calib) { in bmp280_common_probe()
2189 ret = data->chip_info->read_calib(data); in bmp280_common_probe()
2191 return dev_err_probe(data->dev, ret, in bmp280_common_probe()
2201 ret = bmp085_fetch_eoc_irq(dev, name, irq, data); in bmp280_common_probe()
2214 pm_runtime_set_autosuspend_delay(dev, data->start_up_time / 10); in bmp280_common_probe()
2229 struct bmp280_data *data = iio_priv(indio_dev); in bmp280_runtime_suspend() local
2231 return regulator_bulk_disable(BMP280_NUM_SUPPLIES, data->supplies); in bmp280_runtime_suspend()
2237 struct bmp280_data *data = iio_priv(indio_dev); in bmp280_runtime_resume() local
2240 ret = regulator_bulk_enable(BMP280_NUM_SUPPLIES, data->supplies); in bmp280_runtime_resume()
2243 usleep_range(data->start_up_time, data->start_up_time + 100); in bmp280_runtime_resume()
2244 return data->chip_info->chip_config(data); in bmp280_runtime_resume()