plat-nomadik: support varying number of GPIOs per block
authorRabin Vincent <rabin.vincent@stericsson.com>
Thu, 18 Mar 2010 07:05:22 +0000 (12:35 +0530)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 14 Mar 2011 13:05:14 +0000 (14:05 +0100)
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
[Added constant 32-pin assignment in platform data]
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
arch/arm/mach-ux500/devices-common.c
arch/arm/plat-nomadik/gpio.c
arch/arm/plat-nomadik/include/plat/gpio.h

index fe69f5fac1bbaef8e59b975d863364c4d647a250..13a4ce046ae55926961a22c08ba4820df5a54299 100644 (file)
@@ -139,6 +139,7 @@ void dbx500_add_gpios(resource_size_t *base, int num, int irq,
        for (i = 0; i < num; i++, first += 32, irq++) {
                pdata->first_gpio = first;
                pdata->first_irq = NOMADIK_GPIO_TO_IRQ(first);
+               pdata->num_gpio = 32;
 
                dbx500_add_gpio(i, base[i], irq, pdata);
        }
index 1e88ecb846d14c8fc747a8993baef52f9588c066..30bb92a746e1d849b74f412a654620211a45b1b3 100644 (file)
@@ -35,7 +35,6 @@
  * Symbols in this file are called "nmk_gpio" for "nomadik gpio"
  */
 
-#define NMK_GPIO_PER_CHIP 32
 struct nmk_gpio_chip {
        struct gpio_chip chip;
        void __iomem *addr;
@@ -546,7 +545,7 @@ static int nmk_gpio_init_irq(struct nmk_gpio_chip *nmk_chip)
        int i;
 
        first_irq = NOMADIK_GPIO_TO_IRQ(nmk_chip->chip.base);
-       for (i = first_irq; i < first_irq + NMK_GPIO_PER_CHIP; i++) {
+       for (i = first_irq; i < first_irq + nmk_chip->chip.ngpio; i++) {
                set_irq_chip(i, &nmk_gpio_irq_chip);
                set_irq_handler(i, handle_edge_irq);
                set_irq_flags(i, IRQF_VALID);
@@ -612,7 +611,6 @@ static struct gpio_chip nmk_gpio_template = {
        .direction_output       = nmk_gpio_make_output,
        .set                    = nmk_gpio_set_output,
        .to_irq                 = nmk_gpio_to_irq,
-       .ngpio                  = NMK_GPIO_PER_CHIP,
        .can_sleep              = 0,
 };
 
@@ -672,6 +670,7 @@ static int __devinit nmk_gpio_probe(struct platform_device *dev)
 
        chip = &nmk_chip->chip;
        chip->base = pdata->first_gpio;
+       chip->ngpio = pdata->num_gpio;
        chip->label = pdata->name ?: dev_name(&dev->dev);
        chip->dev = &dev->dev;
        chip->owner = THIS_MODULE;
index 67b113d639d825f6072f2abe4f4251bccc480fda..d745f3ac0a61826eea137aa8a19ca356e9519099 100644 (file)
@@ -82,6 +82,7 @@ struct nmk_gpio_platform_data {
        char *name;
        int first_gpio;
        int first_irq;
+       int num_gpio;
 };
 
 #endif /* __ASM_PLAT_GPIO_H */