forked from Minki/linux
ARM: OMAP: gpios implement new to_irq()
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 <dbrownell@users.sourceforge.net> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
parent
21c867f1de
commit
a007b7096f
@ -1285,6 +1285,14 @@ static void gpio_set(struct gpio_chip *chip, unsigned offset, int value)
|
|||||||
spin_unlock_irqrestore(&bank->lock, flags);
|
spin_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;
|
static int initialized;
|
||||||
@ -1480,6 +1488,7 @@ static int __init _omap_gpio_init(void)
|
|||||||
bank->chip.get = gpio_get;
|
bank->chip.get = gpio_get;
|
||||||
bank->chip.direction_output = gpio_output;
|
bank->chip.direction_output = gpio_output;
|
||||||
bank->chip.set = gpio_set;
|
bank->chip.set = gpio_set;
|
||||||
|
bank->chip.to_irq = gpio_2irq;
|
||||||
if (bank_is_mpuio(bank)) {
|
if (bank_is_mpuio(bank)) {
|
||||||
bank->chip.label = "mpuio";
|
bank->chip.label = "mpuio";
|
||||||
#ifdef CONFIG_ARCH_OMAP16XX
|
#ifdef CONFIG_ARCH_OMAP16XX
|
||||||
|
@ -109,16 +109,24 @@ static inline int gpio_cansleep(unsigned gpio)
|
|||||||
|
|
||||||
static inline int gpio_to_irq(unsigned gpio)
|
static inline int gpio_to_irq(unsigned gpio)
|
||||||
{
|
{
|
||||||
if (gpio < (OMAP_MAX_GPIO_LINES + 16))
|
return __gpio_to_irq(gpio);
|
||||||
return OMAP_GPIO_IRQ(gpio);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int irq_to_gpio(unsigned irq)
|
static inline int irq_to_gpio(unsigned irq)
|
||||||
{
|
{
|
||||||
|
int tmp;
|
||||||
|
|
||||||
|
/* omap1 SOC mpuio */
|
||||||
if (cpu_class_is_omap1() && (irq < (IH_MPUIO_BASE + 16)))
|
if (cpu_class_is_omap1() && (irq < (IH_MPUIO_BASE + 16)))
|
||||||
return (irq - IH_MPUIO_BASE) + OMAP_MAX_GPIO_LINES;
|
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
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user