diff options
Diffstat (limited to 'include/asm-generic/gpio.h')
| -rw-r--r-- | include/asm-generic/gpio.h | 86 | 
1 files changed, 42 insertions, 44 deletions
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index 20ca7663975..bde646995d1 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h @@ -47,12 +47,14 @@ struct gpio;  struct seq_file;  struct module;  struct device_node; +struct gpio_desc;  /**   * struct gpio_chip - abstract a GPIO controller   * @label: for diagnostics   * @dev: optional device providing the GPIOs   * @owner: helps prevent removal of modules exporting active GPIOs + * @list: links gpio_chips together for traversal   * @request: optional hook for chip-specific activation, such as   *	enabling module power and clock; may sleep   * @free: optional hook for chip-specific deactivation, such as @@ -75,6 +77,7 @@ struct device_node;   *	negative during registration, requests dynamic ID allocation.   * @ngpio: the number of GPIOs handled by this controller; the last GPIO   *	handled is (base + ngpio - 1). + * @desc: array of ngpio descriptors. Private.   * @can_sleep: flag must be set iff get()/set() methods sleep, as they   *	must while accessing GPIO expander chips over I2C or SPI   * @names: if set, must be an array of strings to use as alternative @@ -98,6 +101,7 @@ struct gpio_chip {  	const char		*label;  	struct device		*dev;  	struct module		*owner; +	struct list_head        list;  	int			(*request)(struct gpio_chip *chip,  						unsigned offset); @@ -124,6 +128,7 @@ struct gpio_chip {  						struct gpio_chip *chip);  	int			base;  	u16			ngpio; +	struct gpio_desc	*desc;  	const char		*const *names;  	unsigned		can_sleep:1;  	unsigned		exported:1; @@ -152,7 +157,6 @@ struct gpio_chip {  extern const char *gpiochip_is_requested(struct gpio_chip *chip,  			unsigned offset);  extern struct gpio_chip *gpio_to_chip(unsigned gpio); -extern int __must_check gpiochip_reserve(int start, int ngpio);  /* add/remove chips */  extern int gpiochip_add(struct gpio_chip *chip); @@ -192,12 +196,6 @@ extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *labe  extern int gpio_request_array(const struct gpio *array, size_t num);  extern void gpio_free_array(const struct gpio *array, size_t num); -/* bindings for managed devices that want to request gpios */ -int devm_gpio_request(struct device *dev, unsigned gpio, const char *label); -int devm_gpio_request_one(struct device *dev, unsigned gpio, -			  unsigned long flags, const char *label); -void devm_gpio_free(struct device *dev, unsigned int gpio); -  #ifdef CONFIG_GPIO_SYSFS  /* @@ -212,6 +210,43 @@ extern void gpio_unexport(unsigned gpio);  #endif	/* CONFIG_GPIO_SYSFS */ +#ifdef CONFIG_PINCTRL + +/** + * struct gpio_pin_range - pin range controlled by a gpio chip + * @head: list for maintaining set of pin ranges, used internally + * @pctldev: pinctrl device which handles corresponding pins + * @range: actual range of pins controlled by a gpio controller + */ + +struct gpio_pin_range { +	struct list_head node; +	struct pinctrl_dev *pctldev; +	struct pinctrl_gpio_range range; +}; + +int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name, +			   unsigned int gpio_offset, unsigned int pin_offset, +			   unsigned int npins); +void gpiochip_remove_pin_ranges(struct gpio_chip *chip); + +#else + +static inline int +gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name, +		       unsigned int gpio_offset, unsigned int pin_offset, +		       unsigned int npins) +{ +	return 0; +} + +static inline void +gpiochip_remove_pin_ranges(struct gpio_chip *chip) +{ +} + +#endif /* CONFIG_PINCTRL */ +  #else	/* !CONFIG_GPIOLIB */  static inline bool gpio_is_valid(int number) @@ -270,41 +305,4 @@ static inline void gpio_unexport(unsigned gpio)  }  #endif	/* CONFIG_GPIO_SYSFS */ -#ifdef CONFIG_PINCTRL - -/** - * struct gpio_pin_range - pin range controlled by a gpio chip - * @head: list for maintaining set of pin ranges, used internally - * @pctldev: pinctrl device which handles corresponding pins - * @range: actual range of pins controlled by a gpio controller - */ - -struct gpio_pin_range { -	struct list_head node; -	struct pinctrl_dev *pctldev; -	struct pinctrl_gpio_range range; -}; - -int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name, -			   unsigned int gpio_offset, unsigned int pin_offset, -			   unsigned int npins); -void gpiochip_remove_pin_ranges(struct gpio_chip *chip); - -#else - -static inline int -gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name, -		       unsigned int gpio_offset, unsigned int pin_offset, -		       unsigned int npins) -{ -	return 0; -} - -static inline void -gpiochip_remove_pin_ranges(struct gpio_chip *chip) -{ -} - -#endif /* CONFIG_PINCTRL */ -  #endif /* _ASM_GENERIC_GPIO_H */  |