Message ID | 20231130-b4-qcom-dt-compat-v5-5-41500e237ad0@linaro.org |
---|---|
State | New |
Headers | show |
Series | Qualcomm PMIC fixes | expand |
On 30/11/2023 21:22, Caleb Connolly wrote: > Upstream uses the gpio-ranges property to define the number of GPIOs, > support for parsing this when gpio-count is unspecified > > Additionally, drop the bank-name property as it isn't used in upstream, > and we can just hardcode the bank name instead. > > Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org> > --- > drivers/gpio/qcom_pmic_gpio.c | 39 ++++++++++++++++++++++++++++++++------- > 1 file changed, 32 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpio/qcom_pmic_gpio.c b/drivers/gpio/qcom_pmic_gpio.c > index 7b83c67fa464..54f4dbd2b84e 100644 > --- a/drivers/gpio/qcom_pmic_gpio.c > +++ b/drivers/gpio/qcom_pmic_gpio.c > @@ -245,23 +245,48 @@ 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); > - uc_priv->bank_name = dev_read_string(dev, "gpio-bank-name"); > - if (uc_priv->bank_name == NULL) > - uc_priv->bank_name = "qcom_pmic"; > + if (!uc_priv->gpio_count) { > + ret = qcom_gpio_of_parse_ranges(dev); > + if (ret > 0) > + uc_priv->gpio_count = ret; > + else > + return ret; > + } > + > + uc_priv->bank_name = "pmic"; > > return 0; > } > > static const struct udevice_id qcom_gpio_ids[] = { > - { .compatible = "qcom,pm8916-gpio" }, > - { .compatible = "qcom,pm8994-gpio" }, /* 22 GPIO's */ > - { .compatible = "qcom,pm8998-gpio" }, > - { .compatible = "qcom,pms405-gpio" }, > + { .compatible = "qcom,pm8916-gpio", }, > + { .compatible = "qcom,pm8994-gpio", }, > + { .compatible = "qcom,pm8998-gpio", }, > + { .compatible = "qcom,pms405-gpio", }, This seems to be a spurious change > { } > }; > >
diff --git a/drivers/gpio/qcom_pmic_gpio.c b/drivers/gpio/qcom_pmic_gpio.c index 7b83c67fa464..54f4dbd2b84e 100644 --- a/drivers/gpio/qcom_pmic_gpio.c +++ b/drivers/gpio/qcom_pmic_gpio.c @@ -245,23 +245,48 @@ 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); - uc_priv->bank_name = dev_read_string(dev, "gpio-bank-name"); - if (uc_priv->bank_name == NULL) - uc_priv->bank_name = "qcom_pmic"; + if (!uc_priv->gpio_count) { + ret = qcom_gpio_of_parse_ranges(dev); + if (ret > 0) + uc_priv->gpio_count = ret; + else + return ret; + } + + uc_priv->bank_name = "pmic"; return 0; } static const struct udevice_id qcom_gpio_ids[] = { - { .compatible = "qcom,pm8916-gpio" }, - { .compatible = "qcom,pm8994-gpio" }, /* 22 GPIO's */ - { .compatible = "qcom,pm8998-gpio" }, - { .compatible = "qcom,pms405-gpio" }, + { .compatible = "qcom,pm8916-gpio", }, + { .compatible = "qcom,pm8994-gpio", }, + { .compatible = "qcom,pm8998-gpio", }, + { .compatible = "qcom,pms405-gpio", }, { } };
Upstream uses the gpio-ranges property to define the number of GPIOs, support for parsing this when gpio-count is unspecified Additionally, drop the bank-name property as it isn't used in upstream, and we can just hardcode the bank name instead. Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org> --- drivers/gpio/qcom_pmic_gpio.c | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-)