diff options
author | Tom Rini <trini@konsulko.com> | 2024-01-08 12:00:18 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2024-01-08 12:00:18 -0500 |
commit | 93d91e9485d902a1836a22e72d1a545b587adf36 (patch) | |
tree | f368b4e3c2220e7cd34c83bf192d8b674158d16b /drivers/gpio/gpio-uclass.c | |
parent | 866ca972d6c3cabeaf6dbac431e8e08bb30b3c8e (diff) | |
parent | f28a77589e7505535a4eebdc7269df98f67dbe68 (diff) |
Merge branch 'next'
Diffstat (limited to 'drivers/gpio/gpio-uclass.c')
-rw-r--r-- | drivers/gpio/gpio-uclass.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c index 7aece85a70a..4234cd912c9 100644 --- a/drivers/gpio/gpio-uclass.c +++ b/drivers/gpio/gpio-uclass.c @@ -1143,9 +1143,29 @@ static int gpio_request_tail(int ret, const char *nodename, ret = uclass_get_device_by_ofnode(UCLASS_GPIO, args->node, &desc->dev); if (ret) { +#if CONFIG_IS_ENABLED(MAX77663_GPIO) || CONFIG_IS_ENABLED(PALMAS_GPIO) + struct udevice *pmic; + ret = uclass_get_device_by_ofnode(UCLASS_PMIC, args->node, + &pmic); + if (ret) { + log_debug("%s: PMIC device get failed, err %d\n", + __func__, ret); + goto err; + } + + device_foreach_child(desc->dev, pmic) { + if (device_get_uclass_id(desc->dev) == UCLASS_GPIO) + break; + } + + /* if loop exits without GPIO device return error */ + if (device_get_uclass_id(desc->dev) != UCLASS_GPIO) + goto err; +#else debug("%s: uclass_get_device_by_ofnode failed\n", __func__); goto err; +#endif } } ret = gpio_find_and_xlate(desc, args); |