diff options
author | Arnd Bergmann <arnd@arndb.de> | 2011-10-31 23:46:42 +0100 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2011-10-31 23:46:42 +0100 |
commit | efa62e1355f0495f37f1296754b8880947c8da72 (patch) | |
tree | c07af29f8baf2e6f4ed3bedbe46d405924edd530 /drivers/gpio/gpio-tegra.c | |
parent | Merge branch 'tegra/devel' into next/devel (diff) | |
parent | ARM: 7104/1: plat-pxa: break out GPIO driver specifics (diff) | |
download | linux-efa62e1355f0495f37f1296754b8880947c8da72.tar.xz linux-efa62e1355f0495f37f1296754b8880947c8da72.zip |
Merge branch 'depends/rmk/gpio' into next/devel
Conflicts:
arch/arm/mach-mxs/include/mach/gpio.h
arch/arm/plat-mxc/include/mach/gpio.h
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'drivers/gpio/gpio-tegra.c')
-rw-r--r-- | drivers/gpio/gpio-tegra.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c index 75cf91138b69..61044c889f7f 100644 --- a/drivers/gpio/gpio-tegra.c +++ b/drivers/gpio/gpio-tegra.c @@ -28,6 +28,7 @@ #include <asm/mach/irq.h> +#include <mach/gpio-tegra.h> #include <mach/iomap.h> #include <mach/suspend.h> @@ -136,7 +137,10 @@ static int tegra_gpio_direction_output(struct gpio_chip *chip, unsigned offset, return 0; } - +static int tegra_gpio_to_irq(struct gpio_chip *chip, unsigned offset) +{ + return TEGRA_GPIO_TO_IRQ(offset); +} static struct gpio_chip tegra_gpio_chip = { .label = "tegra-gpio", @@ -144,6 +148,7 @@ static struct gpio_chip tegra_gpio_chip = { .get = tegra_gpio_get, .direction_output = tegra_gpio_direction_output, .set = tegra_gpio_set, + .to_irq = tegra_gpio_to_irq, .base = 0, .ngpio = TEGRA_NR_GPIOS, }; @@ -334,6 +339,7 @@ static int __devinit tegra_gpio_probe(struct platform_device *pdev) { struct resource *res; struct tegra_gpio_bank *bank; + int gpio; int i; int j; @@ -381,14 +387,17 @@ static int __devinit tegra_gpio_probe(struct platform_device *pdev) gpiochip_add(&tegra_gpio_chip); - for (i = INT_GPIO_BASE; i < (INT_GPIO_BASE + TEGRA_NR_GPIOS); i++) { - bank = &tegra_gpio_banks[GPIO_BANK(irq_to_gpio(i))]; + for (gpio = 0; gpio < TEGRA_NR_GPIOS; gpio++) { + int irq = TEGRA_GPIO_TO_IRQ(gpio); + /* No validity check; all Tegra GPIOs are valid IRQs */ + + bank = &tegra_gpio_banks[GPIO_BANK(gpio)]; - irq_set_lockdep_class(i, &gpio_lock_class); - irq_set_chip_data(i, bank); - irq_set_chip_and_handler(i, &tegra_gpio_irq_chip, + irq_set_lockdep_class(irq, &gpio_lock_class); + irq_set_chip_data(irq, bank); + irq_set_chip_and_handler(irq, &tegra_gpio_irq_chip, handle_simple_irq); - set_irq_flags(i, IRQF_VALID); + set_irq_flags(irq, IRQF_VALID); } for (i = 0; i < ARRAY_SIZE(tegra_gpio_banks); i++) { |