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

Svyatoslav Ryhel clamor95 at gmail.com
Fri Nov 3 20:39:51 CET 2023



3 листопада 2023 р. 21:03:39 GMT+02:00, Tom Rini <trini at konsulko.com> написав(-ла):
>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.

Thanks for checking! I will look into it deeper to reduce the size inflation, not sure though why it occurs at all.
Best regards,
Svyatoslav R.


More information about the U-Boot mailing list