davinci: Make GPIO code more generic
The current gpio code needs to know the number of gpio irqs there are and what the bank irq number is. To determine those values, it checks the SoC type. It also assumes that the base address and the number of irqs the interrupt controller uses is fixed. To clean up the SoC checks and make it support different base addresses and interrupt controllers, have the SoC-specific code set those values in the soc_info structure and have the gpio code reference them there. Signed-off-by: Mark A. Greer <mgreer@mvista.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
This commit is contained in:
committed by
Kevin Hilman
parent
951d6f6d70
commit
a994955cc0
@@ -17,6 +17,7 @@
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/common.h>
|
||||
|
||||
#define DAVINCI_GPIO_BASE 0x01C67000
|
||||
|
||||
@@ -67,15 +68,16 @@ static inline struct gpio_controller *__iomem
|
||||
__gpio_to_controller(unsigned gpio)
|
||||
{
|
||||
void *__iomem ptr;
|
||||
void __iomem *base = davinci_soc_info.gpio_base;
|
||||
|
||||
if (gpio < 32 * 1)
|
||||
ptr = IO_ADDRESS(DAVINCI_GPIO_BASE + 0x10);
|
||||
ptr = base + 0x10;
|
||||
else if (gpio < 32 * 2)
|
||||
ptr = IO_ADDRESS(DAVINCI_GPIO_BASE + 0x38);
|
||||
ptr = base + 0x38;
|
||||
else if (gpio < 32 * 3)
|
||||
ptr = IO_ADDRESS(DAVINCI_GPIO_BASE + 0x60);
|
||||
ptr = base + 0x60;
|
||||
else if (gpio < 32 * 4)
|
||||
ptr = IO_ADDRESS(DAVINCI_GPIO_BASE + 0x88);
|
||||
ptr = base + 0x88;
|
||||
else
|
||||
ptr = NULL;
|
||||
return ptr;
|
||||
@@ -142,13 +144,13 @@ static inline int gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
if (gpio >= DAVINCI_N_GPIO)
|
||||
return -EINVAL;
|
||||
return DAVINCI_N_AINTC_IRQ + gpio;
|
||||
return davinci_soc_info.intc_irq_num + gpio;
|
||||
}
|
||||
|
||||
static inline int irq_to_gpio(unsigned irq)
|
||||
{
|
||||
/* caller guarantees gpio_to_irq() succeeded */
|
||||
return irq - DAVINCI_N_AINTC_IRQ;
|
||||
return irq - davinci_soc_info.intc_irq_num;
|
||||
}
|
||||
|
||||
#endif /* __DAVINCI_GPIO_H */
|
||||
|
Reference in New Issue
Block a user