aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap1
diff options
context:
space:
mode:
authorTarun Kanti DebBarma <tarun.kanti@ti.com>2011-09-13 05:42:05 -0400
committerTarun Kanti DebBarma <tarun.kanti@ti.com>2012-02-06 03:43:42 -0500
commitab985f0f7c2c0ef90b7c832f0c04f470dda0593d (patch)
tree6a65b11d802d12787147d6cfab49758101f5389f /arch/arm/mach-omap1
parent5e571f38f6a44ef541fac0821631509d787ef0cd (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.c35
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 */
28static struct __initdata resource omap16xx_mpu_gpio_resources[] = { 31static struct __initdata resource omap16xx_mpu_gpio_resources[] = {
29 { 32 {
@@ -218,12 +221,42 @@ static struct __initdata platform_device * omap16xx_gpio_dev[] = {
218static int __init omap16xx_gpio_init(void) 221static 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}