pinctrl: use ngpios propety from DT
authorPramod Kumar <pramodku@broadcom.com>
Thu, 19 Nov 2015 03:52:15 +0000 (09:22 +0530)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 30 Nov 2015 08:36:14 +0000 (09:36 +0100)
Since identical hardware is used in several instances and every
instance will have different in-use pins. Hence extracting this
number from DT via "ngpios" property.

Signed-off-by: Pramod Kumar <pramodku@broadcom.com>
Reviewed-by: Ray Jui <rjui@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/bcm/pinctrl-cygnus-gpio.c

index 663ad0a34674c3f6c81c200cdde51412ab87506c..f19283aa8419867e526ab55efe0ec4231fc8a0ba 100644 (file)
@@ -641,35 +641,11 @@ static void cygnus_gpio_unregister_pinconf(struct cygnus_gpio *chip)
        pinctrl_unregister(chip->pctl);
 }
 
-struct cygnus_gpio_data {
-       unsigned num_gpios;
-};
-
-static const struct cygnus_gpio_data cygnus_cmm_gpio_data = {
-       .num_gpios = 24,
-};
-
-static const struct cygnus_gpio_data cygnus_asiu_gpio_data = {
-       .num_gpios = 146,
-};
-
-static const struct cygnus_gpio_data cygnus_crmu_gpio_data = {
-       .num_gpios = 6,
-};
-
 static const struct of_device_id cygnus_gpio_of_match[] = {
-       {
-               .compatible = "brcm,cygnus-ccm-gpio",
-               .data = &cygnus_cmm_gpio_data,
-       },
-       {
-               .compatible = "brcm,cygnus-asiu-gpio",
-               .data = &cygnus_asiu_gpio_data,
-       },
-       {
-               .compatible = "brcm,cygnus-crmu-gpio",
-               .data = &cygnus_crmu_gpio_data,
-       }
+       { .compatible = "brcm,cygnus-ccm-gpio" },
+       { .compatible = "brcm,cygnus-asiu-gpio" },
+       { .compatible = "brcm,cygnus-crmu-gpio" },
+       { }
 };
 
 static int cygnus_gpio_probe(struct platform_device *pdev)
@@ -680,14 +656,6 @@ static int cygnus_gpio_probe(struct platform_device *pdev)
        struct gpio_chip *gc;
        u32 ngpios;
        int irq, ret;
-       const struct of_device_id *match;
-       const struct cygnus_gpio_data *gpio_data;
-
-       match = of_match_device(cygnus_gpio_of_match, dev);
-       if (!match)
-               return -ENODEV;
-       gpio_data = match->data;
-       ngpios = gpio_data->num_gpios;
 
        chip = devm_kzalloc(dev, sizeof(*chip), GFP_KERNEL);
        if (!chip)
@@ -712,6 +680,11 @@ static int cygnus_gpio_probe(struct platform_device *pdev)
                }
        }
 
+       if (of_property_read_u32(dev->of_node, "ngpios", &ngpios)) {
+               dev_err(&pdev->dev, "missing ngpios DT property\n");
+               return -ENODEV;
+       }
+
        spin_lock_init(&chip->lock);
 
        gc = &chip->gc;