Message ID | 20231108-b4-qcom-dt-compat-v2-3-713233c72948@linaro.org |
---|---|
State | New |
Headers | show |
Series | Qualcomm PMIC fixes | expand |
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@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
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); + } uc_priv->bank_name = dev_read_string(dev, "gpio-bank-name"); if (uc_priv->bank_name == NULL) uc_priv->bank_name = "qcom_pmic";
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@linaro.org> --- drivers/gpio/qcom_pmic_gpio.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)