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
294struct regmap_irq_chip {
295 const char *name;
296
297 unsigned int status_base;
298 unsigned int mask_base;
299 unsigned int ack_base;
300 unsigned int wake_base;
301 unsigned int irq_reg_stride;
302
303 int num_regs;
304
305 const struct regmap_irq *irqs;
306 int num_irqs;
307};
308
309struct regmap_irq_chip_data;
310
311int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
312 int irq_base, const struct regmap_irq_chip *chip,
313 struct regmap_irq_chip_data **data);
314void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *data);
315int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data);
316int regmap_irq_get_virq(struct regmap_irq_chip_data *data, int irq);
317
318#else
319
320
321
322
323
324
325
326
327static inline int regmap_write(struct regmap *map, unsigned int reg,
328 unsigned int val)
329{
330 WARN_ONCE(1, "regmap API is disabled");
331 return -EINVAL;
332}
333
334static inline int regmap_raw_write(struct regmap *map, unsigned int reg,
335 const void *val, size_t val_len)
336{
337 WARN_ONCE(1, "regmap API is disabled");
338 return -EINVAL;
339}
340
341static inline int regmap_bulk_write(struct regmap *map, unsigned int reg,
342 const void *val, size_t val_count)
343{
344 WARN_ONCE(1, "regmap API is disabled");
345 return -EINVAL;
346}
347
348static inline int regmap_read(struct regmap *map, unsigned int reg,
349 unsigned int *val)
350{
351 WARN_ONCE(1, "regmap API is disabled");
352 return -EINVAL;
353}
354
355static inline int regmap_raw_read(struct regmap *map, unsigned int reg,
356 void *val, size_t val_len)
357{
358 WARN_ONCE(1, "regmap API is disabled");
359 return -EINVAL;
360}
361
362static inline int regmap_bulk_read(struct regmap *map, unsigned int reg,
363 void *val, size_t val_count)
364{
365 WARN_ONCE(1, "regmap API is disabled");
366 return -EINVAL;
367}
368
369static inline int regmap_update_bits(struct regmap *map, unsigned int reg,
370 unsigned int mask, unsigned int val)
371{
372 WARN_ONCE(1, "regmap API is disabled");
373 return -EINVAL;
374}
375
376static inline int regmap_update_bits_check(struct regmap *map,
377 unsigned int reg,
378 unsigned int mask, unsigned int val,
379 bool *change)
380{
381 WARN_ONCE(1, "regmap API is disabled");
382 return -EINVAL;
383}
384
385static inline int regmap_get_val_bytes(struct regmap *map)
386{
387 WARN_ONCE(1, "regmap API is disabled");
388 return -EINVAL;
389}
390
391static inline int regcache_sync(struct regmap *map)
392{
393 WARN_ONCE(1, "regmap API is disabled");
394 return -EINVAL;
395}
396
397static inline int regcache_sync_region(struct regmap *map, unsigned int min,
398 unsigned int max)
399{
400 WARN_ONCE(1, "regmap API is disabled");
401 return -EINVAL;
402}
403
404static inline void regcache_cache_only(struct regmap *map, bool enable)
405{
406 WARN_ONCE(1, "regmap API is disabled");
407}
408
409static inline void regcache_cache_bypass(struct regmap *map, bool enable)
410{
411 WARN_ONCE(1, "regmap API is disabled");
412}
413
414static inline void regcache_mark_dirty(struct regmap *map)
415{
416 WARN_ONCE(1, "regmap API is disabled");
417}
418
419static inline int regmap_register_patch(struct regmap *map,
420 const struct reg_default *regs,
421 int num_regs)
422{
423 WARN_ONCE(1, "regmap API is disabled");
424 return -EINVAL;
425}
426
427static inline struct regmap *dev_get_regmap(struct device *dev,
428 const char *name)
429{
430 return NULL;
431}
432
433#endif
434
435#endif
436