blob: f4ed0c0cef95579dd4cb697a6938f5dc83850ffa [file] [log] [blame]
Gregory Bean2783cc22010-09-10 15:03:36 -07001/* arch/arm/mach-msm/gpio_hw.h
2 *
3 * Copyright (C) 2007 Google, Inc.
4 * Author: Brian Swetland <swetland@google.com>
5 * Copyright (c) 2008-2010, Code Aurora Forum. All rights reserved.
6 *
7 * This software is licensed under the terms of the GNU General Public
8 * License version 2, as published by the Free Software Foundation, and
9 * may be copied, distributed, and modified under those terms.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 */
17
18#ifndef __ARCH_ARM_MACH_MSM_GPIO_HW_H
19#define __ARCH_ARM_MACH_MSM_GPIO_HW_H
20
21#include <mach/msm_iomap.h>
22
23/* see 80-VA736-2 Rev C pp 695-751
24**
25** These are actually the *shadow* gpio registers, since the
26** real ones (which allow full access) are only available to the
27** ARM9 side of the world.
28**
29** Since the _BASE need to be page-aligned when we're mapping them
30** to virtual addresses, adjust for the additional offset in these
31** macros.
32*/
33
34#if defined(CONFIG_ARCH_MSM7X30)
35#define MSM_GPIO1_REG(off) (MSM_GPIO1_BASE + (off))
36#define MSM_GPIO2_REG(off) (MSM_GPIO2_BASE + 0x400 + (off))
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070037#elif defined(CONFIG_ARCH_FSM9XXX)
38#define MSM_GPIO1_REG(off) (MSM_TLMM_BASE + (off))
Gregory Bean2783cc22010-09-10 15:03:36 -070039#else
40#define MSM_GPIO1_REG(off) (MSM_GPIO1_BASE + 0x800 + (off))
41#define MSM_GPIO2_REG(off) (MSM_GPIO2_BASE + 0xC00 + (off))
42#endif
43
44#if defined(CONFIG_ARCH_MSM7X00A) || defined(CONFIG_ARCH_MSM7X25) ||\
45 defined(CONFIG_ARCH_MSM7X27)
46
47/* output value */
48#define MSM_GPIO_OUT_0 MSM_GPIO1_REG(0x00) /* gpio 15-0 */
49#define MSM_GPIO_OUT_1 MSM_GPIO2_REG(0x00) /* gpio 42-16 */
50#define MSM_GPIO_OUT_2 MSM_GPIO1_REG(0x04) /* gpio 67-43 */
51#define MSM_GPIO_OUT_3 MSM_GPIO1_REG(0x08) /* gpio 94-68 */
52#define MSM_GPIO_OUT_4 MSM_GPIO1_REG(0x0C) /* gpio 106-95 */
53#define MSM_GPIO_OUT_5 MSM_GPIO1_REG(0x50) /* gpio 107-121 */
54
55/* same pin map as above, output enable */
56#define MSM_GPIO_OE_0 MSM_GPIO1_REG(0x10)
57#define MSM_GPIO_OE_1 MSM_GPIO2_REG(0x08)
58#define MSM_GPIO_OE_2 MSM_GPIO1_REG(0x14)
59#define MSM_GPIO_OE_3 MSM_GPIO1_REG(0x18)
60#define MSM_GPIO_OE_4 MSM_GPIO1_REG(0x1C)
61#define MSM_GPIO_OE_5 MSM_GPIO1_REG(0x54)
62
63/* same pin map as above, input read */
64#define MSM_GPIO_IN_0 MSM_GPIO1_REG(0x34)
65#define MSM_GPIO_IN_1 MSM_GPIO2_REG(0x20)
66#define MSM_GPIO_IN_2 MSM_GPIO1_REG(0x38)
67#define MSM_GPIO_IN_3 MSM_GPIO1_REG(0x3C)
68#define MSM_GPIO_IN_4 MSM_GPIO1_REG(0x40)
69#define MSM_GPIO_IN_5 MSM_GPIO1_REG(0x44)
70
71/* same pin map as above, 1=edge 0=level interrup */
72#define MSM_GPIO_INT_EDGE_0 MSM_GPIO1_REG(0x60)
73#define MSM_GPIO_INT_EDGE_1 MSM_GPIO2_REG(0x50)
74#define MSM_GPIO_INT_EDGE_2 MSM_GPIO1_REG(0x64)
75#define MSM_GPIO_INT_EDGE_3 MSM_GPIO1_REG(0x68)
76#define MSM_GPIO_INT_EDGE_4 MSM_GPIO1_REG(0x6C)
77#define MSM_GPIO_INT_EDGE_5 MSM_GPIO1_REG(0xC0)
78
79/* same pin map as above, 1=positive 0=negative */
80#define MSM_GPIO_INT_POS_0 MSM_GPIO1_REG(0x70)
81#define MSM_GPIO_INT_POS_1 MSM_GPIO2_REG(0x58)
82#define MSM_GPIO_INT_POS_2 MSM_GPIO1_REG(0x74)
83#define MSM_GPIO_INT_POS_3 MSM_GPIO1_REG(0x78)
84#define MSM_GPIO_INT_POS_4 MSM_GPIO1_REG(0x7C)
85#define MSM_GPIO_INT_POS_5 MSM_GPIO1_REG(0xBC)
86
87/* same pin map as above, interrupt enable */
88#define MSM_GPIO_INT_EN_0 MSM_GPIO1_REG(0x80)
89#define MSM_GPIO_INT_EN_1 MSM_GPIO2_REG(0x60)
90#define MSM_GPIO_INT_EN_2 MSM_GPIO1_REG(0x84)
91#define MSM_GPIO_INT_EN_3 MSM_GPIO1_REG(0x88)
92#define MSM_GPIO_INT_EN_4 MSM_GPIO1_REG(0x8C)
93#define MSM_GPIO_INT_EN_5 MSM_GPIO1_REG(0xB8)
94
95/* same pin map as above, write 1 to clear interrupt */
96#define MSM_GPIO_INT_CLEAR_0 MSM_GPIO1_REG(0x90)
97#define MSM_GPIO_INT_CLEAR_1 MSM_GPIO2_REG(0x68)
98#define MSM_GPIO_INT_CLEAR_2 MSM_GPIO1_REG(0x94)
99#define MSM_GPIO_INT_CLEAR_3 MSM_GPIO1_REG(0x98)
100#define MSM_GPIO_INT_CLEAR_4 MSM_GPIO1_REG(0x9C)
101#define MSM_GPIO_INT_CLEAR_5 MSM_GPIO1_REG(0xB4)
102
103/* same pin map as above, 1=interrupt pending */
104#define MSM_GPIO_INT_STATUS_0 MSM_GPIO1_REG(0xA0)
105#define MSM_GPIO_INT_STATUS_1 MSM_GPIO2_REG(0x70)
106#define MSM_GPIO_INT_STATUS_2 MSM_GPIO1_REG(0xA4)
107#define MSM_GPIO_INT_STATUS_3 MSM_GPIO1_REG(0xA8)
108#define MSM_GPIO_INT_STATUS_4 MSM_GPIO1_REG(0xAC)
109#define MSM_GPIO_INT_STATUS_5 MSM_GPIO1_REG(0xB0)
110
111#endif
112
113#if defined(CONFIG_ARCH_QSD8X50)
114/* output value */
115#define MSM_GPIO_OUT_0 MSM_GPIO1_REG(0x00) /* gpio 15-0 */
116#define MSM_GPIO_OUT_1 MSM_GPIO2_REG(0x00) /* gpio 42-16 */
117#define MSM_GPIO_OUT_2 MSM_GPIO1_REG(0x04) /* gpio 67-43 */
118#define MSM_GPIO_OUT_3 MSM_GPIO1_REG(0x08) /* gpio 94-68 */
119#define MSM_GPIO_OUT_4 MSM_GPIO1_REG(0x0C) /* gpio 103-95 */
120#define MSM_GPIO_OUT_5 MSM_GPIO1_REG(0x10) /* gpio 121-104 */
121#define MSM_GPIO_OUT_6 MSM_GPIO1_REG(0x14) /* gpio 152-122 */
122#define MSM_GPIO_OUT_7 MSM_GPIO1_REG(0x18) /* gpio 164-153 */
123
124/* same pin map as above, output enable */
125#define MSM_GPIO_OE_0 MSM_GPIO1_REG(0x20)
126#define MSM_GPIO_OE_1 MSM_GPIO2_REG(0x08)
127#define MSM_GPIO_OE_2 MSM_GPIO1_REG(0x24)
128#define MSM_GPIO_OE_3 MSM_GPIO1_REG(0x28)
129#define MSM_GPIO_OE_4 MSM_GPIO1_REG(0x2C)
130#define MSM_GPIO_OE_5 MSM_GPIO1_REG(0x30)
131#define MSM_GPIO_OE_6 MSM_GPIO1_REG(0x34)
132#define MSM_GPIO_OE_7 MSM_GPIO1_REG(0x38)
133
134/* same pin map as above, input read */
135#define MSM_GPIO_IN_0 MSM_GPIO1_REG(0x50)
136#define MSM_GPIO_IN_1 MSM_GPIO2_REG(0x20)
137#define MSM_GPIO_IN_2 MSM_GPIO1_REG(0x54)
138#define MSM_GPIO_IN_3 MSM_GPIO1_REG(0x58)
139#define MSM_GPIO_IN_4 MSM_GPIO1_REG(0x5C)
140#define MSM_GPIO_IN_5 MSM_GPIO1_REG(0x60)
141#define MSM_GPIO_IN_6 MSM_GPIO1_REG(0x64)
142#define MSM_GPIO_IN_7 MSM_GPIO1_REG(0x68)
143
144/* same pin map as above, 1=edge 0=level interrup */
145#define MSM_GPIO_INT_EDGE_0 MSM_GPIO1_REG(0x70)
146#define MSM_GPIO_INT_EDGE_1 MSM_GPIO2_REG(0x50)
147#define MSM_GPIO_INT_EDGE_2 MSM_GPIO1_REG(0x74)
148#define MSM_GPIO_INT_EDGE_3 MSM_GPIO1_REG(0x78)
149#define MSM_GPIO_INT_EDGE_4 MSM_GPIO1_REG(0x7C)
150#define MSM_GPIO_INT_EDGE_5 MSM_GPIO1_REG(0x80)
151#define MSM_GPIO_INT_EDGE_6 MSM_GPIO1_REG(0x84)
152#define MSM_GPIO_INT_EDGE_7 MSM_GPIO1_REG(0x88)
153
154/* same pin map as above, 1=positive 0=negative */
155#define MSM_GPIO_INT_POS_0 MSM_GPIO1_REG(0x90)
156#define MSM_GPIO_INT_POS_1 MSM_GPIO2_REG(0x58)
157#define MSM_GPIO_INT_POS_2 MSM_GPIO1_REG(0x94)
158#define MSM_GPIO_INT_POS_3 MSM_GPIO1_REG(0x98)
159#define MSM_GPIO_INT_POS_4 MSM_GPIO1_REG(0x9C)
160#define MSM_GPIO_INT_POS_5 MSM_GPIO1_REG(0xA0)
161#define MSM_GPIO_INT_POS_6 MSM_GPIO1_REG(0xA4)
162#define MSM_GPIO_INT_POS_7 MSM_GPIO1_REG(0xA8)
163
164/* same pin map as above, interrupt enable */
165#define MSM_GPIO_INT_EN_0 MSM_GPIO1_REG(0xB0)
166#define MSM_GPIO_INT_EN_1 MSM_GPIO2_REG(0x60)
167#define MSM_GPIO_INT_EN_2 MSM_GPIO1_REG(0xB4)
168#define MSM_GPIO_INT_EN_3 MSM_GPIO1_REG(0xB8)
169#define MSM_GPIO_INT_EN_4 MSM_GPIO1_REG(0xBC)
170#define MSM_GPIO_INT_EN_5 MSM_GPIO1_REG(0xC0)
171#define MSM_GPIO_INT_EN_6 MSM_GPIO1_REG(0xC4)
172#define MSM_GPIO_INT_EN_7 MSM_GPIO1_REG(0xC8)
173
174/* same pin map as above, write 1 to clear interrupt */
175#define MSM_GPIO_INT_CLEAR_0 MSM_GPIO1_REG(0xD0)
176#define MSM_GPIO_INT_CLEAR_1 MSM_GPIO2_REG(0x68)
177#define MSM_GPIO_INT_CLEAR_2 MSM_GPIO1_REG(0xD4)
178#define MSM_GPIO_INT_CLEAR_3 MSM_GPIO1_REG(0xD8)
179#define MSM_GPIO_INT_CLEAR_4 MSM_GPIO1_REG(0xDC)
180#define MSM_GPIO_INT_CLEAR_5 MSM_GPIO1_REG(0xE0)
181#define MSM_GPIO_INT_CLEAR_6 MSM_GPIO1_REG(0xE4)
182#define MSM_GPIO_INT_CLEAR_7 MSM_GPIO1_REG(0xE8)
183
184/* same pin map as above, 1=interrupt pending */
185#define MSM_GPIO_INT_STATUS_0 MSM_GPIO1_REG(0xF0)
186#define MSM_GPIO_INT_STATUS_1 MSM_GPIO2_REG(0x70)
187#define MSM_GPIO_INT_STATUS_2 MSM_GPIO1_REG(0xF4)
188#define MSM_GPIO_INT_STATUS_3 MSM_GPIO1_REG(0xF8)
189#define MSM_GPIO_INT_STATUS_4 MSM_GPIO1_REG(0xFC)
190#define MSM_GPIO_INT_STATUS_5 MSM_GPIO1_REG(0x100)
191#define MSM_GPIO_INT_STATUS_6 MSM_GPIO1_REG(0x104)
192#define MSM_GPIO_INT_STATUS_7 MSM_GPIO1_REG(0x108)
193
194#endif
195
196#if defined(CONFIG_ARCH_MSM7X30)
197
198/* output value */
199#define MSM_GPIO_OUT_0 MSM_GPIO1_REG(0x00) /* gpio 15-0 */
200#define MSM_GPIO_OUT_1 MSM_GPIO2_REG(0x00) /* gpio 43-16 */
201#define MSM_GPIO_OUT_2 MSM_GPIO1_REG(0x04) /* gpio 67-44 */
202#define MSM_GPIO_OUT_3 MSM_GPIO1_REG(0x08) /* gpio 94-68 */
203#define MSM_GPIO_OUT_4 MSM_GPIO1_REG(0x0C) /* gpio 106-95 */
204#define MSM_GPIO_OUT_5 MSM_GPIO1_REG(0x50) /* gpio 133-107 */
205#define MSM_GPIO_OUT_6 MSM_GPIO1_REG(0xC4) /* gpio 150-134 */
206#define MSM_GPIO_OUT_7 MSM_GPIO1_REG(0x214) /* gpio 181-151 */
207
208/* same pin map as above, output enable */
209#define MSM_GPIO_OE_0 MSM_GPIO1_REG(0x10)
210#define MSM_GPIO_OE_1 MSM_GPIO2_REG(0x08)
211#define MSM_GPIO_OE_2 MSM_GPIO1_REG(0x14)
212#define MSM_GPIO_OE_3 MSM_GPIO1_REG(0x18)
213#define MSM_GPIO_OE_4 MSM_GPIO1_REG(0x1C)
214#define MSM_GPIO_OE_5 MSM_GPIO1_REG(0x54)
215#define MSM_GPIO_OE_6 MSM_GPIO1_REG(0xC8)
216#define MSM_GPIO_OE_7 MSM_GPIO1_REG(0x218)
217
218/* same pin map as above, input read */
219#define MSM_GPIO_IN_0 MSM_GPIO1_REG(0x34)
220#define MSM_GPIO_IN_1 MSM_GPIO2_REG(0x20)
221#define MSM_GPIO_IN_2 MSM_GPIO1_REG(0x38)
222#define MSM_GPIO_IN_3 MSM_GPIO1_REG(0x3C)
223#define MSM_GPIO_IN_4 MSM_GPIO1_REG(0x40)
224#define MSM_GPIO_IN_5 MSM_GPIO1_REG(0x44)
225#define MSM_GPIO_IN_6 MSM_GPIO1_REG(0xCC)
226#define MSM_GPIO_IN_7 MSM_GPIO1_REG(0x21C)
227
228/* same pin map as above, 1=edge 0=level interrup */
229#define MSM_GPIO_INT_EDGE_0 MSM_GPIO1_REG(0x60)
230#define MSM_GPIO_INT_EDGE_1 MSM_GPIO2_REG(0x50)
231#define MSM_GPIO_INT_EDGE_2 MSM_GPIO1_REG(0x64)
232#define MSM_GPIO_INT_EDGE_3 MSM_GPIO1_REG(0x68)
233#define MSM_GPIO_INT_EDGE_4 MSM_GPIO1_REG(0x6C)
234#define MSM_GPIO_INT_EDGE_5 MSM_GPIO1_REG(0xC0)
235#define MSM_GPIO_INT_EDGE_6 MSM_GPIO1_REG(0xD0)
236#define MSM_GPIO_INT_EDGE_7 MSM_GPIO1_REG(0x240)
237
238/* same pin map as above, 1=positive 0=negative */
239#define MSM_GPIO_INT_POS_0 MSM_GPIO1_REG(0x70)
240#define MSM_GPIO_INT_POS_1 MSM_GPIO2_REG(0x58)
241#define MSM_GPIO_INT_POS_2 MSM_GPIO1_REG(0x74)
242#define MSM_GPIO_INT_POS_3 MSM_GPIO1_REG(0x78)
243#define MSM_GPIO_INT_POS_4 MSM_GPIO1_REG(0x7C)
244#define MSM_GPIO_INT_POS_5 MSM_GPIO1_REG(0xBC)
245#define MSM_GPIO_INT_POS_6 MSM_GPIO1_REG(0xD4)
246#define MSM_GPIO_INT_POS_7 MSM_GPIO1_REG(0x228)
247
248/* same pin map as above, interrupt enable */
249#define MSM_GPIO_INT_EN_0 MSM_GPIO1_REG(0x80)
250#define MSM_GPIO_INT_EN_1 MSM_GPIO2_REG(0x60)
251#define MSM_GPIO_INT_EN_2 MSM_GPIO1_REG(0x84)
252#define MSM_GPIO_INT_EN_3 MSM_GPIO1_REG(0x88)
253#define MSM_GPIO_INT_EN_4 MSM_GPIO1_REG(0x8C)
254#define MSM_GPIO_INT_EN_5 MSM_GPIO1_REG(0xB8)
255#define MSM_GPIO_INT_EN_6 MSM_GPIO1_REG(0xD8)
256#define MSM_GPIO_INT_EN_7 MSM_GPIO1_REG(0x22C)
257
258/* same pin map as above, write 1 to clear interrupt */
259#define MSM_GPIO_INT_CLEAR_0 MSM_GPIO1_REG(0x90)
260#define MSM_GPIO_INT_CLEAR_1 MSM_GPIO2_REG(0x68)
261#define MSM_GPIO_INT_CLEAR_2 MSM_GPIO1_REG(0x94)
262#define MSM_GPIO_INT_CLEAR_3 MSM_GPIO1_REG(0x98)
263#define MSM_GPIO_INT_CLEAR_4 MSM_GPIO1_REG(0x9C)
264#define MSM_GPIO_INT_CLEAR_5 MSM_GPIO1_REG(0xB4)
265#define MSM_GPIO_INT_CLEAR_6 MSM_GPIO1_REG(0xDC)
266#define MSM_GPIO_INT_CLEAR_7 MSM_GPIO1_REG(0x230)
267
268/* same pin map as above, 1=interrupt pending */
269#define MSM_GPIO_INT_STATUS_0 MSM_GPIO1_REG(0xA0)
270#define MSM_GPIO_INT_STATUS_1 MSM_GPIO2_REG(0x70)
271#define MSM_GPIO_INT_STATUS_2 MSM_GPIO1_REG(0xA4)
272#define MSM_GPIO_INT_STATUS_3 MSM_GPIO1_REG(0xA8)
273#define MSM_GPIO_INT_STATUS_4 MSM_GPIO1_REG(0xAC)
274#define MSM_GPIO_INT_STATUS_5 MSM_GPIO1_REG(0xB0)
275#define MSM_GPIO_INT_STATUS_6 MSM_GPIO1_REG(0xE0)
276#define MSM_GPIO_INT_STATUS_7 MSM_GPIO1_REG(0x234)
277
278#endif
279
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700280#if defined(CONFIG_ARCH_FSM9XXX)
281
282/* output value */
283#define MSM_GPIO_OUT_G(group) MSM_GPIO1_REG(0x00 + (group) * 4)
284#define MSM_GPIO_OUT_N(gpio) MSM_GPIO_OUT_G((gpio) / 32)
285#define MSM_GPIO_OUT_0 MSM_GPIO_OUT_G(0) /* gpio 31-0 */
286#define MSM_GPIO_OUT_1 MSM_GPIO_OUT_G(1) /* gpio 63-32 */
287#define MSM_GPIO_OUT_2 MSM_GPIO_OUT_G(2) /* gpio 95-64 */
288#define MSM_GPIO_OUT_3 MSM_GPIO_OUT_G(3) /* gpio 127-96 */
289#define MSM_GPIO_OUT_4 MSM_GPIO_OUT_G(4) /* gpio 159-128 */
290#define MSM_GPIO_OUT_5 MSM_GPIO_OUT_G(5) /* gpio 167-160 */
291
292/* same pin map as above, output enable */
293#define MSM_GPIO_OE_G(group) MSM_GPIO1_REG(0x20 + (group) * 4)
294#define MSM_GPIO_OE_N(gpio) MSM_GPIO_OE_G((gpio) / 32)
295#define MSM_GPIO_OE_0 MSM_GPIO_OE_G(0)
296#define MSM_GPIO_OE_1 MSM_GPIO_OE_G(1)
297#define MSM_GPIO_OE_2 MSM_GPIO_OE_G(2)
298#define MSM_GPIO_OE_3 MSM_GPIO_OE_G(3)
299#define MSM_GPIO_OE_4 MSM_GPIO_OE_G(4)
300#define MSM_GPIO_OE_5 MSM_GPIO_OE_G(5)
301
302/* same pin map as above, input read */
303#define MSM_GPIO_IN_G(group) MSM_GPIO1_REG(0x48 + (group) * 4)
304#define MSM_GPIO_IN_N(gpio) MSM_GPIO_IN_G((gpio) / 32)
305#define MSM_GPIO_IN_0 MSM_GPIO_IN_G(0)
306#define MSM_GPIO_IN_1 MSM_GPIO_IN_G(1)
307#define MSM_GPIO_IN_2 MSM_GPIO_IN_G(2)
308#define MSM_GPIO_IN_3 MSM_GPIO_IN_G(3)
309#define MSM_GPIO_IN_4 MSM_GPIO_IN_G(4)
310#define MSM_GPIO_IN_5 MSM_GPIO_IN_G(5)
311
312/* configuration */
313#define MSM_GPIO_PAGE MSM_GPIO1_REG(0x40)
314#define MSM_GPIO_CONFIG MSM_GPIO1_REG(0x44)
315
316#endif /* CONFIG_ARCH_FSM9XXX */
317
Gregory Bean2783cc22010-09-10 15:03:36 -0700318#endif