]> rtime.felk.cvut.cz Git - can-eth-gw-linux.git/blob - arch/arm/mach-omap1/gpio15xx.c
ARM: mxs_defconfig: Improve USB related support
[can-eth-gw-linux.git] / arch / arm / mach-omap1 / gpio15xx.c
1 /*
2  * OMAP15xx specific gpio init
3  *
4  * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
5  *
6  * Author:
7  *      Charulatha V <charu@ti.com>
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License as
11  * published by the Free Software Foundation version 2.
12  *
13  * This program is distributed "as is" WITHOUT ANY WARRANTY of any
14  * kind, whether express or implied; without even the implied warranty
15  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  */
18
19 #include <linux/gpio.h>
20 #include <linux/platform_data/gpio-omap.h>
21
22 #define OMAP1_MPUIO_VBASE               OMAP1_MPUIO_BASE
23 #define OMAP1510_GPIO_BASE              0xFFFCE000
24
25 /* gpio1 */
26 static struct __initdata resource omap15xx_mpu_gpio_resources[] = {
27         {
28                 .start  = OMAP1_MPUIO_VBASE,
29                 .end    = OMAP1_MPUIO_VBASE + SZ_2K - 1,
30                 .flags  = IORESOURCE_MEM,
31         },
32         {
33                 .start  = INT_MPUIO,
34                 .flags  = IORESOURCE_IRQ,
35         },
36 };
37
38 static struct omap_gpio_reg_offs omap15xx_mpuio_regs = {
39         .revision       = USHRT_MAX,
40         .direction      = OMAP_MPUIO_IO_CNTL,
41         .datain         = OMAP_MPUIO_INPUT_LATCH,
42         .dataout        = OMAP_MPUIO_OUTPUT,
43         .irqstatus      = OMAP_MPUIO_GPIO_INT,
44         .irqenable      = OMAP_MPUIO_GPIO_MASKIT,
45         .irqenable_inv  = true,
46         .irqctrl        = OMAP_MPUIO_GPIO_INT_EDGE,
47 };
48
49 static struct __initdata omap_gpio_platform_data omap15xx_mpu_gpio_config = {
50         .is_mpuio               = true,
51         .bank_width             = 16,
52         .bank_stride            = 1,
53         .regs                   = &omap15xx_mpuio_regs,
54 };
55
56 static struct platform_device omap15xx_mpu_gpio = {
57         .name           = "omap_gpio",
58         .id             = 0,
59         .dev            = {
60                 .platform_data = &omap15xx_mpu_gpio_config,
61         },
62         .num_resources = ARRAY_SIZE(omap15xx_mpu_gpio_resources),
63         .resource = omap15xx_mpu_gpio_resources,
64 };
65
66 /* gpio2 */
67 static struct __initdata resource omap15xx_gpio_resources[] = {
68         {
69                 .start  = OMAP1510_GPIO_BASE,
70                 .end    = OMAP1510_GPIO_BASE + SZ_2K - 1,
71                 .flags  = IORESOURCE_MEM,
72         },
73         {
74                 .start  = INT_GPIO_BANK1,
75                 .flags  = IORESOURCE_IRQ,
76         },
77 };
78
79 static struct omap_gpio_reg_offs omap15xx_gpio_regs = {
80         .revision       = USHRT_MAX,
81         .direction      = OMAP1510_GPIO_DIR_CONTROL,
82         .datain         = OMAP1510_GPIO_DATA_INPUT,
83         .dataout        = OMAP1510_GPIO_DATA_OUTPUT,
84         .irqstatus      = OMAP1510_GPIO_INT_STATUS,
85         .irqenable      = OMAP1510_GPIO_INT_MASK,
86         .irqenable_inv  = true,
87         .irqctrl        = OMAP1510_GPIO_INT_CONTROL,
88         .pinctrl        = OMAP1510_GPIO_PIN_CONTROL,
89 };
90
91 static struct __initdata omap_gpio_platform_data omap15xx_gpio_config = {
92         .bank_width             = 16,
93         .regs                   = &omap15xx_gpio_regs,
94 };
95
96 static struct platform_device omap15xx_gpio = {
97         .name           = "omap_gpio",
98         .id             = 1,
99         .dev            = {
100                 .platform_data = &omap15xx_gpio_config,
101         },
102         .num_resources = ARRAY_SIZE(omap15xx_gpio_resources),
103         .resource = omap15xx_gpio_resources,
104 };
105
106 /*
107  * omap15xx_gpio_init needs to be done before
108  * machine_init functions access gpio APIs.
109  * Hence omap15xx_gpio_init is a postcore_initcall.
110  */
111 static int __init omap15xx_gpio_init(void)
112 {
113         if (!cpu_is_omap15xx())
114                 return -EINVAL;
115
116         platform_device_register(&omap15xx_mpu_gpio);
117         platform_device_register(&omap15xx_gpio);
118
119         return 0;
120 }
121 postcore_initcall(omap15xx_gpio_init);