1#ifndef __LINUX_GPIO_CONSUMER_H
2#define __LINUX_GPIO_CONSUMER_H
3
4#include <linux/bug.h>
5#include <linux/err.h>
6#include <linux/kernel.h>
7
8struct device;
9
10
11
12
13
14
15
16
17struct gpio_desc;
18
19
20
21
22
23struct gpio_descs {
24 unsigned int ndescs;
25 struct gpio_desc *desc[];
26};
27
28#define GPIOD_FLAGS_BIT_DIR_SET BIT(0)
29#define GPIOD_FLAGS_BIT_DIR_OUT BIT(1)
30#define GPIOD_FLAGS_BIT_DIR_VAL BIT(2)
31
32
33
34
35
36enum gpiod_flags {
37 GPIOD_ASIS = 0,
38 GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET,
39 GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT,
40 GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
41 GPIOD_FLAGS_BIT_DIR_VAL,
42};
43
44#ifdef CONFIG_GPIOLIB
45
46
47int gpiod_count(struct device *dev, const char *con_id);
48
49
50struct gpio_desc *__must_check gpiod_get(struct device *dev,
51 const char *con_id,
52 enum gpiod_flags flags);
53struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
54 const char *con_id,
55 unsigned int idx,
56 enum gpiod_flags flags);
57struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
58 const char *con_id,
59 enum gpiod_flags flags);
60struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
61 const char *con_id,
62 unsigned int index,
63 enum gpiod_flags flags);
64struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
65 const char *con_id,
66 enum gpiod_flags flags);
67struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
68 const char *con_id,
69 enum gpiod_flags flags);
70void gpiod_put(struct gpio_desc *desc);
71void gpiod_put_array(struct gpio_descs *descs);
72
73struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
74 const char *con_id,
75 enum gpiod_flags flags);
76struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
77 const char *con_id,
78 unsigned int idx,
79 enum gpiod_flags flags);
80struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
81 const char *con_id,
82 enum gpiod_flags flags);
83struct gpio_desc *__must_check
84devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
85 unsigned int index, enum gpiod_flags flags);
86struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
87 const char *con_id,
88 enum gpiod_flags flags);
89struct gpio_descs *__must_check
90devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
91 enum gpiod_flags flags);
92void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
93void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs);
94
95int gpiod_get_direction(struct gpio_desc *desc);
96int gpiod_direction_input(struct gpio_desc *desc);
97int gpiod_direction_output(struct gpio_desc *desc, int value);
98int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
99
100
101int gpiod_get_value(const struct gpio_desc *desc);
102void gpiod_set_value(struct gpio_desc *desc, int value);
103void gpiod_set_array_value(unsigned int array_size,
104 struct gpio_desc **desc_array, int *value_array);
105int gpiod_get_raw_value(const struct gpio_desc *desc);
106void gpiod_set_raw_value(struct gpio_desc *desc, int value);
107void gpiod_set_raw_array_value(unsigned int array_size,
108 struct gpio_desc **desc_array,
109 int *value_array);
110
111
112int gpiod_get_value_cansleep(const struct gpio_desc *desc);
113void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
114void gpiod_set_array_value_cansleep(unsigned int array_size,
115 struct gpio_desc **desc_array,
116 int *value_array);
117int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
118void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
119void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
120 struct gpio_desc **desc_array,
121 int *value_array);
122
123int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
124
125int gpiod_is_active_low(const struct gpio_desc *desc);
126int gpiod_cansleep(const struct gpio_desc *desc);
127
128int gpiod_to_irq(const struct gpio_desc *desc);
129
130
131struct gpio_desc *gpio_to_desc(unsigned gpio);
132int desc_to_gpio(const struct gpio_desc *desc);
133
134
135struct fwnode_handle;
136
137struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
138 const char *propname);
139struct gpio_desc *devm_get_gpiod_from_child(struct device *dev,
140 const char *con_id,
141 struct fwnode_handle *child);
142#else
143
144static inline int gpiod_count(struct device *dev, const char *con_id)
145{
146 return 0;
147}
148
149static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
150 const char *con_id,
151 enum gpiod_flags flags)
152{
153 return ERR_PTR(-ENOSYS);
154}
155static inline struct gpio_desc *__must_check
156gpiod_get_index(struct device *dev,
157 const char *con_id,
158 unsigned int idx,
159 enum gpiod_flags flags)
160{
161 return ERR_PTR(-ENOSYS);
162}
163
164static inline struct gpio_desc *__must_check
165gpiod_get_optional(struct device *dev, const char *con_id,
166 enum gpiod_flags flags)
167{
168 return ERR_PTR(-ENOSYS);
169}
170
171static inline struct gpio_desc *__must_check
172gpiod_get_index_optional(struct device *dev, const char *con_id,
173 unsigned int index, enum gpiod_flags flags)
174{
175 return ERR_PTR(-ENOSYS);
176}
177
178static inline struct gpio_descs *__must_check
179gpiod_get_array(struct device *dev, const char *con_id,
180 enum gpiod_flags flags)
181{
182 return ERR_PTR(-ENOSYS);
183}
184
185static inline struct gpio_descs *__must_check
186gpiod_get_array_optional(struct device *dev, const char *con_id,
187 enum gpiod_flags flags)
188{
189 return ERR_PTR(-ENOSYS);
190}
191
192static inline void gpiod_put(struct gpio_desc *desc)
193{
194 might_sleep();
195
196
197 WARN_ON(1);
198}
199
200static inline void gpiod_put_array(struct gpio_descs *descs)
201{
202 might_sleep();
203
204
205 WARN_ON(1);
206}
207
208static inline struct gpio_desc *__must_check
209devm_gpiod_get(struct device *dev,
210 const char *con_id,
211 enum gpiod_flags flags)
212{
213 return ERR_PTR(-ENOSYS);
214}
215static inline
216struct gpio_desc *__must_check
217devm_gpiod_get_index(struct device *dev,
218 const char *con_id,
219 unsigned int idx,
220 enum gpiod_flags flags)
221{
222 return ERR_PTR(-ENOSYS);
223}
224
225static inline struct gpio_desc *__must_check
226devm_gpiod_get_optional(struct device *dev, const char *con_id,
227 enum gpiod_flags flags)
228{
229 return ERR_PTR(-ENOSYS);
230}
231
232static inline struct gpio_desc *__must_check
233devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
234 unsigned int index, enum gpiod_flags flags)
235{
236 return ERR_PTR(-ENOSYS);
237}
238
239static inline struct gpio_descs *__must_check
240devm_gpiod_get_array(struct device *dev, const char *con_id,
241 enum gpiod_flags flags)
242{
243 return ERR_PTR(-ENOSYS);
244}
245
246static inline struct gpio_descs *__must_check
247devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
248 enum gpiod_flags flags)
249{
250 return ERR_PTR(-ENOSYS);
251}
252
253static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
254{
255 might_sleep();
256
257
258 WARN_ON(1);
259}
260
261static inline void devm_gpiod_put_array(struct device *dev,
262 struct gpio_descs *descs)
263{
264 might_sleep();
265
266
267 WARN_ON(1);
268}
269
270
271static inline int gpiod_get_direction(const struct gpio_desc *desc)
272{
273
274 WARN_ON(1);
275 return -ENOSYS;
276}
277static inline int gpiod_direction_input(struct gpio_desc *desc)
278{
279
280 WARN_ON(1);
281 return -ENOSYS;
282}
283static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
284{
285
286 WARN_ON(1);
287 return -ENOSYS;
288}
289static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
290{
291
292 WARN_ON(1);
293 return -ENOSYS;
294}
295
296
297static inline int gpiod_get_value(const struct gpio_desc *desc)
298{
299
300 WARN_ON(1);
301 return 0;
302}
303static inline void gpiod_set_value(struct gpio_desc *desc, int value)
304{
305
306 WARN_ON(1);
307}
308static inline void gpiod_set_array_value(unsigned int array_size,
309 struct gpio_desc **desc_array,
310 int *value_array)
311{
312
313 WARN_ON(1);
314}
315static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
316{
317
318 WARN_ON(1);
319 return 0;
320}
321static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
322{
323
324 WARN_ON(1);
325}
326static inline void gpiod_set_raw_array_value(unsigned int array_size,
327 struct gpio_desc **desc_array,
328 int *value_array)
329{
330
331 WARN_ON(1);
332}
333
334static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
335{
336
337 WARN_ON(1);
338 return 0;
339}
340static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
341{
342
343 WARN_ON(1);
344}
345static inline void gpiod_set_array_value_cansleep(unsigned int array_size,
346 struct gpio_desc **desc_array,
347 int *value_array)
348{
349
350 WARN_ON(1);
351}
352static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
353{
354
355 WARN_ON(1);
356 return 0;
357}
358static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
359 int value)
360{
361
362 WARN_ON(1);
363}
364static inline void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
365 struct gpio_desc **desc_array,
366 int *value_array)
367{
368
369 WARN_ON(1);
370}
371
372static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
373{
374
375 WARN_ON(1);
376 return -ENOSYS;
377}
378
379static inline int gpiod_is_active_low(const struct gpio_desc *desc)
380{
381
382 WARN_ON(1);
383 return 0;
384}
385static inline int gpiod_cansleep(const struct gpio_desc *desc)
386{
387
388 WARN_ON(1);
389 return 0;
390}
391
392static inline int gpiod_to_irq(const struct gpio_desc *desc)
393{
394
395 WARN_ON(1);
396 return -EINVAL;
397}
398
399static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
400{
401 return ERR_PTR(-EINVAL);
402}
403
404static inline int desc_to_gpio(const struct gpio_desc *desc)
405{
406
407 WARN_ON(1);
408 return -EINVAL;
409}
410
411
412struct fwnode_handle;
413
414static inline struct gpio_desc *fwnode_get_named_gpiod(
415 struct fwnode_handle *fwnode, const char *propname)
416{
417 return ERR_PTR(-ENOSYS);
418}
419
420static inline struct gpio_desc *devm_get_gpiod_from_child(
421 struct device *dev, const char *con_id, struct fwnode_handle *child)
422{
423 return ERR_PTR(-ENOSYS);
424}
425
426#endif
427
428#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
429
430int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
431int gpiod_export_link(struct device *dev, const char *name,
432 struct gpio_desc *desc);
433void gpiod_unexport(struct gpio_desc *desc);
434
435#else
436
437static inline int gpiod_export(struct gpio_desc *desc,
438 bool direction_may_change)
439{
440 return -ENOSYS;
441}
442
443static inline int gpiod_export_link(struct device *dev, const char *name,
444 struct gpio_desc *desc)
445{
446 return -ENOSYS;
447}
448
449static inline void gpiod_unexport(struct gpio_desc *desc)
450{
451}
452
453#endif
454
455#endif
456