aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/mach-davinci/gpio.c
diff options
context:
space:
mode:
authorCyril Chemparathy <cyril@ti.com>2010-05-07 17:06:32 -0400
committerKevin Hilman <khilman@deeprootsystems.com>2010-05-13 10:05:22 -0700
commitb8d44293952e4b32b8595d924a377351f3cd1565 (patch)
tree9d5e44f154f18ce9a5496e9f9198fd03e57c8a73 /arch/arm/mach-davinci/gpio.c
parenta6374f53405b719c767c6318fe052a6d8f32cd89 (diff)
Davinci: gpio - use ioremap()
This patch modifies the gpio_base definition in davinci_soc_info to be a physical address, which is then ioremap()ed by the gpio initialization function. Signed-off-by: Cyril Chemparathy <cyril@ti.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-davinci/gpio.c')
-rw-r--r--arch/arm/mach-davinci/gpio.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/arch/arm/mach-davinci/gpio.c b/arch/arm/mach-davinci/gpio.c
index 2efb4468ebd..bf0ff587e46 100644
--- a/arch/arm/mach-davinci/gpio.c
+++ b/arch/arm/mach-davinci/gpio.c
@@ -37,22 +37,22 @@ struct davinci_gpio_regs {
container_of(chip, struct davinci_gpio_controller, chip)
static struct davinci_gpio_controller chips[DIV_ROUND_UP(DAVINCI_N_GPIO, 32)];
+static void __iomem *gpio_base;
static struct davinci_gpio_regs __iomem __init *gpio2regs(unsigned gpio)
{
void __iomem *ptr;
- void __iomem *base = davinci_soc_info.gpio_base;
if (gpio < 32 * 1)
- ptr = base + 0x10;
+ ptr = gpio_base + 0x10;
else if (gpio < 32 * 2)
- ptr = base + 0x38;
+ ptr = gpio_base + 0x38;
else if (gpio < 32 * 3)
- ptr = base + 0x60;
+ ptr = gpio_base + 0x60;
else if (gpio < 32 * 4)
- ptr = base + 0x88;
+ ptr = gpio_base + 0x88;
else if (gpio < 32 * 5)
- ptr = base + 0xb0;
+ ptr = gpio_base + 0xb0;
else
ptr = NULL;
return ptr;
@@ -157,6 +157,10 @@ static int __init davinci_gpio_setup(void)
if (WARN_ON(DAVINCI_N_GPIO < ngpio))
ngpio = DAVINCI_N_GPIO;
+ gpio_base = ioremap(soc_info->gpio_base, SZ_4K);
+ if (WARN_ON(!gpio_base))
+ return -ENOMEM;
+
for (i = 0, base = 0; base < ngpio; i++, base += 32) {
chips[i].chip.label = "DaVinci";
@@ -445,7 +449,7 @@ done:
/* BINTEN -- per-bank interrupt enable. genirq would also let these
* bits be set/cleared dynamically.
*/
- __raw_writel(binten, soc_info->gpio_base + 0x08);
+ __raw_writel(binten, gpio_base + 0x08);
printk(KERN_INFO "DaVinci: %d gpio irqs\n", irq - gpio_to_irq(0));