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/bits.h>
6 : #include <linux/types.h>
7 :
8 : struct acpi_device;
9 : struct device;
10 : struct fwnode_handle;
11 :
12 : struct gpio_array;
13 : struct gpio_desc;
14 :
15 : /**
16 : * struct gpio_descs - Struct containing an array of descriptors that can be
17 : * obtained using gpiod_get_array()
18 : *
19 : * @info: Pointer to the opaque gpio_array structure
20 : * @ndescs: Number of held descriptors
21 : * @desc: Array of pointers to GPIO descriptors
22 : */
23 : struct gpio_descs {
24 : struct gpio_array *info;
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 : #define GPIOD_FLAGS_BIT_NONEXCLUSIVE BIT(4)
34 :
35 : /**
36 : * enum gpiod_flags - Optional flags that can be passed to one of gpiod_* to
37 : * configure direction and output value. These values
38 : * cannot be OR'd.
39 : *
40 : * @GPIOD_ASIS: Don't change anything
41 : * @GPIOD_IN: Set lines to input mode
42 : * @GPIOD_OUT_LOW: Set lines to output and drive them low
43 : * @GPIOD_OUT_HIGH: Set lines to output and drive them high
44 : * @GPIOD_OUT_LOW_OPEN_DRAIN: Set lines to open-drain output and drive them low
45 : * @GPIOD_OUT_HIGH_OPEN_DRAIN: Set lines to open-drain output and drive them high
46 : */
47 : enum gpiod_flags {
48 : GPIOD_ASIS = 0,
49 : GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET,
50 : GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT,
51 : GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
52 : GPIOD_FLAGS_BIT_DIR_VAL,
53 : GPIOD_OUT_LOW_OPEN_DRAIN = GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_OPEN_DRAIN,
54 : GPIOD_OUT_HIGH_OPEN_DRAIN = GPIOD_OUT_HIGH | GPIOD_FLAGS_BIT_OPEN_DRAIN,
55 : };
56 :
57 : #ifdef CONFIG_GPIOLIB
58 :
59 : /* Return the number of GPIOs associated with a device / function */
60 : int gpiod_count(struct device *dev, const char *con_id);
61 :
62 : /* Acquire and dispose GPIOs */
63 : struct gpio_desc *__must_check gpiod_get(struct device *dev,
64 : const char *con_id,
65 : enum gpiod_flags flags);
66 : struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
67 : const char *con_id,
68 : unsigned int idx,
69 : enum gpiod_flags flags);
70 : struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
71 : const char *con_id,
72 : enum gpiod_flags flags);
73 : struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
74 : const char *con_id,
75 : unsigned int index,
76 : enum gpiod_flags flags);
77 : struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
78 : const char *con_id,
79 : enum gpiod_flags flags);
80 : struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
81 : const char *con_id,
82 : enum gpiod_flags flags);
83 : void gpiod_put(struct gpio_desc *desc);
84 : void gpiod_put_array(struct gpio_descs *descs);
85 :
86 : struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
87 : const char *con_id,
88 : enum gpiod_flags flags);
89 : struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
90 : const char *con_id,
91 : unsigned int idx,
92 : enum gpiod_flags flags);
93 : struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
94 : const char *con_id,
95 : enum gpiod_flags flags);
96 : struct gpio_desc *__must_check
97 : devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
98 : unsigned int index, enum gpiod_flags flags);
99 : struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
100 : const char *con_id,
101 : enum gpiod_flags flags);
102 : struct gpio_descs *__must_check
103 : devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
104 : enum gpiod_flags flags);
105 : void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
106 : void devm_gpiod_unhinge(struct device *dev, struct gpio_desc *desc);
107 : void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs);
108 :
109 : int gpiod_get_direction(struct gpio_desc *desc);
110 : int gpiod_direction_input(struct gpio_desc *desc);
111 : int gpiod_direction_output(struct gpio_desc *desc, int value);
112 : int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
113 : int gpiod_enable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags);
114 : int gpiod_disable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags);
115 :
116 : /* Value get/set from non-sleeping context */
117 : int gpiod_get_value(const struct gpio_desc *desc);
118 : int gpiod_get_array_value(unsigned int array_size,
119 : struct gpio_desc **desc_array,
120 : struct gpio_array *array_info,
121 : unsigned long *value_bitmap);
122 : void gpiod_set_value(struct gpio_desc *desc, int value);
123 : int gpiod_set_array_value(unsigned int array_size,
124 : struct gpio_desc **desc_array,
125 : struct gpio_array *array_info,
126 : unsigned long *value_bitmap);
127 : int gpiod_get_raw_value(const struct gpio_desc *desc);
128 : int gpiod_get_raw_array_value(unsigned int array_size,
129 : struct gpio_desc **desc_array,
130 : struct gpio_array *array_info,
131 : unsigned long *value_bitmap);
132 : void gpiod_set_raw_value(struct gpio_desc *desc, int value);
133 : int gpiod_set_raw_array_value(unsigned int array_size,
134 : struct gpio_desc **desc_array,
135 : struct gpio_array *array_info,
136 : unsigned long *value_bitmap);
137 :
138 : /* Value get/set from sleeping context */
139 : int gpiod_get_value_cansleep(const struct gpio_desc *desc);
140 : int gpiod_get_array_value_cansleep(unsigned int array_size,
141 : struct gpio_desc **desc_array,
142 : struct gpio_array *array_info,
143 : unsigned long *value_bitmap);
144 : void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
145 : int gpiod_set_array_value_cansleep(unsigned int array_size,
146 : struct gpio_desc **desc_array,
147 : struct gpio_array *array_info,
148 : unsigned long *value_bitmap);
149 : int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
150 : int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
151 : struct gpio_desc **desc_array,
152 : struct gpio_array *array_info,
153 : unsigned long *value_bitmap);
154 : void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
155 : int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
156 : struct gpio_desc **desc_array,
157 : struct gpio_array *array_info,
158 : unsigned long *value_bitmap);
159 :
160 : int gpiod_set_config(struct gpio_desc *desc, unsigned long config);
161 : int gpiod_set_debounce(struct gpio_desc *desc, unsigned int debounce);
162 : int gpiod_set_transitory(struct gpio_desc *desc, bool transitory);
163 : void gpiod_toggle_active_low(struct gpio_desc *desc);
164 :
165 : int gpiod_is_active_low(const struct gpio_desc *desc);
166 : int gpiod_cansleep(const struct gpio_desc *desc);
167 :
168 : int gpiod_to_irq(const struct gpio_desc *desc);
169 : int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name);
170 :
171 : /* Convert between the old gpio_ and new gpiod_ interfaces */
172 : struct gpio_desc *gpio_to_desc(unsigned gpio);
173 : int desc_to_gpio(const struct gpio_desc *desc);
174 :
175 : struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
176 : const char *con_id, int index,
177 : enum gpiod_flags flags,
178 : const char *label);
179 : struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
180 : struct fwnode_handle *child,
181 : const char *con_id, int index,
182 : enum gpiod_flags flags,
183 : const char *label);
184 :
185 : #else /* CONFIG_GPIOLIB */
186 :
187 : #include <linux/err.h>
188 : #include <linux/kernel.h>
189 :
190 : #include <asm/bug.h>
191 :
192 : static inline int gpiod_count(struct device *dev, const char *con_id)
193 : {
194 : return 0;
195 : }
196 :
197 : static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
198 : const char *con_id,
199 : enum gpiod_flags flags)
200 : {
201 : 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 : gpiod_get_optional(struct device *dev, const char *con_id,
214 : enum gpiod_flags flags)
215 : {
216 : 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 : static inline void gpiod_put(struct gpio_desc *desc)
241 : {
242 : might_sleep();
243 :
244 : /* GPIO can never have been requested */
245 : 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 : 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 : devm_gpiod_get_index(struct device *dev,
275 : const char *con_id,
276 : unsigned int idx,
277 : enum gpiod_flags flags)
278 : {
279 : return ERR_PTR(-ENOSYS);
280 : }
281 :
282 : static inline struct gpio_desc *__must_check
283 : devm_gpiod_get_optional(struct device *dev, const char *con_id,
284 : enum gpiod_flags flags)
285 : {
286 : 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 : 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 0 : 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 : static inline int gpiod_enable_hw_timestamp_ns(struct gpio_desc *desc,
353 : unsigned long flags)
354 : {
355 : WARN_ON(desc);
356 : return -ENOSYS;
357 : }
358 : static inline int gpiod_disable_hw_timestamp_ns(struct gpio_desc *desc,
359 : unsigned long flags)
360 : {
361 : WARN_ON(desc);
362 : return -ENOSYS;
363 : }
364 : static inline int gpiod_get_value(const struct gpio_desc *desc)
365 : {
366 : /* GPIO can never have been requested */
367 : WARN_ON(desc);
368 : return 0;
369 : }
370 : static inline int gpiod_get_array_value(unsigned int array_size,
371 : struct gpio_desc **desc_array,
372 : struct gpio_array *array_info,
373 : unsigned long *value_bitmap)
374 : {
375 : /* GPIO can never have been requested */
376 : WARN_ON(desc_array);
377 : return 0;
378 : }
379 : static inline void gpiod_set_value(struct gpio_desc *desc, int value)
380 : {
381 : /* GPIO can never have been requested */
382 : WARN_ON(desc);
383 : }
384 : static inline int gpiod_set_array_value(unsigned int array_size,
385 : struct gpio_desc **desc_array,
386 : struct gpio_array *array_info,
387 : unsigned long *value_bitmap)
388 : {
389 : /* GPIO can never have been requested */
390 : WARN_ON(desc_array);
391 : return 0;
392 : }
393 : static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
394 : {
395 : /* GPIO can never have been requested */
396 : WARN_ON(desc);
397 : return 0;
398 : }
399 : static inline int gpiod_get_raw_array_value(unsigned int array_size,
400 : struct gpio_desc **desc_array,
401 : struct gpio_array *array_info,
402 : unsigned long *value_bitmap)
403 : {
404 : /* GPIO can never have been requested */
405 : WARN_ON(desc_array);
406 : return 0;
407 : }
408 : static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
409 : {
410 : /* GPIO can never have been requested */
411 : WARN_ON(desc);
412 : }
413 : static inline int gpiod_set_raw_array_value(unsigned int array_size,
414 : struct gpio_desc **desc_array,
415 : struct gpio_array *array_info,
416 : unsigned long *value_bitmap)
417 : {
418 : /* GPIO can never have been requested */
419 : WARN_ON(desc_array);
420 : return 0;
421 : }
422 :
423 : static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
424 : {
425 : /* GPIO can never have been requested */
426 0 : WARN_ON(desc);
427 : return 0;
428 : }
429 : static inline int gpiod_get_array_value_cansleep(unsigned int array_size,
430 : struct gpio_desc **desc_array,
431 : struct gpio_array *array_info,
432 : unsigned long *value_bitmap)
433 : {
434 : /* GPIO can never have been requested */
435 : WARN_ON(desc_array);
436 : return 0;
437 : }
438 : static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
439 : {
440 : /* GPIO can never have been requested */
441 0 : WARN_ON(desc);
442 : }
443 : static inline int gpiod_set_array_value_cansleep(unsigned int array_size,
444 : struct gpio_desc **desc_array,
445 : struct gpio_array *array_info,
446 : unsigned long *value_bitmap)
447 : {
448 : /* GPIO can never have been requested */
449 : WARN_ON(desc_array);
450 : return 0;
451 : }
452 : static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
453 : {
454 : /* GPIO can never have been requested */
455 : WARN_ON(desc);
456 : return 0;
457 : }
458 : static inline int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
459 : struct gpio_desc **desc_array,
460 : struct gpio_array *array_info,
461 : unsigned long *value_bitmap)
462 : {
463 : /* GPIO can never have been requested */
464 : WARN_ON(desc_array);
465 : return 0;
466 : }
467 : static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
468 : int value)
469 : {
470 : /* GPIO can never have been requested */
471 : WARN_ON(desc);
472 : }
473 : static inline int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
474 : struct gpio_desc **desc_array,
475 : struct gpio_array *array_info,
476 : unsigned long *value_bitmap)
477 : {
478 : /* GPIO can never have been requested */
479 : WARN_ON(desc_array);
480 : return 0;
481 : }
482 :
483 : static inline int gpiod_set_config(struct gpio_desc *desc, unsigned long config)
484 : {
485 : /* GPIO can never have been requested */
486 : WARN_ON(desc);
487 : return -ENOSYS;
488 : }
489 :
490 : static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned int debounce)
491 : {
492 : /* GPIO can never have been requested */
493 : WARN_ON(desc);
494 : return -ENOSYS;
495 : }
496 :
497 : static inline int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
498 : {
499 : /* GPIO can never have been requested */
500 : WARN_ON(desc);
501 : return -ENOSYS;
502 : }
503 :
504 : static inline void gpiod_toggle_active_low(struct gpio_desc *desc)
505 : {
506 : /* GPIO can never have been requested */
507 : WARN_ON(desc);
508 : }
509 :
510 : static inline int gpiod_is_active_low(const struct gpio_desc *desc)
511 : {
512 : /* GPIO can never have been requested */
513 : WARN_ON(desc);
514 : return 0;
515 : }
516 : static inline int gpiod_cansleep(const struct gpio_desc *desc)
517 : {
518 : /* GPIO can never have been requested */
519 : WARN_ON(desc);
520 : return 0;
521 : }
522 :
523 : static inline int gpiod_to_irq(const struct gpio_desc *desc)
524 : {
525 : /* GPIO can never have been requested */
526 : WARN_ON(desc);
527 : return -EINVAL;
528 : }
529 :
530 : static inline int gpiod_set_consumer_name(struct gpio_desc *desc,
531 : const char *name)
532 : {
533 : /* GPIO can never have been requested */
534 : WARN_ON(desc);
535 : return -EINVAL;
536 : }
537 :
538 : static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
539 : {
540 : return NULL;
541 : }
542 :
543 : static inline int desc_to_gpio(const struct gpio_desc *desc)
544 : {
545 : /* GPIO can never have been requested */
546 : WARN_ON(desc);
547 : return -EINVAL;
548 : }
549 :
550 : static inline
551 : struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
552 : const char *con_id, int index,
553 : enum gpiod_flags flags,
554 : const char *label)
555 : {
556 : return ERR_PTR(-ENOSYS);
557 : }
558 :
559 : static inline
560 : struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
561 : struct fwnode_handle *fwnode,
562 : const char *con_id, int index,
563 : enum gpiod_flags flags,
564 : const char *label)
565 : {
566 : return ERR_PTR(-ENOSYS);
567 : }
568 :
569 : #endif /* CONFIG_GPIOLIB */
570 :
571 : static inline
572 : struct gpio_desc *devm_fwnode_gpiod_get(struct device *dev,
573 : struct fwnode_handle *fwnode,
574 : const char *con_id,
575 : enum gpiod_flags flags,
576 : const char *label)
577 : {
578 : return devm_fwnode_gpiod_get_index(dev, fwnode, con_id, 0,
579 : flags, label);
580 : }
581 :
582 : struct acpi_gpio_params {
583 : unsigned int crs_entry_index;
584 : unsigned int line_index;
585 : bool active_low;
586 : };
587 :
588 : struct acpi_gpio_mapping {
589 : const char *name;
590 : const struct acpi_gpio_params *data;
591 : unsigned int size;
592 :
593 : /* Ignore IoRestriction field */
594 : #define ACPI_GPIO_QUIRK_NO_IO_RESTRICTION BIT(0)
595 : /*
596 : * When ACPI GPIO mapping table is in use the index parameter inside it
597 : * refers to the GPIO resource in _CRS method. That index has no
598 : * distinction of actual type of the resource. When consumer wants to
599 : * get GpioIo type explicitly, this quirk may be used.
600 : */
601 : #define ACPI_GPIO_QUIRK_ONLY_GPIOIO BIT(1)
602 : /* Use given pin as an absolute GPIO number in the system */
603 : #define ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER BIT(2)
604 :
605 : unsigned int quirks;
606 : };
607 :
608 : #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_ACPI)
609 :
610 : int acpi_dev_add_driver_gpios(struct acpi_device *adev,
611 : const struct acpi_gpio_mapping *gpios);
612 : void acpi_dev_remove_driver_gpios(struct acpi_device *adev);
613 :
614 : int devm_acpi_dev_add_driver_gpios(struct device *dev,
615 : const struct acpi_gpio_mapping *gpios);
616 :
617 : struct gpio_desc *acpi_get_and_request_gpiod(char *path, unsigned int pin, char *label);
618 :
619 : #else /* CONFIG_GPIOLIB && CONFIG_ACPI */
620 :
621 : #include <linux/err.h>
622 :
623 : static inline int acpi_dev_add_driver_gpios(struct acpi_device *adev,
624 : const struct acpi_gpio_mapping *gpios)
625 : {
626 : return -ENXIO;
627 : }
628 : static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) {}
629 :
630 : static inline int devm_acpi_dev_add_driver_gpios(struct device *dev,
631 : const struct acpi_gpio_mapping *gpios)
632 : {
633 : return -ENXIO;
634 : }
635 :
636 : static inline struct gpio_desc *acpi_get_and_request_gpiod(char *path, unsigned int pin,
637 : char *label)
638 : {
639 : return ERR_PTR(-ENOSYS);
640 : }
641 :
642 : #endif /* CONFIG_GPIOLIB && CONFIG_ACPI */
643 :
644 :
645 : #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
646 :
647 : int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
648 : int gpiod_export_link(struct device *dev, const char *name,
649 : struct gpio_desc *desc);
650 : void gpiod_unexport(struct gpio_desc *desc);
651 :
652 : #else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
653 :
654 : #include <asm/errno.h>
655 :
656 : static inline int gpiod_export(struct gpio_desc *desc,
657 : bool direction_may_change)
658 : {
659 : return -ENOSYS;
660 : }
661 :
662 : static inline int gpiod_export_link(struct device *dev, const char *name,
663 : struct gpio_desc *desc)
664 : {
665 : return -ENOSYS;
666 : }
667 :
668 : static inline void gpiod_unexport(struct gpio_desc *desc)
669 : {
670 : }
671 :
672 : #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
673 :
674 : #endif
|