GNU Linux-libre 4.9.309-gnu1
[releases.git] / drivers / iio / pressure / bmp280-core.c
1 /*
2  * Copyright (c) 2010 Christoph Mair <christoph.mair@gmail.com>
3  * Copyright (c) 2012 Bosch Sensortec GmbH
4  * Copyright (c) 2012 Unixphere AB
5  * Copyright (c) 2014 Intel Corporation
6  * Copyright (c) 2016 Linus Walleij <linus.walleij@linaro.org>
7  *
8  * Driver for Bosch Sensortec BMP180 and BMP280 digital pressure sensor.
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2 as
12  * published by the Free Software Foundation.
13  *
14  * Datasheet:
15  * https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMP180-DS000-121.pdf
16  * https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMP280-DS001-12.pdf
17  * https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME280_DS001-11.pdf
18  */
19
20 #define pr_fmt(fmt) "bmp280: " fmt
21
22 #include <linux/device.h>
23 #include <linux/module.h>
24 #include <linux/regmap.h>
25 #include <linux/delay.h>
26 #include <linux/iio/iio.h>
27 #include <linux/iio/sysfs.h>
28 #include <linux/gpio/consumer.h>
29 #include <linux/regulator/consumer.h>
30 #include <linux/interrupt.h>
31 #include <linux/irq.h> /* For irq_get_irq_data() */
32 #include <linux/completion.h>
33 #include <linux/pm_runtime.h>
34 #include <linux/random.h>
35
36 #include "bmp280.h"
37
38 /*
39  * These enums are used for indexing into the array of calibration
40  * coefficients for BMP180.
41  */
42 enum { AC1, AC2, AC3, AC4, AC5, AC6, B1, B2, MB, MC, MD };
43
44 struct bmp180_calib {
45         s16 AC1;
46         s16 AC2;
47         s16 AC3;
48         u16 AC4;
49         u16 AC5;
50         u16 AC6;
51         s16 B1;
52         s16 B2;
53         s16 MB;
54         s16 MC;
55         s16 MD;
56 };
57
58 struct bmp280_data {
59         struct device *dev;
60         struct mutex lock;
61         struct regmap *regmap;
62         struct completion done;
63         bool use_eoc;
64         const struct bmp280_chip_info *chip_info;
65         struct bmp180_calib calib;
66         struct regulator *vddd;
67         struct regulator *vdda;
68         unsigned int start_up_time; /* in milliseconds */
69
70         /* log of base 2 of oversampling rate */
71         u8 oversampling_press;
72         u8 oversampling_temp;
73         u8 oversampling_humid;
74
75         /*
76          * Carryover value from temperature conversion, used in pressure
77          * calculation.
78          */
79         s32 t_fine;
80 };
81
82 struct bmp280_chip_info {
83         const int *oversampling_temp_avail;
84         int num_oversampling_temp_avail;
85
86         const int *oversampling_press_avail;
87         int num_oversampling_press_avail;
88
89         const int *oversampling_humid_avail;
90         int num_oversampling_humid_avail;
91
92         int (*chip_config)(struct bmp280_data *);
93         int (*read_temp)(struct bmp280_data *, int *);
94         int (*read_press)(struct bmp280_data *, int *, int *);
95         int (*read_humid)(struct bmp280_data *, int *, int *);
96 };
97
98 /*
99  * These enums are used for indexing into the array of compensation
100  * parameters for BMP280.
101  */
102 enum { T1, T2, T3 };
103 enum { P1, P2, P3, P4, P5, P6, P7, P8, P9 };
104
105 static const struct iio_chan_spec bmp280_channels[] = {
106         {
107                 .type = IIO_PRESSURE,
108                 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
109                                       BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
110         },
111         {
112                 .type = IIO_TEMP,
113                 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
114                                       BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
115         },
116         {
117                 .type = IIO_HUMIDITYRELATIVE,
118                 .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
119                                       BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO),
120         },
121 };
122
123 /*
124  * Returns humidity in percent, resolution is 0.01 percent. Output value of
125  * "47445" represents 47445/1024 = 46.333 %RH.
126  *
127  * Taken from BME280 datasheet, Section 4.2.3, "Compensation formula".
128  */
129
130 static u32 bmp280_compensate_humidity(struct bmp280_data *data,
131                                       s32 adc_humidity)
132 {
133         struct device *dev = data->dev;
134         unsigned int H1, H3, tmp;
135         int H2, H4, H5, H6, ret, var;
136
137         ret = regmap_read(data->regmap, BMP280_REG_COMP_H1, &H1);
138         if (ret < 0) {
139                 dev_err(dev, "failed to read H1 comp value\n");
140                 return ret;
141         }
142
143         ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_H2, &tmp, 2);
144         if (ret < 0) {
145                 dev_err(dev, "failed to read H2 comp value\n");
146                 return ret;
147         }
148         H2 = sign_extend32(le16_to_cpu(tmp), 15);
149
150         ret = regmap_read(data->regmap, BMP280_REG_COMP_H3, &H3);
151         if (ret < 0) {
152                 dev_err(dev, "failed to read H3 comp value\n");
153                 return ret;
154         }
155
156         ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_H4, &tmp, 2);
157         if (ret < 0) {
158                 dev_err(dev, "failed to read H4 comp value\n");
159                 return ret;
160         }
161         H4 = sign_extend32(((be16_to_cpu(tmp) >> 4) & 0xff0) |
162                           (be16_to_cpu(tmp) & 0xf), 11);
163
164         ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_H5, &tmp, 2);
165         if (ret < 0) {
166                 dev_err(dev, "failed to read H5 comp value\n");
167                 return ret;
168         }
169         H5 = sign_extend32(((le16_to_cpu(tmp) >> 4) & 0xfff), 11);
170
171         ret = regmap_read(data->regmap, BMP280_REG_COMP_H6, &tmp);
172         if (ret < 0) {
173                 dev_err(dev, "failed to read H6 comp value\n");
174                 return ret;
175         }
176         H6 = sign_extend32(tmp, 7);
177
178         var = ((s32)data->t_fine) - (s32)76800;
179         var = ((((adc_humidity << 14) - (H4 << 20) - (H5 * var))
180                 + (s32)16384) >> 15) * (((((((var * H6) >> 10)
181                 * (((var * (s32)H3) >> 11) + (s32)32768)) >> 10)
182                 + (s32)2097152) * H2 + 8192) >> 14);
183         var -= ((((var >> 15) * (var >> 15)) >> 7) * (s32)H1) >> 4;
184
185         var = clamp_val(var, 0, 419430400);
186
187         return var >> 12;
188 };
189
190 /*
191  * Returns temperature in DegC, resolution is 0.01 DegC.  Output value of
192  * "5123" equals 51.23 DegC.  t_fine carries fine temperature as global
193  * value.
194  *
195  * Taken from datasheet, Section 3.11.3, "Compensation formula".
196  */
197 static s32 bmp280_compensate_temp(struct bmp280_data *data,
198                                   s32 adc_temp)
199 {
200         int ret;
201         s32 var1, var2;
202         __le16 buf[BMP280_COMP_TEMP_REG_COUNT / 2];
203
204         ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_TEMP_START,
205                                buf, BMP280_COMP_TEMP_REG_COUNT);
206         if (ret < 0) {
207                 dev_err(data->dev,
208                         "failed to read temperature calibration parameters\n");
209                 return ret;
210         }
211
212         /*
213          * The double casts are necessary because le16_to_cpu returns an
214          * unsigned 16-bit value.  Casting that value directly to a
215          * signed 32-bit will not do proper sign extension.
216          *
217          * Conversely, T1 and P1 are unsigned values, so they can be
218          * cast straight to the larger type.
219          */
220         var1 = (((adc_temp >> 3) - ((s32)le16_to_cpu(buf[T1]) << 1)) *
221                 ((s32)(s16)le16_to_cpu(buf[T2]))) >> 11;
222         var2 = (((((adc_temp >> 4) - ((s32)le16_to_cpu(buf[T1]))) *
223                   ((adc_temp >> 4) - ((s32)le16_to_cpu(buf[T1])))) >> 12) *
224                 ((s32)(s16)le16_to_cpu(buf[T3]))) >> 14;
225         data->t_fine = var1 + var2;
226
227         return (data->t_fine * 5 + 128) >> 8;
228 }
229
230 /*
231  * Returns pressure in Pa as unsigned 32 bit integer in Q24.8 format (24
232  * integer bits and 8 fractional bits).  Output value of "24674867"
233  * represents 24674867/256 = 96386.2 Pa = 963.862 hPa
234  *
235  * Taken from datasheet, Section 3.11.3, "Compensation formula".
236  */
237 static u32 bmp280_compensate_press(struct bmp280_data *data,
238                                    s32 adc_press)
239 {
240         int ret;
241         s64 var1, var2, p;
242         __le16 buf[BMP280_COMP_PRESS_REG_COUNT / 2];
243
244         ret = regmap_bulk_read(data->regmap, BMP280_REG_COMP_PRESS_START,
245                                buf, BMP280_COMP_PRESS_REG_COUNT);
246         if (ret < 0) {
247                 dev_err(data->dev,
248                         "failed to read pressure calibration parameters\n");
249                 return ret;
250         }
251
252         var1 = ((s64)data->t_fine) - 128000;
253         var2 = var1 * var1 * (s64)(s16)le16_to_cpu(buf[P6]);
254         var2 += (var1 * (s64)(s16)le16_to_cpu(buf[P5])) << 17;
255         var2 += ((s64)(s16)le16_to_cpu(buf[P4])) << 35;
256         var1 = ((var1 * var1 * (s64)(s16)le16_to_cpu(buf[P3])) >> 8) +
257                 ((var1 * (s64)(s16)le16_to_cpu(buf[P2])) << 12);
258         var1 = ((((s64)1) << 47) + var1) * ((s64)le16_to_cpu(buf[P1])) >> 33;
259
260         if (var1 == 0)
261                 return 0;
262
263         p = ((((s64)1048576 - adc_press) << 31) - var2) * 3125;
264         p = div64_s64(p, var1);
265         var1 = (((s64)(s16)le16_to_cpu(buf[P9])) * (p >> 13) * (p >> 13)) >> 25;
266         var2 = (((s64)(s16)le16_to_cpu(buf[P8])) * p) >> 19;
267         p = ((p + var1 + var2) >> 8) + (((s64)(s16)le16_to_cpu(buf[P7])) << 4);
268
269         return (u32)p;
270 }
271
272 static int bmp280_read_temp(struct bmp280_data *data,
273                             int *val)
274 {
275         int ret;
276         __be32 tmp = 0;
277         s32 adc_temp, comp_temp;
278
279         ret = regmap_bulk_read(data->regmap, BMP280_REG_TEMP_MSB,
280                                (u8 *) &tmp, 3);
281         if (ret < 0) {
282                 dev_err(data->dev, "failed to read temperature\n");
283                 return ret;
284         }
285
286         adc_temp = be32_to_cpu(tmp) >> 12;
287         comp_temp = bmp280_compensate_temp(data, adc_temp);
288
289         /*
290          * val might be NULL if we're called by the read_press routine,
291          * who only cares about the carry over t_fine value.
292          */
293         if (val) {
294                 *val = comp_temp * 10;
295                 return IIO_VAL_INT;
296         }
297
298         return 0;
299 }
300
301 static int bmp280_read_press(struct bmp280_data *data,
302                              int *val, int *val2)
303 {
304         int ret;
305         __be32 tmp = 0;
306         s32 adc_press;
307         u32 comp_press;
308
309         /* Read and compensate temperature so we get a reading of t_fine. */
310         ret = bmp280_read_temp(data, NULL);
311         if (ret < 0)
312                 return ret;
313
314         ret = regmap_bulk_read(data->regmap, BMP280_REG_PRESS_MSB,
315                                (u8 *) &tmp, 3);
316         if (ret < 0) {
317                 dev_err(data->dev, "failed to read pressure\n");
318                 return ret;
319         }
320
321         adc_press = be32_to_cpu(tmp) >> 12;
322         comp_press = bmp280_compensate_press(data, adc_press);
323
324         *val = comp_press;
325         *val2 = 256000;
326
327         return IIO_VAL_FRACTIONAL;
328 }
329
330 static int bmp280_read_humid(struct bmp280_data *data, int *val, int *val2)
331 {
332         int ret;
333         __be16 tmp = 0;
334         s32 adc_humidity;
335         u32 comp_humidity;
336
337         /* Read and compensate temperature so we get a reading of t_fine. */
338         ret = bmp280_read_temp(data, NULL);
339         if (ret < 0)
340                 return ret;
341
342         ret = regmap_bulk_read(data->regmap, BMP280_REG_HUMIDITY_MSB,
343                                (u8 *) &tmp, 2);
344         if (ret < 0) {
345                 dev_err(data->dev, "failed to read humidity\n");
346                 return ret;
347         }
348
349         adc_humidity = be16_to_cpu(tmp);
350         comp_humidity = bmp280_compensate_humidity(data, adc_humidity);
351
352         *val = comp_humidity * 1000 / 1024;
353
354         return IIO_VAL_INT;
355 }
356
357 static int bmp280_read_raw(struct iio_dev *indio_dev,
358                            struct iio_chan_spec const *chan,
359                            int *val, int *val2, long mask)
360 {
361         int ret;
362         struct bmp280_data *data = iio_priv(indio_dev);
363
364         pm_runtime_get_sync(data->dev);
365         mutex_lock(&data->lock);
366
367         switch (mask) {
368         case IIO_CHAN_INFO_PROCESSED:
369                 switch (chan->type) {
370                 case IIO_HUMIDITYRELATIVE:
371                         ret = data->chip_info->read_humid(data, val, val2);
372                         break;
373                 case IIO_PRESSURE:
374                         ret = data->chip_info->read_press(data, val, val2);
375                         break;
376                 case IIO_TEMP:
377                         ret = data->chip_info->read_temp(data, val);
378                         break;
379                 default:
380                         ret = -EINVAL;
381                         break;
382                 }
383                 break;
384         case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
385                 switch (chan->type) {
386                 case IIO_HUMIDITYRELATIVE:
387                         *val = 1 << data->oversampling_humid;
388                         ret = IIO_VAL_INT;
389                         break;
390                 case IIO_PRESSURE:
391                         *val = 1 << data->oversampling_press;
392                         ret = IIO_VAL_INT;
393                         break;
394                 case IIO_TEMP:
395                         *val = 1 << data->oversampling_temp;
396                         ret = IIO_VAL_INT;
397                         break;
398                 default:
399                         ret = -EINVAL;
400                         break;
401                 }
402                 break;
403         default:
404                 ret = -EINVAL;
405                 break;
406         }
407
408         mutex_unlock(&data->lock);
409         pm_runtime_mark_last_busy(data->dev);
410         pm_runtime_put_autosuspend(data->dev);
411
412         return ret;
413 }
414
415 static int bmp280_write_oversampling_ratio_humid(struct bmp280_data *data,
416                                                int val)
417 {
418         int i;
419         const int *avail = data->chip_info->oversampling_humid_avail;
420         const int n = data->chip_info->num_oversampling_humid_avail;
421
422         for (i = 0; i < n; i++) {
423                 if (avail[i] == val) {
424                         data->oversampling_humid = ilog2(val);
425
426                         return data->chip_info->chip_config(data);
427                 }
428         }
429         return -EINVAL;
430 }
431
432 static int bmp280_write_oversampling_ratio_temp(struct bmp280_data *data,
433                                                int val)
434 {
435         int i;
436         const int *avail = data->chip_info->oversampling_temp_avail;
437         const int n = data->chip_info->num_oversampling_temp_avail;
438
439         for (i = 0; i < n; i++) {
440                 if (avail[i] == val) {
441                         data->oversampling_temp = ilog2(val);
442
443                         return data->chip_info->chip_config(data);
444                 }
445         }
446         return -EINVAL;
447 }
448
449 static int bmp280_write_oversampling_ratio_press(struct bmp280_data *data,
450                                                int val)
451 {
452         int i;
453         const int *avail = data->chip_info->oversampling_press_avail;
454         const int n = data->chip_info->num_oversampling_press_avail;
455
456         for (i = 0; i < n; i++) {
457                 if (avail[i] == val) {
458                         data->oversampling_press = ilog2(val);
459
460                         return data->chip_info->chip_config(data);
461                 }
462         }
463         return -EINVAL;
464 }
465
466 static int bmp280_write_raw(struct iio_dev *indio_dev,
467                             struct iio_chan_spec const *chan,
468                             int val, int val2, long mask)
469 {
470         int ret = 0;
471         struct bmp280_data *data = iio_priv(indio_dev);
472
473         switch (mask) {
474         case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
475                 pm_runtime_get_sync(data->dev);
476                 mutex_lock(&data->lock);
477                 switch (chan->type) {
478                 case IIO_HUMIDITYRELATIVE:
479                         ret = bmp280_write_oversampling_ratio_humid(data, val);
480                         break;
481                 case IIO_PRESSURE:
482                         ret = bmp280_write_oversampling_ratio_press(data, val);
483                         break;
484                 case IIO_TEMP:
485                         ret = bmp280_write_oversampling_ratio_temp(data, val);
486                         break;
487                 default:
488                         ret = -EINVAL;
489                         break;
490                 }
491                 mutex_unlock(&data->lock);
492                 pm_runtime_mark_last_busy(data->dev);
493                 pm_runtime_put_autosuspend(data->dev);
494                 break;
495         default:
496                 return -EINVAL;
497         }
498
499         return ret;
500 }
501
502 static ssize_t bmp280_show_avail(char *buf, const int *vals, const int n)
503 {
504         size_t len = 0;
505         int i;
506
507         for (i = 0; i < n; i++)
508                 len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", vals[i]);
509
510         buf[len - 1] = '\n';
511
512         return len;
513 }
514
515 static ssize_t bmp280_show_temp_oversampling_avail(struct device *dev,
516                                 struct device_attribute *attr, char *buf)
517 {
518         struct bmp280_data *data = iio_priv(dev_to_iio_dev(dev));
519
520         return bmp280_show_avail(buf, data->chip_info->oversampling_temp_avail,
521                                  data->chip_info->num_oversampling_temp_avail);
522 }
523
524 static ssize_t bmp280_show_press_oversampling_avail(struct device *dev,
525                                 struct device_attribute *attr, char *buf)
526 {
527         struct bmp280_data *data = iio_priv(dev_to_iio_dev(dev));
528
529         return bmp280_show_avail(buf, data->chip_info->oversampling_press_avail,
530                                  data->chip_info->num_oversampling_press_avail);
531 }
532
533 static IIO_DEVICE_ATTR(in_temp_oversampling_ratio_available,
534         S_IRUGO, bmp280_show_temp_oversampling_avail, NULL, 0);
535
536 static IIO_DEVICE_ATTR(in_pressure_oversampling_ratio_available,
537         S_IRUGO, bmp280_show_press_oversampling_avail, NULL, 0);
538
539 static struct attribute *bmp280_attributes[] = {
540         &iio_dev_attr_in_temp_oversampling_ratio_available.dev_attr.attr,
541         &iio_dev_attr_in_pressure_oversampling_ratio_available.dev_attr.attr,
542         NULL,
543 };
544
545 static const struct attribute_group bmp280_attrs_group = {
546         .attrs = bmp280_attributes,
547 };
548
549 static const struct iio_info bmp280_info = {
550         .driver_module = THIS_MODULE,
551         .read_raw = &bmp280_read_raw,
552         .write_raw = &bmp280_write_raw,
553         .attrs = &bmp280_attrs_group,
554 };
555
556 static int bmp280_chip_config(struct bmp280_data *data)
557 {
558         int ret;
559         u8 osrs = BMP280_OSRS_TEMP_X(data->oversampling_temp + 1) |
560                   BMP280_OSRS_PRESS_X(data->oversampling_press + 1);
561
562         ret = regmap_write_bits(data->regmap, BMP280_REG_CTRL_MEAS,
563                                  BMP280_OSRS_TEMP_MASK |
564                                  BMP280_OSRS_PRESS_MASK |
565                                  BMP280_MODE_MASK,
566                                  osrs | BMP280_MODE_NORMAL);
567         if (ret < 0) {
568                 dev_err(data->dev,
569                         "failed to write ctrl_meas register\n");
570                 return ret;
571         }
572
573         ret = regmap_update_bits(data->regmap, BMP280_REG_CONFIG,
574                                  BMP280_FILTER_MASK,
575                                  BMP280_FILTER_4X);
576         if (ret < 0) {
577                 dev_err(data->dev,
578                         "failed to write config register\n");
579                 return ret;
580         }
581
582         return ret;
583 }
584
585 static const int bmp280_oversampling_avail[] = { 1, 2, 4, 8, 16 };
586
587 static const struct bmp280_chip_info bmp280_chip_info = {
588         .oversampling_temp_avail = bmp280_oversampling_avail,
589         .num_oversampling_temp_avail = ARRAY_SIZE(bmp280_oversampling_avail),
590
591         .oversampling_press_avail = bmp280_oversampling_avail,
592         .num_oversampling_press_avail = ARRAY_SIZE(bmp280_oversampling_avail),
593
594         .chip_config = bmp280_chip_config,
595         .read_temp = bmp280_read_temp,
596         .read_press = bmp280_read_press,
597 };
598
599 static int bme280_chip_config(struct bmp280_data *data)
600 {
601         int ret = bmp280_chip_config(data);
602         u8 osrs = BMP280_OSRS_HUMIDITIY_X(data->oversampling_humid + 1);
603
604         if (ret < 0)
605                 return ret;
606
607         return regmap_update_bits(data->regmap, BMP280_REG_CTRL_HUMIDITY,
608                                   BMP280_OSRS_HUMIDITY_MASK, osrs);
609 }
610
611 static const struct bmp280_chip_info bme280_chip_info = {
612         .oversampling_temp_avail = bmp280_oversampling_avail,
613         .num_oversampling_temp_avail = ARRAY_SIZE(bmp280_oversampling_avail),
614
615         .oversampling_press_avail = bmp280_oversampling_avail,
616         .num_oversampling_press_avail = ARRAY_SIZE(bmp280_oversampling_avail),
617
618         .oversampling_humid_avail = bmp280_oversampling_avail,
619         .num_oversampling_humid_avail = ARRAY_SIZE(bmp280_oversampling_avail),
620
621         .chip_config = bme280_chip_config,
622         .read_temp = bmp280_read_temp,
623         .read_press = bmp280_read_press,
624         .read_humid = bmp280_read_humid,
625 };
626
627 static int bmp180_measure(struct bmp280_data *data, u8 ctrl_meas)
628 {
629         int ret;
630         const int conversion_time_max[] = { 4500, 7500, 13500, 25500 };
631         unsigned int delay_us;
632         unsigned int ctrl;
633
634         if (data->use_eoc)
635                 reinit_completion(&data->done);
636
637         ret = regmap_write(data->regmap, BMP280_REG_CTRL_MEAS, ctrl_meas);
638         if (ret)
639                 return ret;
640
641         if (data->use_eoc) {
642                 /*
643                  * If we have a completion interrupt, use it, wait up to
644                  * 100ms. The longest conversion time listed is 76.5 ms for
645                  * advanced resolution mode.
646                  */
647                 ret = wait_for_completion_timeout(&data->done,
648                                                   1 + msecs_to_jiffies(100));
649                 if (!ret)
650                         dev_err(data->dev, "timeout waiting for completion\n");
651         } else {
652                 if (ctrl_meas == BMP180_MEAS_TEMP)
653                         delay_us = 4500;
654                 else
655                         delay_us =
656                                 conversion_time_max[data->oversampling_press];
657
658                 usleep_range(delay_us, delay_us + 1000);
659         }
660
661         ret = regmap_read(data->regmap, BMP280_REG_CTRL_MEAS, &ctrl);
662         if (ret)
663                 return ret;
664
665         /* The value of this bit reset to "0" after conversion is complete */
666         if (ctrl & BMP180_MEAS_SCO)
667                 return -EIO;
668
669         return 0;
670 }
671
672 static int bmp180_read_adc_temp(struct bmp280_data *data, int *val)
673 {
674         int ret;
675         __be16 tmp = 0;
676
677         ret = bmp180_measure(data, BMP180_MEAS_TEMP);
678         if (ret)
679                 return ret;
680
681         ret = regmap_bulk_read(data->regmap, BMP180_REG_OUT_MSB, (u8 *)&tmp, 2);
682         if (ret)
683                 return ret;
684
685         *val = be16_to_cpu(tmp);
686
687         return 0;
688 }
689
690 static int bmp180_read_calib(struct bmp280_data *data,
691                              struct bmp180_calib *calib)
692 {
693         int ret;
694         int i;
695         __be16 buf[BMP180_REG_CALIB_COUNT / 2];
696
697         ret = regmap_bulk_read(data->regmap, BMP180_REG_CALIB_START, buf,
698                                sizeof(buf));
699
700         if (ret < 0)
701                 return ret;
702
703         /* None of the words has the value 0 or 0xFFFF */
704         for (i = 0; i < ARRAY_SIZE(buf); i++) {
705                 if (buf[i] == cpu_to_be16(0) || buf[i] == cpu_to_be16(0xffff))
706                         return -EIO;
707         }
708
709         /* Toss the calibration data into the entropy pool */
710         add_device_randomness(buf, sizeof(buf));
711
712         calib->AC1 = be16_to_cpu(buf[AC1]);
713         calib->AC2 = be16_to_cpu(buf[AC2]);
714         calib->AC3 = be16_to_cpu(buf[AC3]);
715         calib->AC4 = be16_to_cpu(buf[AC4]);
716         calib->AC5 = be16_to_cpu(buf[AC5]);
717         calib->AC6 = be16_to_cpu(buf[AC6]);
718         calib->B1 = be16_to_cpu(buf[B1]);
719         calib->B2 = be16_to_cpu(buf[B2]);
720         calib->MB = be16_to_cpu(buf[MB]);
721         calib->MC = be16_to_cpu(buf[MC]);
722         calib->MD = be16_to_cpu(buf[MD]);
723
724         return 0;
725 }
726
727 /*
728  * Returns temperature in DegC, resolution is 0.1 DegC.
729  * t_fine carries fine temperature as global value.
730  *
731  * Taken from datasheet, Section 3.5, "Calculating pressure and temperature".
732  */
733 static s32 bmp180_compensate_temp(struct bmp280_data *data, s32 adc_temp)
734 {
735         s32 x1, x2;
736         struct bmp180_calib *calib = &data->calib;
737
738         x1 = ((adc_temp - calib->AC6) * calib->AC5) >> 15;
739         x2 = (calib->MC << 11) / (x1 + calib->MD);
740         data->t_fine = x1 + x2;
741
742         return (data->t_fine + 8) >> 4;
743 }
744
745 static int bmp180_read_temp(struct bmp280_data *data, int *val)
746 {
747         int ret;
748         s32 adc_temp, comp_temp;
749
750         ret = bmp180_read_adc_temp(data, &adc_temp);
751         if (ret)
752                 return ret;
753
754         comp_temp = bmp180_compensate_temp(data, adc_temp);
755
756         /*
757          * val might be NULL if we're called by the read_press routine,
758          * who only cares about the carry over t_fine value.
759          */
760         if (val) {
761                 *val = comp_temp * 100;
762                 return IIO_VAL_INT;
763         }
764
765         return 0;
766 }
767
768 static int bmp180_read_adc_press(struct bmp280_data *data, int *val)
769 {
770         int ret;
771         __be32 tmp = 0;
772         u8 oss = data->oversampling_press;
773
774         ret = bmp180_measure(data, BMP180_MEAS_PRESS_X(oss));
775         if (ret)
776                 return ret;
777
778         ret = regmap_bulk_read(data->regmap, BMP180_REG_OUT_MSB, (u8 *)&tmp, 3);
779         if (ret)
780                 return ret;
781
782         *val = (be32_to_cpu(tmp) >> 8) >> (8 - oss);
783
784         return 0;
785 }
786
787 /*
788  * Returns pressure in Pa, resolution is 1 Pa.
789  *
790  * Taken from datasheet, Section 3.5, "Calculating pressure and temperature".
791  */
792 static u32 bmp180_compensate_press(struct bmp280_data *data, s32 adc_press)
793 {
794         s32 x1, x2, x3, p;
795         s32 b3, b6;
796         u32 b4, b7;
797         s32 oss = data->oversampling_press;
798         struct bmp180_calib *calib = &data->calib;
799
800         b6 = data->t_fine - 4000;
801         x1 = (calib->B2 * (b6 * b6 >> 12)) >> 11;
802         x2 = calib->AC2 * b6 >> 11;
803         x3 = x1 + x2;
804         b3 = ((((s32)calib->AC1 * 4 + x3) << oss) + 2) / 4;
805         x1 = calib->AC3 * b6 >> 13;
806         x2 = (calib->B1 * ((b6 * b6) >> 12)) >> 16;
807         x3 = (x1 + x2 + 2) >> 2;
808         b4 = calib->AC4 * (u32)(x3 + 32768) >> 15;
809         b7 = ((u32)adc_press - b3) * (50000 >> oss);
810         if (b7 < 0x80000000)
811                 p = (b7 * 2) / b4;
812         else
813                 p = (b7 / b4) * 2;
814
815         x1 = (p >> 8) * (p >> 8);
816         x1 = (x1 * 3038) >> 16;
817         x2 = (-7357 * p) >> 16;
818
819         return p + ((x1 + x2 + 3791) >> 4);
820 }
821
822 static int bmp180_read_press(struct bmp280_data *data,
823                              int *val, int *val2)
824 {
825         int ret;
826         s32 adc_press;
827         u32 comp_press;
828
829         /* Read and compensate temperature so we get a reading of t_fine. */
830         ret = bmp180_read_temp(data, NULL);
831         if (ret)
832                 return ret;
833
834         ret = bmp180_read_adc_press(data, &adc_press);
835         if (ret)
836                 return ret;
837
838         comp_press = bmp180_compensate_press(data, adc_press);
839
840         *val = comp_press;
841         *val2 = 1000;
842
843         return IIO_VAL_FRACTIONAL;
844 }
845
846 static int bmp180_chip_config(struct bmp280_data *data)
847 {
848         return 0;
849 }
850
851 static const int bmp180_oversampling_temp_avail[] = { 1 };
852 static const int bmp180_oversampling_press_avail[] = { 1, 2, 4, 8 };
853
854 static const struct bmp280_chip_info bmp180_chip_info = {
855         .oversampling_temp_avail = bmp180_oversampling_temp_avail,
856         .num_oversampling_temp_avail =
857                 ARRAY_SIZE(bmp180_oversampling_temp_avail),
858
859         .oversampling_press_avail = bmp180_oversampling_press_avail,
860         .num_oversampling_press_avail =
861                 ARRAY_SIZE(bmp180_oversampling_press_avail),
862
863         .chip_config = bmp180_chip_config,
864         .read_temp = bmp180_read_temp,
865         .read_press = bmp180_read_press,
866 };
867
868 static irqreturn_t bmp085_eoc_irq(int irq, void *d)
869 {
870         struct bmp280_data *data = d;
871
872         complete(&data->done);
873
874         return IRQ_HANDLED;
875 }
876
877 static int bmp085_fetch_eoc_irq(struct device *dev,
878                                 const char *name,
879                                 int irq,
880                                 struct bmp280_data *data)
881 {
882         unsigned long irq_trig;
883         int ret;
884
885         irq_trig = irqd_get_trigger_type(irq_get_irq_data(irq));
886         if (irq_trig != IRQF_TRIGGER_RISING) {
887                 dev_err(dev, "non-rising trigger given for EOC interrupt, "
888                         "trying to enforce it\n");
889                 irq_trig = IRQF_TRIGGER_RISING;
890         }
891
892         init_completion(&data->done);
893
894         ret = devm_request_threaded_irq(dev,
895                         irq,
896                         bmp085_eoc_irq,
897                         NULL,
898                         irq_trig,
899                         name,
900                         data);
901         if (ret) {
902                 /* Bail out without IRQ but keep the driver in place */
903                 dev_err(dev, "unable to request DRDY IRQ\n");
904                 return 0;
905         }
906
907         data->use_eoc = true;
908         return 0;
909 }
910
911 int bmp280_common_probe(struct device *dev,
912                         struct regmap *regmap,
913                         unsigned int chip,
914                         const char *name,
915                         int irq)
916 {
917         int ret;
918         struct iio_dev *indio_dev;
919         struct bmp280_data *data;
920         unsigned int chip_id;
921         struct gpio_desc *gpiod;
922
923         indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
924         if (!indio_dev)
925                 return -ENOMEM;
926
927         data = iio_priv(indio_dev);
928         mutex_init(&data->lock);
929         data->dev = dev;
930
931         indio_dev->dev.parent = dev;
932         indio_dev->name = name;
933         indio_dev->channels = bmp280_channels;
934         indio_dev->info = &bmp280_info;
935         indio_dev->modes = INDIO_DIRECT_MODE;
936
937         switch (chip) {
938         case BMP180_CHIP_ID:
939                 indio_dev->num_channels = 2;
940                 data->chip_info = &bmp180_chip_info;
941                 data->oversampling_press = ilog2(8);
942                 data->oversampling_temp = ilog2(1);
943                 data->start_up_time = 10;
944                 break;
945         case BMP280_CHIP_ID:
946                 indio_dev->num_channels = 2;
947                 data->chip_info = &bmp280_chip_info;
948                 data->oversampling_press = ilog2(16);
949                 data->oversampling_temp = ilog2(2);
950                 data->start_up_time = 2;
951                 break;
952         case BME280_CHIP_ID:
953                 indio_dev->num_channels = 3;
954                 data->chip_info = &bme280_chip_info;
955                 data->oversampling_press = ilog2(16);
956                 data->oversampling_humid = ilog2(16);
957                 data->oversampling_temp = ilog2(2);
958                 data->start_up_time = 2;
959                 break;
960         default:
961                 return -EINVAL;
962         }
963
964         /* Bring up regulators */
965         data->vddd = devm_regulator_get(dev, "vddd");
966         if (IS_ERR(data->vddd)) {
967                 dev_err(dev, "failed to get VDDD regulator\n");
968                 return PTR_ERR(data->vddd);
969         }
970         ret = regulator_enable(data->vddd);
971         if (ret) {
972                 dev_err(dev, "failed to enable VDDD regulator\n");
973                 return ret;
974         }
975         data->vdda = devm_regulator_get(dev, "vdda");
976         if (IS_ERR(data->vdda)) {
977                 dev_err(dev, "failed to get VDDA regulator\n");
978                 ret = PTR_ERR(data->vdda);
979                 goto out_disable_vddd;
980         }
981         ret = regulator_enable(data->vdda);
982         if (ret) {
983                 dev_err(dev, "failed to enable VDDA regulator\n");
984                 goto out_disable_vddd;
985         }
986         /* Wait to make sure we started up properly */
987         mdelay(data->start_up_time);
988
989         /* Bring chip out of reset if there is an assigned GPIO line */
990         gpiod = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
991         /* Deassert the signal */
992         if (!IS_ERR(gpiod)) {
993                 dev_info(dev, "release reset\n");
994                 gpiod_set_value(gpiod, 0);
995         }
996
997         data->regmap = regmap;
998         ret = regmap_read(regmap, BMP280_REG_ID, &chip_id);
999         if (ret < 0)
1000                 goto out_disable_vdda;
1001         if (chip_id != chip) {
1002                 dev_err(dev, "bad chip id: expected %x got %x\n",
1003                         chip, chip_id);
1004                 ret = -EINVAL;
1005                 goto out_disable_vdda;
1006         }
1007
1008         ret = data->chip_info->chip_config(data);
1009         if (ret < 0)
1010                 goto out_disable_vdda;
1011
1012         dev_set_drvdata(dev, indio_dev);
1013
1014         /*
1015          * The BMP085 and BMP180 has calibration in an E2PROM, read it out
1016          * at probe time. It will not change.
1017          */
1018         if (chip_id  == BMP180_CHIP_ID) {
1019                 ret = bmp180_read_calib(data, &data->calib);
1020                 if (ret < 0) {
1021                         dev_err(data->dev,
1022                                 "failed to read calibration coefficients\n");
1023                         goto out_disable_vdda;
1024                 }
1025         }
1026
1027         /*
1028          * Attempt to grab an optional EOC IRQ - only the BMP085 has this
1029          * however as it happens, the BMP085 shares the chip ID of BMP180
1030          * so we look for an IRQ if we have that.
1031          */
1032         if (irq > 0 || (chip_id  == BMP180_CHIP_ID)) {
1033                 ret = bmp085_fetch_eoc_irq(dev, name, irq, data);
1034                 if (ret)
1035                         goto out_disable_vdda;
1036         }
1037
1038         /* Enable runtime PM */
1039         pm_runtime_get_noresume(dev);
1040         pm_runtime_set_active(dev);
1041         pm_runtime_enable(dev);
1042         /*
1043          * Set autosuspend to two orders of magnitude larger than the
1044          * start-up time.
1045          */
1046         pm_runtime_set_autosuspend_delay(dev, data->start_up_time *100);
1047         pm_runtime_use_autosuspend(dev);
1048         pm_runtime_put(dev);
1049
1050         ret = iio_device_register(indio_dev);
1051         if (ret)
1052                 goto out_runtime_pm_disable;
1053
1054
1055         return 0;
1056
1057 out_runtime_pm_disable:
1058         pm_runtime_get_sync(data->dev);
1059         pm_runtime_put_noidle(data->dev);
1060         pm_runtime_disable(data->dev);
1061 out_disable_vdda:
1062         regulator_disable(data->vdda);
1063 out_disable_vddd:
1064         regulator_disable(data->vddd);
1065         return ret;
1066 }
1067 EXPORT_SYMBOL(bmp280_common_probe);
1068
1069 int bmp280_common_remove(struct device *dev)
1070 {
1071         struct iio_dev *indio_dev = dev_get_drvdata(dev);
1072         struct bmp280_data *data = iio_priv(indio_dev);
1073
1074         iio_device_unregister(indio_dev);
1075         pm_runtime_get_sync(data->dev);
1076         pm_runtime_put_noidle(data->dev);
1077         pm_runtime_disable(data->dev);
1078         regulator_disable(data->vdda);
1079         regulator_disable(data->vddd);
1080         return 0;
1081 }
1082 EXPORT_SYMBOL(bmp280_common_remove);
1083
1084 #ifdef CONFIG_PM
1085 static int bmp280_runtime_suspend(struct device *dev)
1086 {
1087         struct iio_dev *indio_dev = dev_get_drvdata(dev);
1088         struct bmp280_data *data = iio_priv(indio_dev);
1089         int ret;
1090
1091         ret = regulator_disable(data->vdda);
1092         if (ret)
1093                 return ret;
1094         return regulator_disable(data->vddd);
1095 }
1096
1097 static int bmp280_runtime_resume(struct device *dev)
1098 {
1099         struct iio_dev *indio_dev = dev_get_drvdata(dev);
1100         struct bmp280_data *data = iio_priv(indio_dev);
1101         int ret;
1102
1103         ret = regulator_enable(data->vddd);
1104         if (ret)
1105                 return ret;
1106         ret = regulator_enable(data->vdda);
1107         if (ret)
1108                 return ret;
1109         msleep(data->start_up_time);
1110         return data->chip_info->chip_config(data);
1111 }
1112 #endif /* CONFIG_PM */
1113
1114 const struct dev_pm_ops bmp280_dev_pm_ops = {
1115         SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
1116                                 pm_runtime_force_resume)
1117         SET_RUNTIME_PM_OPS(bmp280_runtime_suspend,
1118                            bmp280_runtime_resume, NULL)
1119 };
1120 EXPORT_SYMBOL(bmp280_dev_pm_ops);
1121
1122 MODULE_AUTHOR("Vlad Dogaru <vlad.dogaru@intel.com>");
1123 MODULE_DESCRIPTION("Driver for Bosch Sensortec BMP180/BMP280 pressure and temperature sensor");
1124 MODULE_LICENSE("GPL v2");