Rockchip pinctrl binding can configure GPIO direction, so let's add a function that returns a gpio_chip that can be used for this. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- drivers/gpio/gpiolib.c | 19 +++++++++++++++++++ include/gpio.h | 6 ++++++ 2 files changed, 25 insertions(+) diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 520ffed2eefb..f34dce0e98c6 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -1057,6 +1057,25 @@ struct gpio_chip *gpio_get_chip_by_dev(struct device *dev) return NULL; } +struct gpio_chip *of_gpio_get_chip_by_alias(const char *alias) +{ + struct gpio_chip *chip; + struct device_node *np; + + np = of_find_node_by_alias(NULL, alias); + if (!np) + return NULL; + + of_device_ensure_probed(np); + + list_for_each_entry(chip, &chip_list, list) { + if (dev_of_node(chip->dev) == np) + return chip; + } + + return NULL; +} + int gpio_get_num(struct device *dev, int gpio) { struct gpio_chip *chip; diff --git a/include/gpio.h b/include/gpio.h index 71896c9d6bdb..8c3eea73d8bb 100644 --- a/include/gpio.h +++ b/include/gpio.h @@ -36,6 +36,7 @@ void gpio_set_active(unsigned gpio, bool state); int gpio_is_active(unsigned gpio); int gpio_direction_active(unsigned gpio, bool state); struct gpio_chip *gpio_get_chip_by_dev(struct device *); +struct gpio_chip *of_gpio_get_chip_by_alias(const char *alias); /** * gpio_poll_timeout_us - Poll till GPIO reaches requested active state @@ -69,6 +70,11 @@ static inline struct gpio_chip *gpio_get_chip_by_dev(struct device *dev) return NULL; } +static struct gpio_chip *of_gpio_get_chip_by_alias(const char *alias) +{ + return NULL; +} + #define gpio_poll_timeout_us(gpio, val, timeout_us) (-ENOSYS) #endif -- 2.39.2