omap uses new gpio_to_irq() hooks
Subsystems (2)
PATCH 2/3 omap uses new gpio_to_irq() hooks
Make OMAP use the new __gpio_to_irq() hook, to make it easier to support IRQs coming in from off-chip gpio controllers, like the TWL4030/TPS65930 chip used on OMAP3 boads like Beagleboard.org and the Gumstix Overo.
Signed-off-by David Brownell <[email protected]>
--- arch/arm/plat-omap/gpio.c | 9 +++++++++ arch/arm/plat-omap/include/mach/gpio.h | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-)
arch/arm/plat-omap/gpio.c +9 -0
@@ -1296,6 +1296,14 @@ static void gpio_set(struct gpio_chip *cspin_unlock_irqrestore (&bank->lock, flags); } +static int gpio_2irq (struct gpio_chip *chip,unsigned offset) +{ +struct gpio_bank *bank; + + bank = container_of(chip, struct gpio_bank, chip); +return bank->virtual_irq_start + offset; +} +/*---------------------------------------------------------------------*/ static int initialized;
@@ -1495,6 +1503,7 @@ static int __init _omap_gpio_init(void) bank->chip.get = gpio_get; bank->chip.direction_output = gpio_output; bank->chip.set = gpio_set; + bank->chip.to_irq = gpio_2irq;if (bank_is_mpuio (bank)) { bank->chip.label ="mpuio" ;#ifdef CONFIG_ARCH_OMAP16XX
arch/arm/plat-omap/include/mach/gpio.h +12 -4
@@ -109,16 +109,24 @@ static inline int gpio_cansleep(unsignedstatic inline int gpio_to_irq (unsigned gpio) { -if (gpio < (OMAP_MAX_GPIO_LINES +16 )) -return OMAP_GPIO_IRQ (gpio); -return -EINVAL ; +return __gpio_to_irq (gpio); }static inline int irq_to_gpio (unsigned irq) { +int tmp; + +/* omap1 SOC mpuio */ if (cpu_class_is_omap1 () && (irq < (IH_MPUIO_BASE +16 )))return (irq -IH_MPUIO_BASE ) +OMAP_MAX_GPIO_LINES ; -return irq -IH_GPIO_BASE ; + +/* SOC gpio */ + tmp = irq -IH_GPIO_BASE ; +if (tmp <OMAP_MAX_GPIO_LINES ) +return tmp; + +/* we don't supply reverse mappings for non-SOC gpios */ +return -EIO ; }#endif