To find gpiochip for non-OF platforms like x86 Signed-off-by: hongzha1 <hongzhan.c...@intel.com> --- include/cobalt/kernel/rtdm/gpio.h | 3 +++ kernel/drivers/gpio/gpio-core.c | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+)
diff --git a/include/cobalt/kernel/rtdm/gpio.h b/include/cobalt/kernel/rtdm/gpio.h index 00055ec0a..c5fb20f25 100644 --- a/include/cobalt/kernel/rtdm/gpio.h +++ b/include/cobalt/kernel/rtdm/gpio.h @@ -61,6 +61,9 @@ int rtdm_gpiochip_add_by_name(struct rtdm_gpio_chip *rgc, int rtdm_gpiochip_post_event(struct rtdm_gpio_chip *rgc, unsigned int offset); +int rtdm_gpiochip_find(struct device_node *from, + const char *label, int type); + #ifdef CONFIG_OF int rtdm_gpiochip_scan_of(struct device_node *from, diff --git a/kernel/drivers/gpio/gpio-core.c b/kernel/drivers/gpio/gpio-core.c index 600ef9789..b3d801fa1 100644 --- a/kernel/drivers/gpio/gpio-core.c +++ b/kernel/drivers/gpio/gpio-core.c @@ -520,6 +520,29 @@ int rtdm_gpiochip_add_by_name(struct rtdm_gpio_chip *rgc, } EXPORT_SYMBOL_GPL(rtdm_gpiochip_add_by_name); +int rtdm_gpiochip_find(struct device_node *from, const char *label, + int type) +{ + struct rtdm_gpio_chip *rgc; + struct gpio_chip *chip; + int ret = -ENODEV; + + if (!rtdm_available()) + return -ENOSYS; + + chip = find_chip_by_name(label); + if (chip == NULL) + return ret; + + ret = 0; + rgc = rtdm_gpiochip_alloc(chip, type); + if (IS_ERR(rgc)) + ret = PTR_ERR(rgc); + + return ret; +} +EXPORT_SYMBOL_GPL(rtdm_gpiochip_find); + #ifdef CONFIG_OF #include <linux/of_platform.h> -- 2.17.1