1// SPDX-License-Identifier: GPL-2.0
2#include <linux/device.h>
3#include <linux/module.h>
4#include <linux/regmap.h>
5
6#include "bmp280.h"
7
8static bool bmp180_is_writeable_reg(struct device *dev, unsigned int reg)
9{
10	switch (reg) {
11	case BMP280_REG_CTRL_MEAS:
12	case BMP280_REG_RESET:
13		return true;
14	default:
15		return false;
16	}
17}
18
19static bool bmp180_is_volatile_reg(struct device *dev, unsigned int reg)
20{
21	switch (reg) {
22	case BMP180_REG_OUT_XLSB:
23	case BMP180_REG_OUT_LSB:
24	case BMP180_REG_OUT_MSB:
25	case BMP280_REG_CTRL_MEAS:
26		return true;
27	default:
28		return false;
29	}
30}
31
32const struct regmap_config bmp180_regmap_config = {
33	.reg_bits = 8,
34	.val_bits = 8,
35
36	.max_register = BMP180_REG_OUT_XLSB,
37	.cache_type = REGCACHE_RBTREE,
38
39	.writeable_reg = bmp180_is_writeable_reg,
40	.volatile_reg = bmp180_is_volatile_reg,
41};
42EXPORT_SYMBOL_NS(bmp180_regmap_config, IIO_BMP280);
43
44static bool bmp280_is_writeable_reg(struct device *dev, unsigned int reg)
45{
46	switch (reg) {
47	case BMP280_REG_CONFIG:
48	case BMP280_REG_CTRL_HUMIDITY:
49	case BMP280_REG_CTRL_MEAS:
50	case BMP280_REG_RESET:
51		return true;
52	default:
53		return false;
54	}
55}
56
57static bool bmp280_is_volatile_reg(struct device *dev, unsigned int reg)
58{
59	switch (reg) {
60	case BMP280_REG_HUMIDITY_LSB:
61	case BMP280_REG_HUMIDITY_MSB:
62	case BMP280_REG_TEMP_XLSB:
63	case BMP280_REG_TEMP_LSB:
64	case BMP280_REG_TEMP_MSB:
65	case BMP280_REG_PRESS_XLSB:
66	case BMP280_REG_PRESS_LSB:
67	case BMP280_REG_PRESS_MSB:
68	case BMP280_REG_STATUS:
69		return true;
70	default:
71		return false;
72	}
73}
74
75static bool bmp380_is_writeable_reg(struct device *dev, unsigned int reg)
76{
77	switch (reg) {
78	case BMP380_REG_CMD:
79	case BMP380_REG_CONFIG:
80	case BMP380_REG_FIFO_CONFIG_1:
81	case BMP380_REG_FIFO_CONFIG_2:
82	case BMP380_REG_FIFO_WATERMARK_LSB:
83	case BMP380_REG_FIFO_WATERMARK_MSB:
84	case BMP380_REG_POWER_CONTROL:
85	case BMP380_REG_INT_CONTROL:
86	case BMP380_REG_IF_CONFIG:
87	case BMP380_REG_ODR:
88	case BMP380_REG_OSR:
89		return true;
90	default:
91		return false;
92	}
93}
94
95static bool bmp380_is_volatile_reg(struct device *dev, unsigned int reg)
96{
97	switch (reg) {
98	case BMP380_REG_TEMP_XLSB:
99	case BMP380_REG_TEMP_LSB:
100	case BMP380_REG_TEMP_MSB:
101	case BMP380_REG_PRESS_XLSB:
102	case BMP380_REG_PRESS_LSB:
103	case BMP380_REG_PRESS_MSB:
104	case BMP380_REG_SENSOR_TIME_XLSB:
105	case BMP380_REG_SENSOR_TIME_LSB:
106	case BMP380_REG_SENSOR_TIME_MSB:
107	case BMP380_REG_INT_STATUS:
108	case BMP380_REG_FIFO_DATA:
109	case BMP380_REG_STATUS:
110	case BMP380_REG_ERROR:
111	case BMP380_REG_EVENT:
112		return true;
113	default:
114		return false;
115	}
116}
117
118static bool bmp580_is_writeable_reg(struct device *dev, unsigned int reg)
119{
120	switch (reg) {
121	case BMP580_REG_NVM_DATA_MSB:
122	case BMP580_REG_NVM_DATA_LSB:
123	case BMP580_REG_NVM_ADDR:
124	case BMP580_REG_ODR_CONFIG:
125	case BMP580_REG_OSR_CONFIG:
126	case BMP580_REG_INT_SOURCE:
127	case BMP580_REG_INT_CONFIG:
128	case BMP580_REG_OOR_THR_MSB:
129	case BMP580_REG_OOR_THR_LSB:
130	case BMP580_REG_OOR_CONFIG:
131	case BMP580_REG_OOR_RANGE:
132	case BMP580_REG_IF_CONFIG:
133	case BMP580_REG_FIFO_CONFIG:
134	case BMP580_REG_FIFO_SEL:
135	case BMP580_REG_DSP_CONFIG:
136	case BMP580_REG_DSP_IIR:
137	case BMP580_REG_CMD:
138		return true;
139	default:
140		return false;
141	}
142}
143
144static bool bmp580_is_volatile_reg(struct device *dev, unsigned int reg)
145{
146	switch (reg) {
147	case BMP580_REG_NVM_DATA_MSB:
148	case BMP580_REG_NVM_DATA_LSB:
149	case BMP580_REG_FIFO_COUNT:
150	case BMP580_REG_INT_STATUS:
151	case BMP580_REG_PRESS_XLSB:
152	case BMP580_REG_PRESS_LSB:
153	case BMP580_REG_PRESS_MSB:
154	case BMP580_REG_FIFO_DATA:
155	case BMP580_REG_TEMP_XLSB:
156	case BMP580_REG_TEMP_LSB:
157	case BMP580_REG_TEMP_MSB:
158	case BMP580_REG_EFF_OSR:
159	case BMP580_REG_STATUS:
160		return true;
161	default:
162		return false;
163	}
164}
165
166const struct regmap_config bmp280_regmap_config = {
167	.reg_bits = 8,
168	.val_bits = 8,
169
170	.max_register = BMP280_REG_HUMIDITY_LSB,
171	.cache_type = REGCACHE_RBTREE,
172
173	.writeable_reg = bmp280_is_writeable_reg,
174	.volatile_reg = bmp280_is_volatile_reg,
175};
176EXPORT_SYMBOL_NS(bmp280_regmap_config, IIO_BMP280);
177
178const struct regmap_config bmp380_regmap_config = {
179	.reg_bits = 8,
180	.val_bits = 8,
181
182	.max_register = BMP380_REG_CMD,
183	.cache_type = REGCACHE_RBTREE,
184
185	.writeable_reg = bmp380_is_writeable_reg,
186	.volatile_reg = bmp380_is_volatile_reg,
187};
188EXPORT_SYMBOL_NS(bmp380_regmap_config, IIO_BMP280);
189
190const struct regmap_config bmp580_regmap_config = {
191	.reg_bits = 8,
192	.val_bits = 8,
193
194	.max_register = BMP580_REG_CMD,
195	.cache_type = REGCACHE_RBTREE,
196
197	.writeable_reg = bmp580_is_writeable_reg,
198	.volatile_reg = bmp580_is_volatile_reg,
199};
200EXPORT_SYMBOL_NS(bmp580_regmap_config, IIO_BMP280);
201