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
signature.asc
Description: PGP signature