]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
gpio: qcom_pmic: support upstream DT
authorCaleb Connolly <caleb.connolly@linaro.org>
Tue, 5 Dec 2023 13:46:50 +0000 (13:46 +0000)
committerCaleb Connolly <caleb.connolly@linaro.org>
Tue, 16 Jan 2024 12:26:53 +0000 (12:26 +0000)
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.

Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
Tested-by: Sumit Garg <sumit.garg@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
drivers/gpio/qcom_pmic_gpio.c

index 7b83c67fa464d0220abd8c8b8bf83f2e0cac1795..5221bd27825ed5b011a82d69891b45dac596b6d7 100644 (file)
@@ -245,14 +245,39 @@ 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;
 }