Andy Shevchenko | 77cb907 | 2019-07-30 13:43:36 +0300 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
| 2 | /* |
| 3 | * ACPI helpers for GPIO API |
| 4 | * |
| 5 | * Copyright (C) 2012,2019 Intel Corporation |
| 6 | */ |
| 7 | |
| 8 | #ifndef GPIOLIB_ACPI_H |
| 9 | #define GPIOLIB_ACPI_H |
| 10 | |
| 11 | struct acpi_device; |
| 12 | |
| 13 | /** |
| 14 | * struct acpi_gpio_info - ACPI GPIO specific information |
| 15 | * @adev: reference to ACPI device which consumes GPIO resource |
| 16 | * @flags: GPIO initialization flags |
| 17 | * @gpioint: if %true this GPIO is of type GpioInt otherwise type is GpioIo |
| 18 | * @pin_config: pin bias as provided by ACPI |
| 19 | * @polarity: interrupt polarity as provided by ACPI |
| 20 | * @triggering: triggering type as provided by ACPI |
Andy Shevchenko | 8dcb7a1 | 2020-11-09 22:53:26 +0200 | [diff] [blame] | 21 | * @debounce: debounce timeout as provided by ACPI |
Andy Shevchenko | 77cb907 | 2019-07-30 13:43:36 +0300 | [diff] [blame] | 22 | * @quirks: Linux specific quirks as provided by struct acpi_gpio_mapping |
| 23 | */ |
| 24 | struct acpi_gpio_info { |
| 25 | struct acpi_device *adev; |
| 26 | enum gpiod_flags flags; |
| 27 | bool gpioint; |
| 28 | int pin_config; |
| 29 | int polarity; |
| 30 | int triggering; |
Andy Shevchenko | 8dcb7a1 | 2020-11-09 22:53:26 +0200 | [diff] [blame] | 31 | unsigned int debounce; |
Andy Shevchenko | 77cb907 | 2019-07-30 13:43:36 +0300 | [diff] [blame] | 32 | unsigned int quirks; |
| 33 | }; |
| 34 | |
| 35 | #ifdef CONFIG_ACPI |
| 36 | void acpi_gpiochip_add(struct gpio_chip *chip); |
| 37 | void acpi_gpiochip_remove(struct gpio_chip *chip); |
| 38 | |
Andy Shevchenko | 515321a | 2021-03-09 11:37:34 +0200 | [diff] [blame] | 39 | void acpi_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev); |
| 40 | |
Andy Shevchenko | 77cb907 | 2019-07-30 13:43:36 +0300 | [diff] [blame] | 41 | void acpi_gpiochip_request_interrupts(struct gpio_chip *chip); |
| 42 | void acpi_gpiochip_free_interrupts(struct gpio_chip *chip); |
| 43 | |
| 44 | int acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags, |
| 45 | struct acpi_gpio_info *info); |
| 46 | int acpi_gpio_update_gpiod_lookup_flags(unsigned long *lookupflags, |
| 47 | struct acpi_gpio_info *info); |
| 48 | |
| 49 | struct gpio_desc *acpi_find_gpio(struct device *dev, |
| 50 | const char *con_id, |
| 51 | unsigned int idx, |
| 52 | enum gpiod_flags *dflags, |
| 53 | unsigned long *lookupflags); |
| 54 | struct gpio_desc *acpi_node_get_gpiod(struct fwnode_handle *fwnode, |
| 55 | const char *propname, int index, |
| 56 | struct acpi_gpio_info *info); |
| 57 | |
| 58 | int acpi_gpio_count(struct device *dev, const char *con_id); |
Andy Shevchenko | 77cb907 | 2019-07-30 13:43:36 +0300 | [diff] [blame] | 59 | #else |
| 60 | static inline void acpi_gpiochip_add(struct gpio_chip *chip) { } |
| 61 | static inline void acpi_gpiochip_remove(struct gpio_chip *chip) { } |
| 62 | |
Andy Shevchenko | 515321a | 2021-03-09 11:37:34 +0200 | [diff] [blame] | 63 | static inline void acpi_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev) { } |
| 64 | |
Andy Shevchenko | 77cb907 | 2019-07-30 13:43:36 +0300 | [diff] [blame] | 65 | static inline void |
| 66 | acpi_gpiochip_request_interrupts(struct gpio_chip *chip) { } |
| 67 | |
| 68 | static inline void |
| 69 | acpi_gpiochip_free_interrupts(struct gpio_chip *chip) { } |
| 70 | |
| 71 | static inline int |
| 72 | acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags, struct acpi_gpio_info *info) |
| 73 | { |
| 74 | return 0; |
| 75 | } |
| 76 | static inline int |
| 77 | acpi_gpio_update_gpiod_lookup_flags(unsigned long *lookupflags, |
| 78 | struct acpi_gpio_info *info) |
| 79 | { |
| 80 | return 0; |
| 81 | } |
| 82 | |
| 83 | static inline struct gpio_desc * |
| 84 | acpi_find_gpio(struct device *dev, const char *con_id, |
| 85 | unsigned int idx, enum gpiod_flags *dflags, |
| 86 | unsigned long *lookupflags) |
| 87 | { |
| 88 | return ERR_PTR(-ENOENT); |
| 89 | } |
| 90 | static inline struct gpio_desc * |
| 91 | acpi_node_get_gpiod(struct fwnode_handle *fwnode, const char *propname, |
| 92 | int index, struct acpi_gpio_info *info) |
| 93 | { |
| 94 | return ERR_PTR(-ENXIO); |
| 95 | } |
| 96 | static inline int acpi_gpio_count(struct device *dev, const char *con_id) |
| 97 | { |
| 98 | return -ENODEV; |
| 99 | } |
Andy Shevchenko | 77cb907 | 2019-07-30 13:43:36 +0300 | [diff] [blame] | 100 | #endif |
| 101 | |
| 102 | #endif /* GPIOLIB_ACPI_H */ |