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