Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * ACPI helpers for GPIO API
0004  *
0005  * Copyright (C) 2012,2019 Intel Corporation
0006  */
0007 
0008 #ifndef GPIOLIB_ACPI_H
0009 #define GPIOLIB_ACPI_H
0010 
0011 struct acpi_device;
0012 
0013 /**
0014  * struct acpi_gpio_info - ACPI GPIO specific information
0015  * @adev: reference to ACPI device which consumes GPIO resource
0016  * @flags: GPIO initialization flags
0017  * @gpioint: if %true this GPIO is of type GpioInt otherwise type is GpioIo
0018  * @pin_config: pin bias as provided by ACPI
0019  * @polarity: interrupt polarity as provided by ACPI
0020  * @triggering: triggering type as provided by ACPI
0021  * @debounce: debounce timeout as provided by ACPI
0022  * @quirks: Linux specific quirks as provided by struct acpi_gpio_mapping
0023  */
0024 struct acpi_gpio_info {
0025     struct acpi_device *adev;
0026     enum gpiod_flags flags;
0027     bool gpioint;
0028     int pin_config;
0029     int polarity;
0030     int triggering;
0031     unsigned int debounce;
0032     unsigned int quirks;
0033 };
0034 
0035 #ifdef CONFIG_ACPI
0036 void acpi_gpiochip_add(struct gpio_chip *chip);
0037 void acpi_gpiochip_remove(struct gpio_chip *chip);
0038 
0039 void acpi_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev);
0040 
0041 void acpi_gpiochip_request_interrupts(struct gpio_chip *chip);
0042 void acpi_gpiochip_free_interrupts(struct gpio_chip *chip);
0043 
0044 int acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags,
0045                  struct acpi_gpio_info *info);
0046 int acpi_gpio_update_gpiod_lookup_flags(unsigned long *lookupflags,
0047                     struct acpi_gpio_info *info);
0048 
0049 struct gpio_desc *acpi_find_gpio(struct device *dev,
0050                  const char *con_id,
0051                  unsigned int idx,
0052                  enum gpiod_flags *dflags,
0053                  unsigned long *lookupflags);
0054 struct gpio_desc *acpi_node_get_gpiod(struct fwnode_handle *fwnode,
0055                       const char *propname, int index,
0056                       struct acpi_gpio_info *info);
0057 
0058 int acpi_gpio_count(struct device *dev, const char *con_id);
0059 #else
0060 static inline void acpi_gpiochip_add(struct gpio_chip *chip) { }
0061 static inline void acpi_gpiochip_remove(struct gpio_chip *chip) { }
0062 
0063 static inline void acpi_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev) { }
0064 
0065 static inline void
0066 acpi_gpiochip_request_interrupts(struct gpio_chip *chip) { }
0067 
0068 static inline void
0069 acpi_gpiochip_free_interrupts(struct gpio_chip *chip) { }
0070 
0071 static inline int
0072 acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags, struct acpi_gpio_info *info)
0073 {
0074     return 0;
0075 }
0076 static inline int
0077 acpi_gpio_update_gpiod_lookup_flags(unsigned long *lookupflags,
0078                     struct acpi_gpio_info *info)
0079 {
0080     return 0;
0081 }
0082 
0083 static inline struct gpio_desc *
0084 acpi_find_gpio(struct device *dev, const char *con_id,
0085            unsigned int idx, enum gpiod_flags *dflags,
0086            unsigned long *lookupflags)
0087 {
0088     return ERR_PTR(-ENOENT);
0089 }
0090 static inline struct gpio_desc *
0091 acpi_node_get_gpiod(struct fwnode_handle *fwnode, const char *propname,
0092             int index, struct acpi_gpio_info *info)
0093 {
0094     return ERR_PTR(-ENXIO);
0095 }
0096 static inline int acpi_gpio_count(struct device *dev, const char *con_id)
0097 {
0098     return -ENODEV;
0099 }
0100 #endif
0101 
0102 #endif /* GPIOLIB_ACPI_H */