diff options
author | Tarun Kanti DebBarma <tarun.kanti@ti.com> | 2011-09-13 05:42:05 -0400 |
---|---|---|
committer | Tarun Kanti DebBarma <tarun.kanti@ti.com> | 2012-02-06 03:43:42 -0500 |
commit | ab985f0f7c2c0ef90b7c832f0c04f470dda0593d (patch) | |
tree | 6a65b11d802d12787147d6cfab49758101f5389f /arch/arm/mach-omap1 | |
parent | 5e571f38f6a44ef541fac0821631509d787ef0cd (diff) |
gpio/omap: cleanup omap_gpio_mod_init function
With register offsets now defined for respective OMAP versions we can get rid
of cpu_class_* checks. This function now has common initialization code for
all OMAP versions. Initialization specific to OMAP16xx has been moved within
omap16xx_gpio_init().
Signed-off-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>
Signed-off-by: Charulatha V <charu@ti.com>
Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Reviewed-by: Kevin Hilman <khilman@ti.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
Diffstat (limited to 'arch/arm/mach-omap1')
-rw-r--r-- | arch/arm/mach-omap1/gpio16xx.c | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/arch/arm/mach-omap1/gpio16xx.c b/arch/arm/mach-omap1/gpio16xx.c index 46bb57a8cb7d..86ac41544a21 100644 --- a/arch/arm/mach-omap1/gpio16xx.c +++ b/arch/arm/mach-omap1/gpio16xx.c | |||
@@ -24,6 +24,9 @@ | |||
24 | #define OMAP1610_GPIO4_BASE 0xfffbbc00 | 24 | #define OMAP1610_GPIO4_BASE 0xfffbbc00 |
25 | #define OMAP1_MPUIO_VBASE OMAP1_MPUIO_BASE | 25 | #define OMAP1_MPUIO_VBASE OMAP1_MPUIO_BASE |
26 | 26 | ||
27 | /* smart idle, enable wakeup */ | ||
28 | #define SYSCONFIG_WORD 0x14 | ||
29 | |||
27 | /* mpu gpio */ | 30 | /* mpu gpio */ |
28 | static struct __initdata resource omap16xx_mpu_gpio_resources[] = { | 31 | static struct __initdata resource omap16xx_mpu_gpio_resources[] = { |
29 | { | 32 | { |
@@ -218,12 +221,42 @@ static struct __initdata platform_device * omap16xx_gpio_dev[] = { | |||
218 | static int __init omap16xx_gpio_init(void) | 221 | static int __init omap16xx_gpio_init(void) |
219 | { | 222 | { |
220 | int i; | 223 | int i; |
224 | void __iomem *base; | ||
225 | struct resource *res; | ||
226 | struct platform_device *pdev; | ||
227 | struct omap_gpio_platform_data *pdata; | ||
221 | 228 | ||
222 | if (!cpu_is_omap16xx()) | 229 | if (!cpu_is_omap16xx()) |
223 | return -EINVAL; | 230 | return -EINVAL; |
224 | 231 | ||
225 | for (i = 0; i < ARRAY_SIZE(omap16xx_gpio_dev); i++) | 232 | for (i = 0; i < ARRAY_SIZE(omap16xx_gpio_dev); i++) { |
233 | pdev = omap16xx_gpio_dev[i]; | ||
234 | pdata = pdev->dev.platform_data; | ||
235 | |||
236 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
237 | if (unlikely(!res)) { | ||
238 | dev_err(&pdev->dev, "Invalid mem resource.\n"); | ||
239 | return -ENODEV; | ||
240 | } | ||
241 | |||
242 | base = ioremap(res->start, resource_size(res)); | ||
243 | if (unlikely(!base)) { | ||
244 | dev_err(&pdev->dev, "ioremap failed.\n"); | ||
245 | return -ENOMEM; | ||
246 | } | ||
247 | |||
248 | __raw_writel(SYSCONFIG_WORD, base + OMAP1610_GPIO_SYSCONFIG); | ||
249 | iounmap(base); | ||
250 | |||
251 | /* | ||
252 | * Enable system clock for GPIO module. | ||
253 | * The CAM_CLK_CTRL *is* really the right place. | ||
254 | */ | ||
255 | omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04, | ||
256 | ULPD_CAM_CLK_CTRL); | ||
257 | |||
226 | platform_device_register(omap16xx_gpio_dev[i]); | 258 | platform_device_register(omap16xx_gpio_dev[i]); |
259 | } | ||
227 | 260 | ||
228 | return 0; | 261 | return 0; |
229 | } | 262 | } |