diff options
Diffstat (limited to 'include/linux/gpio/consumer.h')
| -rw-r--r-- | include/linux/gpio/consumer.h | 135 | 
1 files changed, 105 insertions, 30 deletions
diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h index a7f08fb0f865..b70af921c614 100644 --- a/include/linux/gpio/consumer.h +++ b/include/linux/gpio/consumer.h @@ -170,18 +170,8 @@ struct gpio_desc *gpio_to_desc(unsigned gpio);  int desc_to_gpio(const struct gpio_desc *desc);  /* Child properties interface */ -struct device_node;  struct fwnode_handle; -struct gpio_desc *gpiod_get_from_of_node(struct device_node *node, -					 const char *propname, int index, -					 enum gpiod_flags dflags, -					 const char *label); -struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev, -					      struct device_node *node, -					      const char *propname, int index, -					      enum gpiod_flags dflags, -					      const char *label);  struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,  					 const char *propname, int index,  					 enum gpiod_flags dflags, @@ -530,29 +520,9 @@ static inline int desc_to_gpio(const struct gpio_desc *desc)  }  /* Child properties interface */ -struct device_node;  struct fwnode_handle;  static inline -struct gpio_desc *gpiod_get_from_of_node(struct device_node *node, -					 const char *propname, int index, -					 enum gpiod_flags dflags, -					 const char *label) -{ -	return ERR_PTR(-ENOSYS); -} - -static inline -struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev, -					      struct device_node *node, -					      const char *propname, int index, -					      enum gpiod_flags dflags, -					      const char *label) -{ -	return ERR_PTR(-ENOSYS); -} - -static inline  struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,  					 const char *propname, int index,  					 enum gpiod_flags dflags, @@ -584,6 +554,111 @@ struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev,  						      flags, label);  } +#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_OF_GPIO) +struct device_node; + +struct gpio_desc *gpiod_get_from_of_node(struct device_node *node, +					 const char *propname, int index, +					 enum gpiod_flags dflags, +					 const char *label); + +#else  /* CONFIG_GPIOLIB && CONFIG_OF_GPIO */ + +struct device_node; + +static inline +struct gpio_desc *gpiod_get_from_of_node(struct device_node *node, +					 const char *propname, int index, +					 enum gpiod_flags dflags, +					 const char *label) +{ +	return ERR_PTR(-ENOSYS); +} + +#endif /* CONFIG_GPIOLIB && CONFIG_OF_GPIO */ + +#ifdef CONFIG_GPIOLIB +struct device_node; + +struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev, +					      struct device_node *node, +					      const char *propname, int index, +					      enum gpiod_flags dflags, +					      const char *label); + +#else  /* CONFIG_GPIOLIB */ + +struct device_node; + +static inline +struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev, +					      struct device_node *node, +					      const char *propname, int index, +					      enum gpiod_flags dflags, +					      const char *label) +{ +	return ERR_PTR(-ENOSYS); +} + +#endif /* CONFIG_GPIOLIB */ + +struct acpi_gpio_params { +	unsigned int crs_entry_index; +	unsigned int line_index; +	bool active_low; +}; + +struct acpi_gpio_mapping { +	const char *name; +	const struct acpi_gpio_params *data; +	unsigned int size; + +/* Ignore IoRestriction field */ +#define ACPI_GPIO_QUIRK_NO_IO_RESTRICTION	BIT(0) +/* + * When ACPI GPIO mapping table is in use the index parameter inside it + * refers to the GPIO resource in _CRS method. That index has no + * distinction of actual type of the resource. When consumer wants to + * get GpioIo type explicitly, this quirk may be used. + */ +#define ACPI_GPIO_QUIRK_ONLY_GPIOIO		BIT(1) + +	unsigned int quirks; +}; + +#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_ACPI) + +struct acpi_device; + +int acpi_dev_add_driver_gpios(struct acpi_device *adev, +			      const struct acpi_gpio_mapping *gpios); +void acpi_dev_remove_driver_gpios(struct acpi_device *adev); + +int devm_acpi_dev_add_driver_gpios(struct device *dev, +				   const struct acpi_gpio_mapping *gpios); +void devm_acpi_dev_remove_driver_gpios(struct device *dev); + +#else  /* CONFIG_GPIOLIB && CONFIG_ACPI */ + +struct acpi_device; + +static inline int acpi_dev_add_driver_gpios(struct acpi_device *adev, +			      const struct acpi_gpio_mapping *gpios) +{ +	return -ENXIO; +} +static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) {} + +static inline int devm_acpi_dev_add_driver_gpios(struct device *dev, +			      const struct acpi_gpio_mapping *gpios) +{ +	return -ENXIO; +} +static inline void devm_acpi_dev_remove_driver_gpios(struct device *dev) {} + +#endif /* CONFIG_GPIOLIB && CONFIG_ACPI */ + +  #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)  int gpiod_export(struct gpio_desc *desc, bool direction_may_change);  |