On Tue, Oct 24, 2023 at 11:37:59AM +0300, Svyatoslav Ryhel wrote:

> UCLASS_PMIC may have GPIO children without exposed fdt node,
> in this case if requesting fails, check if uclass is PMIC.
> If so, iterate through its children to find correct device.
> 
> Signed-off-by: Svyatoslav Ryhel <clamo...@gmail.com>
> ---
>  drivers/gpio/gpio-uclass.c | 19 ++++++++++++++++---
>  1 file changed, 16 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
> index 7aece85a70..a3fc470a5d 100644
> --- a/drivers/gpio/gpio-uclass.c
> +++ b/drivers/gpio/gpio-uclass.c
> @@ -1143,9 +1143,22 @@ static int gpio_request_tail(int ret, const char 
> *nodename,
>               ret = uclass_get_device_by_ofnode(UCLASS_GPIO, args->node,
>                                                 &desc->dev);
>               if (ret) {
> -                     debug("%s: uclass_get_device_by_ofnode failed\n",
> -                           __func__);
> -                     goto err;
> +                     struct udevice *pmic;
> +                     ret = uclass_get_device_by_ofnode(UCLASS_PMIC, 
> args->node,
> +                                                       &pmic);
> +                     if (ret) {
> +                             log_err("PMIC device get failed, err %d\n", 
> 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;
>               }
>       }
>       ret = gpio_find_and_xlate(desc, args);

This needs to check for DM_PMIC or so as it leads to a lot of size
increase and one failure to link due to running out of space now.

-- 
Tom

Attachment: signature.asc
Description: PGP signature

Reply via email to