
On Tue, 14 Nov 2023 at 19:18, Caleb Connolly caleb.connolly@linaro.org 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
arch/arm/dts/dragonboard410c.dts | 3 +-- arch/arm/dts/dragonboard820c.dts | 3 +-- arch/arm/dts/qcs404-evb.dts | 2 +- arch/arm/dts/sdm845.dtsi | 3 +-- drivers/gpio/qcom_pmic_gpio.c | 38 ++++++++++++++++++++++++++++++-------- 5 files changed, 34 insertions(+), 15 deletions(-)
diff --git a/arch/arm/dts/dragonboard410c.dts b/arch/arm/dts/dragonboard410c.dts index c41fee977813..6a4e3ccf17b1 100644 --- a/arch/arm/dts/dragonboard410c.dts +++ b/arch/arm/dts/dragonboard410c.dts @@ -170,9 +170,8 @@ compatible = "qcom,pm8916-gpio"; reg = <0xc000 0x400>; gpio-controller;
gpio-count = <4>;
gpio-ranges = <&pm8916_gpios 0 0 4>; #gpio-cells = <2>;
gpio-bank-name="pmic"; }; };
diff --git a/arch/arm/dts/dragonboard820c.dts b/arch/arm/dts/dragonboard820c.dts index 0d9c9f7a4922..146a0af8aafe 100644 --- a/arch/arm/dts/dragonboard820c.dts +++ b/arch/arm/dts/dragonboard820c.dts @@ -132,9 +132,8 @@ compatible = "qcom,pm8994-gpio"; reg = <0xc000 0x400>; gpio-controller;
gpio-count = <24>;
gpio-ranges = <&pm8994_gpios 0 0 22>; #gpio-cells = <2>;
gpio-bank-name="pm8994."; }; };
diff --git a/arch/arm/dts/qcs404-evb.dts b/arch/arm/dts/qcs404-evb.dts index 84224a8a3d39..3bb580ba4e17 100644 --- a/arch/arm/dts/qcs404-evb.dts +++ b/arch/arm/dts/qcs404-evb.dts @@ -378,7 +378,7 @@ compatible = "qcom,pms405-gpio"; reg = <0xc000 0x400>; gpio-controller;
gpio-count = <12>;
gpio-ranges = <&pms405_gpios 0 0 12>; #gpio-cells = <2>; gpio-bank-name="pmic"; };
diff --git a/arch/arm/dts/sdm845.dtsi b/arch/arm/dts/sdm845.dtsi index cd5d890e9a45..a26e9f411ee0 100644 --- a/arch/arm/dts/sdm845.dtsi +++ b/arch/arm/dts/sdm845.dtsi @@ -103,9 +103,8 @@ compatible = "qcom,pm8998-gpio"; reg = <0xc000 0x1a00>; gpio-controller;
gpio-count = <21>;
gpio-ranges = <&pm8998_gpios 0 0 26>; #gpio-cells = <2>;
gpio-bank-name = "pm8998."; }; };
diff --git a/drivers/gpio/qcom_pmic_gpio.c b/drivers/gpio/qcom_pmic_gpio.c index 7b83c67fa464..f2424766e5cc 100644 --- a/drivers/gpio/qcom_pmic_gpio.c +++ b/drivers/gpio/qcom_pmic_gpio.c @@ -245,23 +245,45 @@ 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";
ret = qcom_gpio_of_parse_ranges(dev);
if (ret > 0)
uc_priv->gpio_count = ret;
else
return ret;
uc_priv->bank_name = (const char *)dev->driver_data;
Do you see any value add for users to know the underlying PMIC chip id for GPIO bank_name? To me it is sufficient to just say that these GPIOs are coming from PMIC. In Linux I do see the driver data being used as an alternative way to provide GPIO count for older devicetree which doesn't provide "gpio-ranges" but I don't think that will be the case for u-boot. However, we can leave driver_data empty if it's not really needed.
-Sumit
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", .data = (ulong)&"pm8916_gpio" },
{ .compatible = "qcom,pm8994-gpio", .data = (ulong)&"pm8994_gpio" },
{ .compatible = "qcom,pm8998-gpio", .data = (ulong)&"pm8998_gpio" },
{ .compatible = "qcom,pms405-gpio", .data = (ulong)&"pms405_gpio" }, { }
};
-- 2.42.1