1
2
3
4
5
6
7
8
9#ifndef _LINUX_NVMEM_CONSUMER_H
10#define _LINUX_NVMEM_CONSUMER_H
11
12#include <linux/err.h>
13#include <linux/errno.h>
14#include <linux/notifier.h>
15
16struct device;
17struct device_node;
18
19struct nvmem_cell;
20struct nvmem_device;
21
22struct nvmem_cell_info {
23 const char *name;
24 unsigned int offset;
25 unsigned int bytes;
26 unsigned int bit_offset;
27 unsigned int nbits;
28};
29
30
31
32
33
34
35
36
37
38
39
40struct nvmem_cell_lookup {
41 const char *nvmem_name;
42 const char *cell_name;
43 const char *dev_id;
44 const char *con_id;
45 struct list_head node;
46};
47
48enum {
49 NVMEM_ADD = 1,
50 NVMEM_REMOVE,
51 NVMEM_CELL_ADD,
52 NVMEM_CELL_REMOVE,
53};
54
55#if IS_ENABLED(CONFIG_NVMEM)
56
57
58struct nvmem_cell *nvmem_cell_get(struct device *dev, const char *id);
59struct nvmem_cell *devm_nvmem_cell_get(struct device *dev, const char *id);
60void nvmem_cell_put(struct nvmem_cell *cell);
61void devm_nvmem_cell_put(struct device *dev, struct nvmem_cell *cell);
62void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len);
63int nvmem_cell_write(struct nvmem_cell *cell, void *buf, size_t len);
64int nvmem_cell_read_u16(struct device *dev, const char *cell_id, u16 *val);
65int nvmem_cell_read_u32(struct device *dev, const char *cell_id, u32 *val);
66
67
68struct nvmem_device *nvmem_device_get(struct device *dev, const char *name);
69struct nvmem_device *devm_nvmem_device_get(struct device *dev,
70 const char *name);
71void nvmem_device_put(struct nvmem_device *nvmem);
72void devm_nvmem_device_put(struct device *dev, struct nvmem_device *nvmem);
73int nvmem_device_read(struct nvmem_device *nvmem, unsigned int offset,
74 size_t bytes, void *buf);
75int nvmem_device_write(struct nvmem_device *nvmem, unsigned int offset,
76 size_t bytes, void *buf);
77ssize_t nvmem_device_cell_read(struct nvmem_device *nvmem,
78 struct nvmem_cell_info *info, void *buf);
79int nvmem_device_cell_write(struct nvmem_device *nvmem,
80 struct nvmem_cell_info *info, void *buf);
81
82const char *nvmem_dev_name(struct nvmem_device *nvmem);
83
84void nvmem_add_cell_lookups(struct nvmem_cell_lookup *entries,
85 size_t nentries);
86void nvmem_del_cell_lookups(struct nvmem_cell_lookup *entries,
87 size_t nentries);
88
89int nvmem_register_notifier(struct notifier_block *nb);
90int nvmem_unregister_notifier(struct notifier_block *nb);
91
92struct nvmem_device *nvmem_device_find(void *data,
93 int (*match)(struct device *dev, const void *data));
94
95#else
96
97static inline struct nvmem_cell *nvmem_cell_get(struct device *dev,
98 const char *id)
99{
100 return ERR_PTR(-EOPNOTSUPP);
101}
102
103static inline struct nvmem_cell *devm_nvmem_cell_get(struct device *dev,
104 const char *id)
105{
106 return ERR_PTR(-EOPNOTSUPP);
107}
108
109static inline void devm_nvmem_cell_put(struct device *dev,
110 struct nvmem_cell *cell)
111{
112
113}
114static inline void nvmem_cell_put(struct nvmem_cell *cell)
115{
116}
117
118static inline void *nvmem_cell_read(struct nvmem_cell *cell, size_t *len)
119{
120 return ERR_PTR(-EOPNOTSUPP);
121}
122
123static inline int nvmem_cell_write(struct nvmem_cell *cell,
124 void *buf, size_t len)
125{
126 return -EOPNOTSUPP;
127}
128
129static inline int nvmem_cell_read_u16(struct device *dev,
130 const char *cell_id, u16 *val)
131{
132 return -EOPNOTSUPP;
133}
134
135static inline int nvmem_cell_read_u32(struct device *dev,
136 const char *cell_id, u32 *val)
137{
138 return -EOPNOTSUPP;
139}
140
141static inline struct nvmem_device *nvmem_device_get(struct device *dev,
142 const char *name)
143{
144 return ERR_PTR(-EOPNOTSUPP);
145}
146
147static inline struct nvmem_device *devm_nvmem_device_get(struct device *dev,
148 const char *name)
149{
150 return ERR_PTR(-EOPNOTSUPP);
151}
152
153static inline void nvmem_device_put(struct nvmem_device *nvmem)
154{
155}
156
157static inline void devm_nvmem_device_put(struct device *dev,
158 struct nvmem_device *nvmem)
159{
160}
161
162static inline ssize_t nvmem_device_cell_read(struct nvmem_device *nvmem,
163 struct nvmem_cell_info *info,
164 void *buf)
165{
166 return -EOPNOTSUPP;
167}
168
169static inline int nvmem_device_cell_write(struct nvmem_device *nvmem,
170 struct nvmem_cell_info *info,
171 void *buf)
172{
173 return -EOPNOTSUPP;
174}
175
176static inline int nvmem_device_read(struct nvmem_device *nvmem,
177 unsigned int offset, size_t bytes,
178 void *buf)
179{
180 return -EOPNOTSUPP;
181}
182
183static inline int nvmem_device_write(struct nvmem_device *nvmem,
184 unsigned int offset, size_t bytes,
185 void *buf)
186{
187 return -EOPNOTSUPP;
188}
189
190static inline const char *nvmem_dev_name(struct nvmem_device *nvmem)
191{
192 return NULL;
193}
194
195static inline void
196nvmem_add_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) {}
197static inline void
198nvmem_del_cell_lookups(struct nvmem_cell_lookup *entries, size_t nentries) {}
199
200static inline int nvmem_register_notifier(struct notifier_block *nb)
201{
202 return -EOPNOTSUPP;
203}
204
205static inline int nvmem_unregister_notifier(struct notifier_block *nb)
206{
207 return -EOPNOTSUPP;
208}
209
210static inline struct nvmem_device *nvmem_device_find(void *data,
211 int (*match)(struct device *dev, const void *data))
212{
213 return NULL;
214}
215
216#endif
217
218#if IS_ENABLED(CONFIG_NVMEM) && IS_ENABLED(CONFIG_OF)
219struct nvmem_cell *of_nvmem_cell_get(struct device_node *np,
220 const char *id);
221struct nvmem_device *of_nvmem_device_get(struct device_node *np,
222 const char *name);
223#else
224static inline struct nvmem_cell *of_nvmem_cell_get(struct device_node *np,
225 const char *id)
226{
227 return ERR_PTR(-EOPNOTSUPP);
228}
229
230static inline struct nvmem_device *of_nvmem_device_get(struct device_node *np,
231 const char *name)
232{
233 return ERR_PTR(-EOPNOTSUPP);
234}
235#endif
236
237#endif
238