1#ifndef __LINUX_REGMAP_H
2#define __LINUX_REGMAP_H
3
4
5
6
7
8
9
10
11
12
13
14
15
16#include <linux/list.h>
17#include <linux/rbtree.h>
18
19struct module;
20struct device;
21struct i2c_client;
22struct spi_device;
23struct regmap;
24struct regmap_range_cfg;
25
26
27enum regcache_type {
28 REGCACHE_NONE,
29 REGCACHE_RBTREE,
30 REGCACHE_COMPRESSED
31};
32
33
34
35
36
37
38
39
40
41struct reg_default {
42 unsigned int reg;
43 unsigned int def;
44};
45
46#ifdef CONFIG_REGMAP
47
48enum regmap_endian {
49
50 REGMAP_ENDIAN_DEFAULT = 0,
51 REGMAP_ENDIAN_BIG,
52 REGMAP_ENDIAN_LITTLE,
53 REGMAP_ENDIAN_NATIVE,
54};
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107struct regmap_config {
108 const char *name;
109
110 int reg_bits;
111 int reg_stride;
112 int pad_bits;
113 int val_bits;
114
115 bool (*writeable_reg)(struct device *dev, unsigned int reg);
116 bool (*readable_reg)(struct device *dev, unsigned int reg);
117 bool (*volatile_reg)(struct device *dev, unsigned int reg);
118 bool (*precious_reg)(struct device *dev, unsigned int reg);
119
120 unsigned int max_register;
121 const struct reg_default *reg_defaults;
122 unsigned int num_reg_defaults;
123 enum regcache_type cache_type;
124 const void *reg_defaults_raw;
125 unsigned int num_reg_defaults_raw;
126
127 u8 read_flag_mask;
128 u8 write_flag_mask;
129
130 bool use_single_rw;
131
132 enum regmap_endian reg_format_endian;
133 enum regmap_endian val_format_endian;
134
135 const struct regmap_range_cfg *ranges;
136 unsigned int n_ranges;
137};
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155struct regmap_range_cfg {
156
157 unsigned int range_min;
158 unsigned int range_max;
159
160
161 unsigned int selector_reg;
162 unsigned int selector_mask;
163 int selector_shift;
164
165
166 unsigned int window_start;
167 unsigned int window_len;
168};
169
170typedef int (*regmap_hw_write)(void *context, const void *data,
171 size_t count);
172typedef int (*regmap_hw_gather_write)(void *context,
173 const void *reg, size_t reg_len,
174 const void *val, size_t val_len);
175typedef int (*regmap_hw_read)(void *context,
176 const void *reg_buf, size_t reg_size,
177 void *val_buf, size_t val_size);
178typedef void (*regmap_hw_free_context)(void *context);
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199struct regmap_bus {
200 bool fast_io;
201 regmap_hw_write write;
202 regmap_hw_gather_write gather_write;
203 regmap_hw_read read;
204 regmap_hw_free_context free_context;
205 u8 read_flag_mask;
206 enum regmap_endian reg_format_endian_default;
207 enum regmap_endian val_format_endian_default;
208};
209
210struct regmap *regmap_init(struct device *dev,
211 const struct regmap_bus *bus,
212 void *bus_context,
213 const struct regmap_config *config);
214struct regmap *regmap_init_i2c(struct i2c_client *i2c,
215 const struct regmap_config *config);
216struct regmap *regmap_init_spi(struct spi_device *dev,
217 const struct regmap_config *config);
218struct regmap *regmap_init_mmio(struct device *dev,
219 void __iomem *regs,
220 const struct regmap_config *config);
221
222struct regmap *devm_regmap_init(struct device *dev,
223 const struct regmap_bus *bus,
224 void *bus_context,
225 const struct regmap_config *config);
226struct regmap *devm_regmap_init_i2c(struct i2c_client *i2c,
227 const struct regmap_config *config);
228struct regmap *devm_regmap_init_spi(struct spi_device *dev,
229 const struct regmap_config *config);
230struct regmap *devm_regmap_init_mmio(struct device *dev,
231 void __iomem *regs,
232 const struct regmap_config *config);
233
234void regmap_exit(struct regmap *map);
235int regmap_reinit_cache(struct regmap *map,
236 const struct regmap_config *config);
237struct regmap *dev_get_regmap(struct device *dev, const char *name);
238int regmap_write(struct regmap *map, unsigned int reg, unsigned int val);
239int regmap_raw_write(struct regmap *map, unsigned int reg,
240 const void *val, size_t val_len);
241int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
242 size_t val_count);
243int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);
244int regmap_raw_read(struct regmap *map, unsigned int reg,
245 void *val, size_t val_len);
246int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
247 size_t val_count);
248int regmap_update_bits(struct regmap *map, unsigned int reg,
249 unsigned int mask, unsigned int val);
250int regmap_update_bits_check(struct regmap *map, unsigned int reg,
251 unsigned int mask, unsigned int val,
252 bool *change);
253int regmap_get_val_bytes(struct regmap *map);
254
255int regcache_sync(struct regmap *map);
256int regcache_sync_region(struct regmap *map, unsigned int min,
257 unsigned int max);
258void regcache_cache_only(struct regmap *map, bool enable);
259void regcache_cache_bypass(struct regmap *map, bool enable);
260void regcache_mark_dirty(struct regmap *map);
261
262int regmap_register_patch(struct regmap *map, const struct reg_default *regs,
263 int num_regs);
264
265
266
267
268
269
270
271struct regmap_irq {
272 unsigned int reg_offset;
273 unsigned int mask;
274};
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295struct regmap_irq_chip {
296 const char *name;
297
298 unsigned int status_base;
299 unsigned int mask_base;
300 unsigned int ack_base;
301 unsigned int wake_base;
302 unsigned int irq_reg_stride;
303 unsigned int mask_invert;
304 bool runtime_pm;
305
306 int num_regs;
307
308 const struct regmap_irq *irqs;
309 int num_irqs;
310};
311
312struct regmap_irq_chip_data;
313
314int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
315 int irq_base, const struct regmap_irq_chip *chip,
316 struct regmap_irq_chip_data **data);
317void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data);
318int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data);
319int regmap_irq_get_virq(struct regmap_irq_chip_data *data, int irq);
320
321#else
322
323
324
325
326
327
328
329
330static inline int regmap_write(struct regmap *map, unsigned int reg,
331 unsigned int val)
332{
333 WARN_ONCE(1, "regmap API is disabled");
334 return -EINVAL;
335}
336
337static inline int regmap_raw_write(struct regmap *map, unsigned int reg,
338 const void *val, size_t val_len)
339{
340 WARN_ONCE(1, "regmap API is disabled");
341 return -EINVAL;
342}
343
344static inline int regmap_bulk_write(struct regmap *map, unsigned int reg,
345 const void *val, size_t val_count)
346{
347 WARN_ONCE(1, "regmap API is disabled");
348 return -EINVAL;
349}
350
351static inline int regmap_read(struct regmap *map, unsigned int reg,
352 unsigned int *val)
353{
354 WARN_ONCE(1, "regmap API is disabled");
355 return -EINVAL;
356}
357
358static inline int regmap_raw_read(struct regmap *map, unsigned int reg,
359 void *val, size_t val_len)
360{
361 WARN_ONCE(1, "regmap API is disabled");
362 return -EINVAL;
363}
364
365static inline int regmap_bulk_read(struct regmap *map, unsigned int reg,
366 void *val, size_t val_count)
367{
368 WARN_ONCE(1, "regmap API is disabled");
369 return -EINVAL;
370}
371
372static inline int regmap_update_bits(struct regmap *map, unsigned int reg,
373 unsigned int mask, unsigned int val)
374{
375 WARN_ONCE(1, "regmap API is disabled");
376 return -EINVAL;
377}
378
379static inline int regmap_update_bits_check(struct regmap *map,
380 unsigned int reg,
381 unsigned int mask, unsigned int val,
382 bool *change)
383{
384 WARN_ONCE(1, "regmap API is disabled");
385 return -EINVAL;
386}
387
388static inline int regmap_get_val_bytes(struct regmap *map)
389{
390 WARN_ONCE(1, "regmap API is disabled");
391 return -EINVAL;
392}
393
394static inline int regcache_sync(struct regmap *map)
395{
396 WARN_ONCE(1, "regmap API is disabled");
397 return -EINVAL;
398}
399
400static inline int regcache_sync_region(struct regmap *map, unsigned int min,
401 unsigned int max)
402{
403 WARN_ONCE(1, "regmap API is disabled");
404 return -EINVAL;
405}
406
407static inline void regcache_cache_only(struct regmap *map, bool enable)
408{
409 WARN_ONCE(1, "regmap API is disabled");
410}
411
412static inline void regcache_cache_bypass(struct regmap *map, bool enable)
413{
414 WARN_ONCE(1, "regmap API is disabled");
415}
416
417static inline void regcache_mark_dirty(struct regmap *map)
418{
419 WARN_ONCE(1, "regmap API is disabled");
420}
421
422static inline int regmap_register_patch(struct regmap *map,
423 const struct reg_default *regs,
424 int num_regs)
425{
426 WARN_ONCE(1, "regmap API is disabled");
427 return -EINVAL;
428}
429
430static inline struct regmap *dev_get_regmap(struct device *dev,
431 const char *name)
432{
433 return NULL;
434}
435
436#endif
437
438#endif
439