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