[PATCH v1 1/3] drivers: gpio-uclass: support PMIC GPIO children

Tom Rini trini at konsulko.com
Fri Nov 3 20:03:39 CET 2023


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 <clamor95 at 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 659 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20231103/6900ec37/attachment.sig>


More information about the U-Boot mailing list