Merge remote-tracking branches 'spi/topic/imx', 'spi/topic/loopback', 'spi/topic...
[sfrench/cifs-2.6.git] / drivers / iio / pressure / bmp280.h
1 #include <linux/bitops.h>
2 #include <linux/device.h>
3 #include <linux/regmap.h>
4
5 /* BMP280 specific registers */
6 #define BMP280_REG_HUMIDITY_LSB         0xFE
7 #define BMP280_REG_HUMIDITY_MSB         0xFD
8 #define BMP280_REG_TEMP_XLSB            0xFC
9 #define BMP280_REG_TEMP_LSB             0xFB
10 #define BMP280_REG_TEMP_MSB             0xFA
11 #define BMP280_REG_PRESS_XLSB           0xF9
12 #define BMP280_REG_PRESS_LSB            0xF8
13 #define BMP280_REG_PRESS_MSB            0xF7
14
15 #define BMP280_REG_CONFIG               0xF5
16 #define BMP280_REG_CTRL_MEAS            0xF4
17 #define BMP280_REG_STATUS               0xF3
18 #define BMP280_REG_CTRL_HUMIDITY        0xF2
19
20 /* Due to non linear mapping, and data sizes we can't do a bulk read */
21 #define BMP280_REG_COMP_H1              0xA1
22 #define BMP280_REG_COMP_H2              0xE1
23 #define BMP280_REG_COMP_H3              0xE3
24 #define BMP280_REG_COMP_H4              0xE4
25 #define BMP280_REG_COMP_H5              0xE5
26 #define BMP280_REG_COMP_H6              0xE7
27
28 #define BMP280_REG_COMP_TEMP_START      0x88
29 #define BMP280_COMP_TEMP_REG_COUNT      6
30
31 #define BMP280_REG_COMP_PRESS_START     0x8E
32 #define BMP280_COMP_PRESS_REG_COUNT     18
33
34 #define BMP280_FILTER_MASK              (BIT(4) | BIT(3) | BIT(2))
35 #define BMP280_FILTER_OFF               0
36 #define BMP280_FILTER_2X                BIT(2)
37 #define BMP280_FILTER_4X                BIT(3)
38 #define BMP280_FILTER_8X                (BIT(3) | BIT(2))
39 #define BMP280_FILTER_16X               BIT(4)
40
41 #define BMP280_OSRS_HUMIDITY_MASK       (BIT(2) | BIT(1) | BIT(0))
42 #define BMP280_OSRS_HUMIDITIY_X(osrs_h) ((osrs_h) << 0)
43 #define BMP280_OSRS_HUMIDITY_SKIP       0
44 #define BMP280_OSRS_HUMIDITY_1X         BMP280_OSRS_HUMIDITIY_X(1)
45 #define BMP280_OSRS_HUMIDITY_2X         BMP280_OSRS_HUMIDITIY_X(2)
46 #define BMP280_OSRS_HUMIDITY_4X         BMP280_OSRS_HUMIDITIY_X(3)
47 #define BMP280_OSRS_HUMIDITY_8X         BMP280_OSRS_HUMIDITIY_X(4)
48 #define BMP280_OSRS_HUMIDITY_16X        BMP280_OSRS_HUMIDITIY_X(5)
49
50 #define BMP280_OSRS_TEMP_MASK           (BIT(7) | BIT(6) | BIT(5))
51 #define BMP280_OSRS_TEMP_SKIP           0
52 #define BMP280_OSRS_TEMP_X(osrs_t)      ((osrs_t) << 5)
53 #define BMP280_OSRS_TEMP_1X             BMP280_OSRS_TEMP_X(1)
54 #define BMP280_OSRS_TEMP_2X             BMP280_OSRS_TEMP_X(2)
55 #define BMP280_OSRS_TEMP_4X             BMP280_OSRS_TEMP_X(3)
56 #define BMP280_OSRS_TEMP_8X             BMP280_OSRS_TEMP_X(4)
57 #define BMP280_OSRS_TEMP_16X            BMP280_OSRS_TEMP_X(5)
58
59 #define BMP280_OSRS_PRESS_MASK          (BIT(4) | BIT(3) | BIT(2))
60 #define BMP280_OSRS_PRESS_SKIP          0
61 #define BMP280_OSRS_PRESS_X(osrs_p)     ((osrs_p) << 2)
62 #define BMP280_OSRS_PRESS_1X            BMP280_OSRS_PRESS_X(1)
63 #define BMP280_OSRS_PRESS_2X            BMP280_OSRS_PRESS_X(2)
64 #define BMP280_OSRS_PRESS_4X            BMP280_OSRS_PRESS_X(3)
65 #define BMP280_OSRS_PRESS_8X            BMP280_OSRS_PRESS_X(4)
66 #define BMP280_OSRS_PRESS_16X           BMP280_OSRS_PRESS_X(5)
67
68 #define BMP280_MODE_MASK                (BIT(1) | BIT(0))
69 #define BMP280_MODE_SLEEP               0
70 #define BMP280_MODE_FORCED              BIT(0)
71 #define BMP280_MODE_NORMAL              (BIT(1) | BIT(0))
72
73 /* BMP180 specific registers */
74 #define BMP180_REG_OUT_XLSB             0xF8
75 #define BMP180_REG_OUT_LSB              0xF7
76 #define BMP180_REG_OUT_MSB              0xF6
77
78 #define BMP180_REG_CALIB_START          0xAA
79 #define BMP180_REG_CALIB_COUNT          22
80
81 #define BMP180_MEAS_SCO                 BIT(5)
82 #define BMP180_MEAS_TEMP                (0x0E | BMP180_MEAS_SCO)
83 #define BMP180_MEAS_PRESS_X(oss)        ((oss) << 6 | 0x14 | BMP180_MEAS_SCO)
84 #define BMP180_MEAS_PRESS_1X            BMP180_MEAS_PRESS_X(0)
85 #define BMP180_MEAS_PRESS_2X            BMP180_MEAS_PRESS_X(1)
86 #define BMP180_MEAS_PRESS_4X            BMP180_MEAS_PRESS_X(2)
87 #define BMP180_MEAS_PRESS_8X            BMP180_MEAS_PRESS_X(3)
88
89 /* BMP180 and BMP280 common registers */
90 #define BMP280_REG_CTRL_MEAS            0xF4
91 #define BMP280_REG_RESET                0xE0
92 #define BMP280_REG_ID                   0xD0
93
94 #define BMP180_CHIP_ID                  0x55
95 #define BMP280_CHIP_ID                  0x58
96 #define BME280_CHIP_ID                  0x60
97 #define BMP280_SOFT_RESET_VAL           0xB6
98
99 /* BMP280 register skipped special values */
100 #define BMP280_TEMP_SKIPPED             0x80000
101 #define BMP280_PRESS_SKIPPED            0x80000
102 #define BMP280_HUMIDITY_SKIPPED         0x8000
103
104 /* Regmap configurations */
105 extern const struct regmap_config bmp180_regmap_config;
106 extern const struct regmap_config bmp280_regmap_config;
107
108 /* Probe called from different transports */
109 int bmp280_common_probe(struct device *dev,
110                         struct regmap *regmap,
111                         unsigned int chip,
112                         const char *name,
113                         int irq);
114 int bmp280_common_remove(struct device *dev);
115
116 /* PM ops */
117 extern const struct dev_pm_ops bmp280_dev_pm_ops;