gpiolib-acpi.h 3.0 KB

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