Commit | Line | Data |
---|---|---|
14e8015f LW |
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 | /* Regmap configurations */ | |
100 | extern const struct regmap_config bmp180_regmap_config; | |
101 | extern const struct regmap_config bmp280_regmap_config; | |
102 | ||
103 | /* Probe called from different transports */ | |
104 | int bmp280_common_probe(struct device *dev, | |
105 | struct regmap *regmap, | |
106 | unsigned int chip, | |
aae95394 LW |
107 | const char *name, |
108 | int irq); | |
14e8015f | 109 | int bmp280_common_remove(struct device *dev); |
3d838118 LW |
110 | |
111 | /* PM ops */ | |
112 | extern const struct dev_pm_ops bmp280_dev_pm_ops; |