[PATCH v2 3/5] gpio: qcom_pmic: fix support for upstream DT

Stephan Gerhold stephan at gerhold.net
Thu Nov 9 15:35:56 CET 2023


On Wed, Nov 08, 2023 at 04:20:55PM +0000, Caleb Connolly wrote:
> Linux devicetrees use the "gpio-ranges" property, add support for
> parsing it instead of "gpio-count" so that upstream DTs can be used with
> U-Boot.
> 
> Signed-off-by: Caleb Connolly <caleb.connolly at linaro.org>
> ---
>  drivers/gpio/qcom_pmic_gpio.c | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/drivers/gpio/qcom_pmic_gpio.c b/drivers/gpio/qcom_pmic_gpio.c
> index 7b83c67fa464..647d4143ce14 100644
> --- a/drivers/gpio/qcom_pmic_gpio.c
> +++ b/drivers/gpio/qcom_pmic_gpio.c
> @@ -245,11 +245,37 @@ static int qcom_gpio_probe(struct udevice *dev)
>  	return 0;
>  }
>  
> +/*
> + * Parse basic GPIO count specified via the gpio-ranges property
> + * as specified in Linux devicetrees
> + * Returns < 0 on error, otherwise gpio count
> + */
> +static int qcom_gpio_of_parse_ranges(struct udevice *dev)
> +{
> +	int ret;
> +	struct ofnode_phandle_args args;
> +
> +	ret = ofnode_parse_phandle_with_args(dev_ofnode(dev), "gpio-ranges",
> +					     NULL, 3, 0, &args);
> +	if (ret)
> +		return log_msg_ret("gpio-ranges", ret);
> +
> +	return args.args[2];
> +}
> +
>  static int qcom_gpio_of_to_plat(struct udevice *dev)
>  {
>  	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
> +	int ret;
>  
>  	uc_priv->gpio_count = dev_read_u32_default(dev, "gpio-count", 0);
> +	if (!uc_priv->gpio_count) {
> +		ret = qcom_gpio_of_parse_ranges(dev);
> +		if (ret > 0)
> +			uc_priv->gpio_count = ret;
> +		else
> +			printf("gpio-ranges error: %d\n", ret);
> +	}

I would drop support for the non-standard gpio-count and instead adjust
the existing device trees to use gpio-ranges (copied from the upstream
DTs).

>  	uc_priv->bank_name = dev_read_string(dev, "gpio-bank-name");
>  	if (uc_priv->bank_name == NULL)
>  		uc_priv->bank_name = "qcom_pmic";
> 

Maybe you can replace this property as well while you're at it. Perhaps
the default fallback name is sufficient. Alternatively one could
obtain the actual PMIC name from the compatible or similar.

Thanks,
Stephan


More information about the U-Boot mailing list