gpio: davinci: Add support for multiple GPIO controllers
authorKeerthy <j-keerthy@ti.com>
Tue, 17 Jan 2017 16:19:14 +0000 (21:49 +0530)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 26 Jan 2017 09:00:22 +0000 (10:00 +0100)
Update GPIO driver to support Multiple GPIO controllers by updating
the base of subsequent GPIO chips with total of previous chips
gpio count so that gpio_add_chip gets unique numbers.

Signed-off-by: Keerthy <j-keerthy@ti.com>
Reviewed-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-davinci.c
include/linux/platform_data/gpio-davinci.h

index 446df4ece9150683933f0553aab68d85185f2000..2f0b6fdbcddbf5bf2eb3a6a4b01ccdff55b25d4b 100644 (file)
@@ -186,7 +186,7 @@ static int davinci_gpio_of_xlate(struct gpio_chip *gc,
 
 static int davinci_gpio_probe(struct platform_device *pdev)
 {
-       static int ctrl_num;
+       static int ctrl_num, bank_base;
        int gpio, bank;
        unsigned ngpio, nbank;
        struct davinci_gpio_controller *chips;
@@ -240,6 +240,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
        chips->chip.set = davinci_gpio_set;
 
        chips->chip.ngpio = ngpio;
+       chips->chip.base = bank_base;
 
 #ifdef CONFIG_OF_GPIO
        chips->chip.of_gpio_n_cells = 2;
@@ -248,6 +249,7 @@ static int davinci_gpio_probe(struct platform_device *pdev)
        chips->chip.of_node = dev->of_node;
 #endif
        spin_lock_init(&chips->lock);
+       bank_base += ngpio;
 
        for (gpio = 0, bank = 0; gpio < ngpio; gpio += 32, bank++)
                chips->regs[bank] = gpio_base + offset_array[bank];
index c62a9438976dd2f31a006449bd33bf6a800ed289..90ae19ca828f70927a13cb593aba39d52cf188cf 100644 (file)
@@ -42,6 +42,7 @@ struct davinci_gpio_controller {
        void __iomem            *regs[MAX_REGS_BANKS];
        int                     gpio_unbanked;
        unsigned int            base_irq;
+       unsigned int            base;
 };
 
 /*