blob: 2c770e13be0e4ad0f4e884f5778d8b1e318b4a86 [file] [log] [blame]
Linus Walleij14e80152016-06-30 03:48:49 +02001#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/* Regmap configurations */
100extern const struct regmap_config bmp180_regmap_config;
101extern const struct regmap_config bmp280_regmap_config;
102
103/* Probe called from different transports */
104int bmp280_common_probe(struct device *dev,
105 struct regmap *regmap,
106 unsigned int chip,
Linus Walleijaae95392016-06-30 03:48:52 +0200107 const char *name,
108 int irq);
Linus Walleij14e80152016-06-30 03:48:49 +0200109int bmp280_common_remove(struct device *dev);
Linus Walleij3d838112016-06-30 03:48:53 +0200110
111/* PM ops */
112extern const struct dev_pm_ops bmp280_dev_pm_ops;