mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 19:29:37 +00:00
![Geert Uytterhoeven](/assets/img/avatar_default.png)
As GPIO hogs are configured at GPIO controller initialization time, adding/removing GPIO hogs in DT overlays does not work. Add support for GPIO hogs described in DT overlays by registering an OF reconfiguration notifier, to handle the addition and removal of GPIO hog subnodes to/from a GPIO controller device node. Note that when a GPIO hog device node is being removed, its "gpios" properties is no longer available, so we have to keep track of which node a hog belongs to, which is done by adding a pointer to the hog's device node to struct gpio_desc. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Link: https://lore.kernel.org/r/20200220130149.26283-3-geert+renesas@glider.be Reviewed-by: Frank Rowand <frank.rowand@sony.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
40 lines
1.1 KiB
C
40 lines
1.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
#ifndef GPIOLIB_OF_H
|
|
#define GPIOLIB_OF_H
|
|
|
|
struct gpio_chip;
|
|
enum of_gpio_flags;
|
|
|
|
#ifdef CONFIG_OF_GPIO
|
|
struct gpio_desc *of_find_gpio(struct device *dev,
|
|
const char *con_id,
|
|
unsigned int idx,
|
|
unsigned long *lookupflags);
|
|
int of_gpiochip_add(struct gpio_chip *gc);
|
|
void of_gpiochip_remove(struct gpio_chip *gc);
|
|
int of_gpio_get_count(struct device *dev, const char *con_id);
|
|
bool of_gpio_need_valid_mask(const struct gpio_chip *gc);
|
|
#else
|
|
static inline struct gpio_desc *of_find_gpio(struct device *dev,
|
|
const char *con_id,
|
|
unsigned int idx,
|
|
unsigned long *lookupflags)
|
|
{
|
|
return ERR_PTR(-ENOENT);
|
|
}
|
|
static inline int of_gpiochip_add(struct gpio_chip *gc) { return 0; }
|
|
static inline void of_gpiochip_remove(struct gpio_chip *gc) { }
|
|
static inline int of_gpio_get_count(struct device *dev, const char *con_id)
|
|
{
|
|
return 0;
|
|
}
|
|
static inline bool of_gpio_need_valid_mask(const struct gpio_chip *gc)
|
|
{
|
|
return false;
|
|
}
|
|
#endif /* CONFIG_OF_GPIO */
|
|
|
|
extern struct notifier_block gpio_of_notifier;
|
|
|
|
#endif /* GPIOLIB_OF_H */
|