Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */
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 : :
9 : : struct device;
10 : :
11 : : /**
12 : : * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are
13 : : * preferable to the old integer-based handles.
14 : : *
15 : : * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid
16 : : * until the GPIO is released.
17 : : */
18 : : struct gpio_desc;
19 : :
20 : : /**
21 : : * Opaque descriptor for a structure of GPIO array attributes. This structure
22 : : * is attached to struct gpiod_descs obtained from gpiod_get_array() and can be
23 : : * passed back to get/set array functions in order to activate fast processing
24 : : * path if applicable.
25 : : */
26 : : struct gpio_array;
27 : :
28 : : /**
29 : : * Struct containing an array of descriptors that can be obtained using
30 : : * gpiod_get_array().
31 : : */
32 : : struct gpio_descs {
33 : : struct gpio_array *info;
34 : : unsigned int ndescs;
35 : : struct gpio_desc *desc[];
36 : : };
37 : :
38 : : #define GPIOD_FLAGS_BIT_DIR_SET BIT(0)
39 : : #define GPIOD_FLAGS_BIT_DIR_OUT BIT(1)
40 : : #define GPIOD_FLAGS_BIT_DIR_VAL BIT(2)
41 : : #define GPIOD_FLAGS_BIT_OPEN_DRAIN BIT(3)
42 : : #define GPIOD_FLAGS_BIT_NONEXCLUSIVE BIT(4)
43 : :
44 : : /**
45 : : * Optional flags that can be passed to one of gpiod_* to configure direction
46 : : * and output value. These values cannot be OR'd.
47 : : */
48 : : enum gpiod_flags {
49 : : GPIOD_ASIS = 0,
50 : : GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET,
51 : : GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT,
52 : : GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
53 : : GPIOD_FLAGS_BIT_DIR_VAL,
54 : : GPIOD_OUT_LOW_OPEN_DRAIN = GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_OPEN_DRAIN,
55 : : GPIOD_OUT_HIGH_OPEN_DRAIN = GPIOD_OUT_HIGH | GPIOD_FLAGS_BIT_OPEN_DRAIN,
56 : : };
57 : :
58 : : #ifdef CONFIG_GPIOLIB
59 : :
60 : : /* Return the number of GPIOs associated with a device / function */
61 : : int gpiod_count(struct device *dev, const char *con_id);
62 : :
63 : : /* Acquire and dispose GPIOs */
64 : : struct gpio_desc *__must_check gpiod_get(struct device *dev,
65 : : const char *con_id,
66 : : enum gpiod_flags flags);
67 : : struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
68 : : const char *con_id,
69 : : unsigned int idx,
70 : : enum gpiod_flags flags);
71 : : struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
72 : : const char *con_id,
73 : : enum gpiod_flags flags);
74 : : struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
75 : : const char *con_id,
76 : : unsigned int index,
77 : : enum gpiod_flags flags);
78 : : struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
79 : : const char *con_id,
80 : : enum gpiod_flags flags);
81 : : struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
82 : : const char *con_id,
83 : : enum gpiod_flags flags);
84 : : void gpiod_put(struct gpio_desc *desc);
85 : : void gpiod_put_array(struct gpio_descs *descs);
86 : :
87 : : struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
88 : : const char *con_id,
89 : : enum gpiod_flags flags);
90 : : struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
91 : : const char *con_id,
92 : : unsigned int idx,
93 : : enum gpiod_flags flags);
94 : : struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
95 : : const char *con_id,
96 : : enum gpiod_flags flags);
97 : : struct gpio_desc *__must_check
98 : : devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
99 : : unsigned int index, enum gpiod_flags flags);
100 : : struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
101 : : const char *con_id,
102 : : enum gpiod_flags flags);
103 : : struct gpio_descs *__must_check
104 : : devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
105 : : enum gpiod_flags flags);
106 : : void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
107 : : void devm_gpiod_unhinge(struct device *dev, struct gpio_desc *desc);
108 : : void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs);
109 : :
110 : : int gpiod_get_direction(struct gpio_desc *desc);
111 : : int gpiod_direction_input(struct gpio_desc *desc);
112 : : int gpiod_direction_output(struct gpio_desc *desc, int value);
113 : : int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
114 : :
115 : : /* Value get/set from non-sleeping context */
116 : : int gpiod_get_value(const struct gpio_desc *desc);
117 : : int gpiod_get_array_value(unsigned int array_size,
118 : : struct gpio_desc **desc_array,
119 : : struct gpio_array *array_info,
120 : : unsigned long *value_bitmap);
121 : : void gpiod_set_value(struct gpio_desc *desc, int value);
122 : : int gpiod_set_array_value(unsigned int array_size,
123 : : struct gpio_desc **desc_array,
124 : : struct gpio_array *array_info,
125 : : unsigned long *value_bitmap);
126 : : int gpiod_get_raw_value(const struct gpio_desc *desc);
127 : : int gpiod_get_raw_array_value(unsigned int array_size,
128 : : struct gpio_desc **desc_array,
129 : : struct gpio_array *array_info,
130 : : unsigned long *value_bitmap);
131 : : void gpiod_set_raw_value(struct gpio_desc *desc, int value);
132 : : int gpiod_set_raw_array_value(unsigned int array_size,
133 : : struct gpio_desc **desc_array,
134 : : struct gpio_array *array_info,
135 : : unsigned long *value_bitmap);
136 : :
137 : : /* Value get/set from sleeping context */
138 : : int gpiod_get_value_cansleep(const struct gpio_desc *desc);
139 : : int gpiod_get_array_value_cansleep(unsigned int array_size,
140 : : struct gpio_desc **desc_array,
141 : : struct gpio_array *array_info,
142 : : unsigned long *value_bitmap);
143 : : void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
144 : : int gpiod_set_array_value_cansleep(unsigned int array_size,
145 : : struct gpio_desc **desc_array,
146 : : struct gpio_array *array_info,
147 : : unsigned long *value_bitmap);
148 : : int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
149 : : int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
150 : : struct gpio_desc **desc_array,
151 : : struct gpio_array *array_info,
152 : : unsigned long *value_bitmap);
153 : : void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
154 : : int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
155 : : struct gpio_desc **desc_array,
156 : : struct gpio_array *array_info,
157 : : unsigned long *value_bitmap);
158 : :
159 : : int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
160 : : int gpiod_set_transitory(struct gpio_desc *desc, bool transitory);
161 : : void gpiod_toggle_active_low(struct gpio_desc *desc);
162 : :
163 : : int gpiod_is_active_low(const struct gpio_desc *desc);
164 : : int gpiod_cansleep(const struct gpio_desc *desc);
165 : :
166 : : int gpiod_to_irq(const struct gpio_desc *desc);
167 : : int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name);
168 : :
169 : : /* Convert between the old gpio_ and new gpiod_ interfaces */
170 : : struct gpio_desc *gpio_to_desc(unsigned gpio);
171 : : int desc_to_gpio(const struct gpio_desc *desc);
172 : :
173 : : /* Child properties interface */
174 : : struct fwnode_handle;
175 : :
176 : : struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
177 : : const char *propname, int index,
178 : : enum gpiod_flags dflags,
179 : : const char *label);
180 : : struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
181 : : const char *con_id, int index,
182 : : enum gpiod_flags flags,
183 : : const char *label);
184 : : struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
185 : : struct fwnode_handle *child,
186 : : const char *con_id, int index,
187 : : enum gpiod_flags flags,
188 : : const char *label);
189 : :
190 : : #else /* CONFIG_GPIOLIB */
191 : :
192 : : static inline int gpiod_count(struct device *dev, const char *con_id)
193 : : {
194 : : return 0;
195 : : }
196 : :
197 : 0 : static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
198 : : const char *con_id,
199 : : enum gpiod_flags flags)
200 : : {
201 : 0 : return ERR_PTR(-ENOSYS);
202 : : }
203 : : static inline struct gpio_desc *__must_check
204 : : gpiod_get_index(struct device *dev,
205 : : const char *con_id,
206 : : unsigned int idx,
207 : : enum gpiod_flags flags)
208 : : {
209 : : return ERR_PTR(-ENOSYS);
210 : : }
211 : :
212 : : static inline struct gpio_desc *__must_check
213 : 78 : gpiod_get_optional(struct device *dev, const char *con_id,
214 : : enum gpiod_flags flags)
215 : : {
216 : 78 : return NULL;
217 : : }
218 : :
219 : : static inline struct gpio_desc *__must_check
220 : : gpiod_get_index_optional(struct device *dev, const char *con_id,
221 : : unsigned int index, enum gpiod_flags flags)
222 : : {
223 : : return NULL;
224 : : }
225 : :
226 : : static inline struct gpio_descs *__must_check
227 : : gpiod_get_array(struct device *dev, const char *con_id,
228 : : enum gpiod_flags flags)
229 : : {
230 : : return ERR_PTR(-ENOSYS);
231 : : }
232 : :
233 : : static inline struct gpio_descs *__must_check
234 : : gpiod_get_array_optional(struct device *dev, const char *con_id,
235 : : enum gpiod_flags flags)
236 : : {
237 : : return NULL;
238 : : }
239 : :
240 : 0 : static inline void gpiod_put(struct gpio_desc *desc)
241 : : {
242 : 0 : might_sleep();
243 : :
244 : : /* GPIO can never have been requested */
245 : 0 : WARN_ON(desc);
246 : : }
247 : :
248 : : static inline void devm_gpiod_unhinge(struct device *dev,
249 : : struct gpio_desc *desc)
250 : : {
251 : : might_sleep();
252 : :
253 : : /* GPIO can never have been requested */
254 : : WARN_ON(desc);
255 : : }
256 : :
257 : : static inline void gpiod_put_array(struct gpio_descs *descs)
258 : : {
259 : : might_sleep();
260 : :
261 : : /* GPIO can never have been requested */
262 : : WARN_ON(descs);
263 : : }
264 : :
265 : : static inline struct gpio_desc *__must_check
266 : 0 : devm_gpiod_get(struct device *dev,
267 : : const char *con_id,
268 : : enum gpiod_flags flags)
269 : : {
270 : 0 : return ERR_PTR(-ENOSYS);
271 : : }
272 : : static inline
273 : : struct gpio_desc *__must_check
274 : 0 : devm_gpiod_get_index(struct device *dev,
275 : : const char *con_id,
276 : : unsigned int idx,
277 : : enum gpiod_flags flags)
278 : : {
279 : 0 : return ERR_PTR(-ENOSYS);
280 : : }
281 : :
282 : : static inline struct gpio_desc *__must_check
283 : 0 : devm_gpiod_get_optional(struct device *dev, const char *con_id,
284 : : enum gpiod_flags flags)
285 : : {
286 [ # # ]: 0 : return NULL;
287 : : }
288 : :
289 : : static inline struct gpio_desc *__must_check
290 : : devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
291 : : unsigned int index, enum gpiod_flags flags)
292 : : {
293 : : return NULL;
294 : : }
295 : :
296 : : static inline struct gpio_descs *__must_check
297 : : devm_gpiod_get_array(struct device *dev, const char *con_id,
298 : : enum gpiod_flags flags)
299 : : {
300 : : return ERR_PTR(-ENOSYS);
301 : : }
302 : :
303 : : static inline struct gpio_descs *__must_check
304 : : devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
305 : : enum gpiod_flags flags)
306 : : {
307 : : return NULL;
308 : : }
309 : :
310 : : static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
311 : : {
312 : : might_sleep();
313 : :
314 : : /* GPIO can never have been requested */
315 : : WARN_ON(desc);
316 : : }
317 : :
318 : : static inline void devm_gpiod_put_array(struct device *dev,
319 : : struct gpio_descs *descs)
320 : : {
321 : : might_sleep();
322 : :
323 : : /* GPIO can never have been requested */
324 : : WARN_ON(descs);
325 : : }
326 : :
327 : :
328 : 0 : static inline int gpiod_get_direction(const struct gpio_desc *desc)
329 : : {
330 : : /* GPIO can never have been requested */
331 : 0 : WARN_ON(desc);
332 : : return -ENOSYS;
333 : : }
334 : : static inline int gpiod_direction_input(struct gpio_desc *desc)
335 : : {
336 : : /* GPIO can never have been requested */
337 : : WARN_ON(desc);
338 : : return -ENOSYS;
339 : : }
340 : : static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
341 : : {
342 : : /* GPIO can never have been requested */
343 : : WARN_ON(desc);
344 : : return -ENOSYS;
345 : : }
346 : : static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
347 : : {
348 : : /* GPIO can never have been requested */
349 : : WARN_ON(desc);
350 : : return -ENOSYS;
351 : : }
352 : :
353 : :
354 : : static inline int gpiod_get_value(const struct gpio_desc *desc)
355 : : {
356 : : /* GPIO can never have been requested */
357 : : WARN_ON(desc);
358 : : return 0;
359 : : }
360 : : static inline int gpiod_get_array_value(unsigned int array_size,
361 : : struct gpio_desc **desc_array,
362 : : struct gpio_array *array_info,
363 : : unsigned long *value_bitmap)
364 : : {
365 : : /* GPIO can never have been requested */
366 : : WARN_ON(desc_array);
367 : : return 0;
368 : : }
369 : 0 : static inline void gpiod_set_value(struct gpio_desc *desc, int value)
370 : : {
371 : : /* GPIO can never have been requested */
372 : 0 : WARN_ON(desc);
373 : : }
374 : : static inline int gpiod_set_array_value(unsigned int array_size,
375 : : struct gpio_desc **desc_array,
376 : : struct gpio_array *array_info,
377 : : unsigned long *value_bitmap)
378 : : {
379 : : /* GPIO can never have been requested */
380 : : WARN_ON(desc_array);
381 : : return 0;
382 : : }
383 : : static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
384 : : {
385 : : /* GPIO can never have been requested */
386 : : WARN_ON(desc);
387 : : return 0;
388 : : }
389 : : static inline int gpiod_get_raw_array_value(unsigned int array_size,
390 : : struct gpio_desc **desc_array,
391 : : struct gpio_array *array_info,
392 : : unsigned long *value_bitmap)
393 : : {
394 : : /* GPIO can never have been requested */
395 : : WARN_ON(desc_array);
396 : : return 0;
397 : : }
398 : : static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
399 : : {
400 : : /* GPIO can never have been requested */
401 : : WARN_ON(desc);
402 : : }
403 : : static inline int gpiod_set_raw_array_value(unsigned int array_size,
404 : : struct gpio_desc **desc_array,
405 : : struct gpio_array *array_info,
406 : : unsigned long *value_bitmap)
407 : : {
408 : : /* GPIO can never have been requested */
409 : : WARN_ON(desc_array);
410 : : return 0;
411 : : }
412 : :
413 : 0 : static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
414 : : {
415 : : /* GPIO can never have been requested */
416 [ # # # # ]: 0 : WARN_ON(desc);
417 : 0 : return 0;
418 : : }
419 : : static inline int gpiod_get_array_value_cansleep(unsigned int array_size,
420 : : struct gpio_desc **desc_array,
421 : : struct gpio_array *array_info,
422 : : unsigned long *value_bitmap)
423 : : {
424 : : /* GPIO can never have been requested */
425 : : WARN_ON(desc_array);
426 : : return 0;
427 : : }
428 : 0 : static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
429 : : {
430 : : /* GPIO can never have been requested */
431 [ # # # # ]: 0 : WARN_ON(desc);
432 : : }
433 : : static inline int gpiod_set_array_value_cansleep(unsigned int array_size,
434 : : struct gpio_desc **desc_array,
435 : : struct gpio_array *array_info,
436 : : unsigned long *value_bitmap)
437 : : {
438 : : /* GPIO can never have been requested */
439 : : WARN_ON(desc_array);
440 : : return 0;
441 : : }
442 : : static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
443 : : {
444 : : /* GPIO can never have been requested */
445 : : WARN_ON(desc);
446 : : return 0;
447 : : }
448 : : static inline int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
449 : : struct gpio_desc **desc_array,
450 : : struct gpio_array *array_info,
451 : : unsigned long *value_bitmap)
452 : : {
453 : : /* GPIO can never have been requested */
454 : : WARN_ON(desc_array);
455 : : return 0;
456 : : }
457 : : static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
458 : : int value)
459 : : {
460 : : /* GPIO can never have been requested */
461 : : WARN_ON(desc);
462 : : }
463 : : static inline int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
464 : : struct gpio_desc **desc_array,
465 : : struct gpio_array *array_info,
466 : : unsigned long *value_bitmap)
467 : : {
468 : : /* GPIO can never have been requested */
469 : : WARN_ON(desc_array);
470 : : return 0;
471 : : }
472 : :
473 : : static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
474 : : {
475 : : /* GPIO can never have been requested */
476 : : WARN_ON(desc);
477 : : return -ENOSYS;
478 : : }
479 : :
480 : : static inline int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
481 : : {
482 : : /* GPIO can never have been requested */
483 : : WARN_ON(desc);
484 : : return -ENOSYS;
485 : : }
486 : :
487 : : static inline void gpiod_toggle_active_low(struct gpio_desc *desc)
488 : : {
489 : : /* GPIO can never have been requested */
490 : : WARN_ON(desc);
491 : : }
492 : :
493 : : static inline int gpiod_is_active_low(const struct gpio_desc *desc)
494 : : {
495 : : /* GPIO can never have been requested */
496 : : WARN_ON(desc);
497 : : return 0;
498 : : }
499 : : static inline int gpiod_cansleep(const struct gpio_desc *desc)
500 : : {
501 : : /* GPIO can never have been requested */
502 : : WARN_ON(desc);
503 : : return 0;
504 : : }
505 : :
506 : : static inline int gpiod_to_irq(const struct gpio_desc *desc)
507 : : {
508 : : /* GPIO can never have been requested */
509 : : WARN_ON(desc);
510 : : return -EINVAL;
511 : : }
512 : :
513 : : static inline int gpiod_set_consumer_name(struct gpio_desc *desc,
514 : : const char *name)
515 : : {
516 : : /* GPIO can never have been requested */
517 : : WARN_ON(desc);
518 : : return -EINVAL;
519 : : }
520 : :
521 : : static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
522 : : {
523 : : return NULL;
524 : : }
525 : :
526 : : static inline int desc_to_gpio(const struct gpio_desc *desc)
527 : : {
528 : : /* GPIO can never have been requested */
529 : : WARN_ON(desc);
530 : : return -EINVAL;
531 : : }
532 : :
533 : : /* Child properties interface */
534 : : struct fwnode_handle;
535 : :
536 : : static inline
537 : : struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
538 : : const char *propname, int index,
539 : : enum gpiod_flags dflags,
540 : : const char *label)
541 : : {
542 : : return ERR_PTR(-ENOSYS);
543 : : }
544 : :
545 : : static inline
546 : : struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
547 : : const char *con_id, int index,
548 : : enum gpiod_flags flags,
549 : : const char *label)
550 : : {
551 : : return ERR_PTR(-ENOSYS);
552 : : }
553 : :
554 : : static inline
555 : : struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
556 : : struct fwnode_handle *fwnode,
557 : : const char *con_id, int index,
558 : : enum gpiod_flags flags,
559 : : const char *label)
560 : : {
561 : : return ERR_PTR(-ENOSYS);
562 : : }
563 : :
564 : : #endif /* CONFIG_GPIOLIB */
565 : :
566 : : static inline
567 : : struct gpio_desc *devm_fwnode_gpiod_get(struct device *dev,
568 : : struct fwnode_handle *fwnode,
569 : : const char *con_id,
570 : : enum gpiod_flags flags,
571 : : const char *label)
572 : : {
573 : : return devm_fwnode_gpiod_get_index(dev, fwnode, con_id, 0,
574 : : flags, label);
575 : : }
576 : :
577 : : static inline
578 : : struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
579 : : const char *con_id, int index,
580 : : struct fwnode_handle *child,
581 : : enum gpiod_flags flags,
582 : : const char *label)
583 : : {
584 : : return devm_fwnode_gpiod_get_index(dev, child, con_id, index,
585 : : flags, label);
586 : : }
587 : :
588 : : static inline
589 : : struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev,
590 : : const char *con_id,
591 : : struct fwnode_handle *child,
592 : : enum gpiod_flags flags,
593 : : const char *label)
594 : : {
595 : : return devm_fwnode_gpiod_get_index(dev, child, con_id, 0, flags, label);
596 : : }
597 : :
598 : : #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_OF_GPIO)
599 : : struct device_node;
600 : :
601 : : struct gpio_desc *gpiod_get_from_of_node(struct device_node *node,
602 : : const char *propname, int index,
603 : : enum gpiod_flags dflags,
604 : : const char *label);
605 : :
606 : : #else /* CONFIG_GPIOLIB && CONFIG_OF_GPIO */
607 : :
608 : : struct device_node;
609 : :
610 : : static inline
611 : : struct gpio_desc *gpiod_get_from_of_node(struct device_node *node,
612 : : const char *propname, int index,
613 : : enum gpiod_flags dflags,
614 : : const char *label)
615 : : {
616 : : return ERR_PTR(-ENOSYS);
617 : : }
618 : :
619 : : #endif /* CONFIG_GPIOLIB && CONFIG_OF_GPIO */
620 : :
621 : : #ifdef CONFIG_GPIOLIB
622 : : struct device_node;
623 : :
624 : : struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev,
625 : : struct device_node *node,
626 : : const char *propname, int index,
627 : : enum gpiod_flags dflags,
628 : : const char *label);
629 : :
630 : : #else /* CONFIG_GPIOLIB */
631 : :
632 : : struct device_node;
633 : :
634 : : static inline
635 : : struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev,
636 : : struct device_node *node,
637 : : const char *propname, int index,
638 : : enum gpiod_flags dflags,
639 : : const char *label)
640 : : {
641 : : return ERR_PTR(-ENOSYS);
642 : : }
643 : :
644 : : #endif /* CONFIG_GPIOLIB */
645 : :
646 : : struct acpi_gpio_params {
647 : : unsigned int crs_entry_index;
648 : : unsigned int line_index;
649 : : bool active_low;
650 : : };
651 : :
652 : : struct acpi_gpio_mapping {
653 : : const char *name;
654 : : const struct acpi_gpio_params *data;
655 : : unsigned int size;
656 : :
657 : : /* Ignore IoRestriction field */
658 : : #define ACPI_GPIO_QUIRK_NO_IO_RESTRICTION BIT(0)
659 : : /*
660 : : * When ACPI GPIO mapping table is in use the index parameter inside it
661 : : * refers to the GPIO resource in _CRS method. That index has no
662 : : * distinction of actual type of the resource. When consumer wants to
663 : : * get GpioIo type explicitly, this quirk may be used.
664 : : */
665 : : #define ACPI_GPIO_QUIRK_ONLY_GPIOIO BIT(1)
666 : :
667 : : unsigned int quirks;
668 : : };
669 : :
670 : : #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_ACPI)
671 : :
672 : : struct acpi_device;
673 : :
674 : : int acpi_dev_add_driver_gpios(struct acpi_device *adev,
675 : : const struct acpi_gpio_mapping *gpios);
676 : : void acpi_dev_remove_driver_gpios(struct acpi_device *adev);
677 : :
678 : : int devm_acpi_dev_add_driver_gpios(struct device *dev,
679 : : const struct acpi_gpio_mapping *gpios);
680 : : void devm_acpi_dev_remove_driver_gpios(struct device *dev);
681 : :
682 : : #else /* CONFIG_GPIOLIB && CONFIG_ACPI */
683 : :
684 : : struct acpi_device;
685 : :
686 : : static inline int acpi_dev_add_driver_gpios(struct acpi_device *adev,
687 : : const struct acpi_gpio_mapping *gpios)
688 : : {
689 : : return -ENXIO;
690 : : }
691 : : static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) {}
692 : :
693 : : static inline int devm_acpi_dev_add_driver_gpios(struct device *dev,
694 : : const struct acpi_gpio_mapping *gpios)
695 : : {
696 : : return -ENXIO;
697 : : }
698 : : static inline void devm_acpi_dev_remove_driver_gpios(struct device *dev) {}
699 : :
700 : : #endif /* CONFIG_GPIOLIB && CONFIG_ACPI */
701 : :
702 : :
703 : : #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
704 : :
705 : : int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
706 : : int gpiod_export_link(struct device *dev, const char *name,
707 : : struct gpio_desc *desc);
708 : : void gpiod_unexport(struct gpio_desc *desc);
709 : :
710 : : #else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
711 : :
712 : : static inline int gpiod_export(struct gpio_desc *desc,
713 : : bool direction_may_change)
714 : : {
715 : : return -ENOSYS;
716 : : }
717 : :
718 : : static inline int gpiod_export_link(struct device *dev, const char *name,
719 : : struct gpio_desc *desc)
720 : : {
721 : : return -ENOSYS;
722 : : }
723 : :
724 : : static inline void gpiod_unexport(struct gpio_desc *desc)
725 : : {
726 : : }
727 : :
728 : : #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
729 : :
730 : : #endif
|