diff options
Diffstat (limited to 'include/linux/regmap.h')
-rw-r--r-- | include/linux/regmap.h | 134 |
1 files changed, 133 insertions, 1 deletions
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index eb93921cdd30..a90abb6bfa64 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h | |||
@@ -13,12 +13,13 @@ | |||
13 | * published by the Free Software Foundation. | 13 | * published by the Free Software Foundation. |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <linux/device.h> | ||
17 | #include <linux/list.h> | 16 | #include <linux/list.h> |
18 | 17 | ||
19 | struct module; | 18 | struct module; |
19 | struct device; | ||
20 | struct i2c_client; | 20 | struct i2c_client; |
21 | struct spi_device; | 21 | struct spi_device; |
22 | struct regmap; | ||
22 | 23 | ||
23 | /* An enum of all the supported cache types */ | 24 | /* An enum of all the supported cache types */ |
24 | enum regcache_type { | 25 | enum regcache_type { |
@@ -40,10 +41,13 @@ struct reg_default { | |||
40 | unsigned int def; | 41 | unsigned int def; |
41 | }; | 42 | }; |
42 | 43 | ||
44 | #ifdef CONFIG_REGMAP | ||
45 | |||
43 | /** | 46 | /** |
44 | * Configuration for the register map of a device. | 47 | * Configuration for the register map of a device. |
45 | * | 48 | * |
46 | * @reg_bits: Number of bits in a register address, mandatory. | 49 | * @reg_bits: Number of bits in a register address, mandatory. |
50 | * @pad_bits: Number of bits of padding between register and value. | ||
47 | * @val_bits: Number of bits in a register value, mandatory. | 51 | * @val_bits: Number of bits in a register value, mandatory. |
48 | * | 52 | * |
49 | * @writeable_reg: Optional callback returning true if the register | 53 | * @writeable_reg: Optional callback returning true if the register |
@@ -74,6 +78,7 @@ struct reg_default { | |||
74 | */ | 78 | */ |
75 | struct regmap_config { | 79 | struct regmap_config { |
76 | int reg_bits; | 80 | int reg_bits; |
81 | int pad_bits; | ||
77 | int val_bits; | 82 | int val_bits; |
78 | 83 | ||
79 | bool (*writeable_reg)(struct device *dev, unsigned int reg); | 84 | bool (*writeable_reg)(struct device *dev, unsigned int reg); |
@@ -127,12 +132,22 @@ struct regmap *regmap_init_i2c(struct i2c_client *i2c, | |||
127 | struct regmap *regmap_init_spi(struct spi_device *dev, | 132 | struct regmap *regmap_init_spi(struct spi_device *dev, |
128 | const struct regmap_config *config); | 133 | const struct regmap_config *config); |
129 | 134 | ||
135 | struct regmap *devm_regmap_init(struct device *dev, | ||
136 | const struct regmap_bus *bus, | ||
137 | const struct regmap_config *config); | ||
138 | struct regmap *devm_regmap_init_i2c(struct i2c_client *i2c, | ||
139 | const struct regmap_config *config); | ||
140 | struct regmap *devm_regmap_init_spi(struct spi_device *dev, | ||
141 | const struct regmap_config *config); | ||
142 | |||
130 | void regmap_exit(struct regmap *map); | 143 | void regmap_exit(struct regmap *map); |
131 | int regmap_reinit_cache(struct regmap *map, | 144 | int regmap_reinit_cache(struct regmap *map, |
132 | const struct regmap_config *config); | 145 | const struct regmap_config *config); |
133 | int regmap_write(struct regmap *map, unsigned int reg, unsigned int val); | 146 | int regmap_write(struct regmap *map, unsigned int reg, unsigned int val); |
134 | int regmap_raw_write(struct regmap *map, unsigned int reg, | 147 | int regmap_raw_write(struct regmap *map, unsigned int reg, |
135 | const void *val, size_t val_len); | 148 | const void *val, size_t val_len); |
149 | int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, | ||
150 | size_t val_count); | ||
136 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); | 151 | int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val); |
137 | int regmap_raw_read(struct regmap *map, unsigned int reg, | 152 | int regmap_raw_read(struct regmap *map, unsigned int reg, |
138 | void *val, size_t val_len); | 153 | void *val, size_t val_len); |
@@ -143,12 +158,18 @@ int regmap_update_bits(struct regmap *map, unsigned int reg, | |||
143 | int regmap_update_bits_check(struct regmap *map, unsigned int reg, | 158 | int regmap_update_bits_check(struct regmap *map, unsigned int reg, |
144 | unsigned int mask, unsigned int val, | 159 | unsigned int mask, unsigned int val, |
145 | bool *change); | 160 | bool *change); |
161 | int regmap_get_val_bytes(struct regmap *map); | ||
146 | 162 | ||
147 | int regcache_sync(struct regmap *map); | 163 | int regcache_sync(struct regmap *map); |
164 | int regcache_sync_region(struct regmap *map, unsigned int min, | ||
165 | unsigned int max); | ||
148 | void regcache_cache_only(struct regmap *map, bool enable); | 166 | void regcache_cache_only(struct regmap *map, bool enable); |
149 | void regcache_cache_bypass(struct regmap *map, bool enable); | 167 | void regcache_cache_bypass(struct regmap *map, bool enable); |
150 | void regcache_mark_dirty(struct regmap *map); | 168 | void regcache_mark_dirty(struct regmap *map); |
151 | 169 | ||
170 | int regmap_register_patch(struct regmap *map, const struct reg_default *regs, | ||
171 | int num_regs); | ||
172 | |||
152 | /** | 173 | /** |
153 | * Description of an IRQ for the generic regmap irq_chip. | 174 | * Description of an IRQ for the generic regmap irq_chip. |
154 | * | 175 | * |
@@ -197,4 +218,115 @@ int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags, | |||
197 | void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data); | 218 | void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data); |
198 | int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data); | 219 | int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data); |
199 | 220 | ||
221 | #else | ||
222 | |||
223 | /* | ||
224 | * These stubs should only ever be called by generic code which has | ||
225 | * regmap based facilities, if they ever get called at runtime | ||
226 | * something is going wrong and something probably needs to select | ||
227 | * REGMAP. | ||
228 | */ | ||
229 | |||
230 | static inline int regmap_write(struct regmap *map, unsigned int reg, | ||
231 | unsigned int val) | ||
232 | { | ||
233 | WARN_ONCE(1, "regmap API is disabled"); | ||
234 | return -EINVAL; | ||
235 | } | ||
236 | |||
237 | static inline int regmap_raw_write(struct regmap *map, unsigned int reg, | ||
238 | const void *val, size_t val_len) | ||
239 | { | ||
240 | WARN_ONCE(1, "regmap API is disabled"); | ||
241 | return -EINVAL; | ||
242 | } | ||
243 | |||
244 | static inline int regmap_bulk_write(struct regmap *map, unsigned int reg, | ||
245 | const void *val, size_t val_count) | ||
246 | { | ||
247 | WARN_ONCE(1, "regmap API is disabled"); | ||
248 | return -EINVAL; | ||
249 | } | ||
250 | |||
251 | static inline int regmap_read(struct regmap *map, unsigned int reg, | ||
252 | unsigned int *val) | ||
253 | { | ||
254 | WARN_ONCE(1, "regmap API is disabled"); | ||
255 | return -EINVAL; | ||
256 | } | ||
257 | |||
258 | static inline int regmap_raw_read(struct regmap *map, unsigned int reg, | ||
259 | void *val, size_t val_len) | ||
260 | { | ||
261 | WARN_ONCE(1, "regmap API is disabled"); | ||
262 | return -EINVAL; | ||
263 | } | ||
264 | |||
265 | static inline int regmap_bulk_read(struct regmap *map, unsigned int reg, | ||
266 | void *val, size_t val_count) | ||
267 | { | ||
268 | WARN_ONCE(1, "regmap API is disabled"); | ||
269 | return -EINVAL; | ||
270 | } | ||
271 | |||
272 | static inline int regmap_update_bits(struct regmap *map, unsigned int reg, | ||
273 | unsigned int mask, unsigned int val) | ||
274 | { | ||
275 | WARN_ONCE(1, "regmap API is disabled"); | ||
276 | return -EINVAL; | ||
277 | } | ||
278 | |||
279 | static inline int regmap_update_bits_check(struct regmap *map, | ||
280 | unsigned int reg, | ||
281 | unsigned int mask, unsigned int val, | ||
282 | bool *change) | ||
283 | { | ||
284 | WARN_ONCE(1, "regmap API is disabled"); | ||
285 | return -EINVAL; | ||
286 | } | ||
287 | |||
288 | static inline int regmap_get_val_bytes(struct regmap *map) | ||
289 | { | ||
290 | WARN_ONCE(1, "regmap API is disabled"); | ||
291 | return -EINVAL; | ||
292 | } | ||
293 | |||
294 | static inline int regcache_sync(struct regmap *map) | ||
295 | { | ||
296 | WARN_ONCE(1, "regmap API is disabled"); | ||
297 | return -EINVAL; | ||
298 | } | ||
299 | |||
300 | static inline int regcache_sync_region(struct regmap *map, unsigned int min, | ||
301 | unsigned int max) | ||
302 | { | ||
303 | WARN_ONCE(1, "regmap API is disabled"); | ||
304 | return -EINVAL; | ||
305 | } | ||
306 | |||
307 | static inline void regcache_cache_only(struct regmap *map, bool enable) | ||
308 | { | ||
309 | WARN_ONCE(1, "regmap API is disabled"); | ||
310 | } | ||
311 | |||
312 | static inline void regcache_cache_bypass(struct regmap *map, bool enable) | ||
313 | { | ||
314 | WARN_ONCE(1, "regmap API is disabled"); | ||
315 | } | ||
316 | |||
317 | static inline void regcache_mark_dirty(struct regmap *map) | ||
318 | { | ||
319 | WARN_ONCE(1, "regmap API is disabled"); | ||
320 | } | ||
321 | |||
322 | static inline int regmap_register_patch(struct regmap *map, | ||
323 | const struct reg_default *regs, | ||
324 | int num_regs) | ||
325 | { | ||
326 | WARN_ONCE(1, "regmap API is disabled"); | ||
327 | return -EINVAL; | ||
328 | } | ||
329 | |||
330 | #endif | ||
331 | |||
200 | #endif | 332 | #endif |