c6cd2ca8854a68fa711bc3a28b7e4ac8806adf80
[linux-2.6.git] / include / linux / mfd / wm8350 / gpio.h
1 /*
2  * gpio.h  --  GPIO Driver for Wolfson WM8350 PMIC
3  *
4  * Copyright 2007 Wolfson Microelectronics PLC
5  *
6  *  This program is free software; you can redistribute  it and/or modify it
7  *  under  the terms of  the GNU General  Public License as published by the
8  *  Free Software Foundation;  either version 2 of the  License, or (at your
9  *  option) any later version.
10  *
11  */
12
13 #ifndef __LINUX_MFD_WM8350_GPIO_H_
14 #define __LINUX_MFD_WM8350_GPIO_H_
15
16 /*
17  * GPIO Registers.
18  */
19 #define WM8350_GPIO_DEBOUNCE                    0x80
20 #define WM8350_GPIO_PIN_PULL_UP_CONTROL         0x81
21 #define WM8350_GPIO_PULL_DOWN_CONTROL           0x82
22 #define WM8350_GPIO_INT_MODE                    0x83
23 #define WM8350_GPIO_CONTROL                     0x85
24 #define WM8350_GPIO_CONFIGURATION_I_O           0x86
25 #define WM8350_GPIO_PIN_POLARITY_TYPE           0x87
26 #define WM8350_GPIO_FUNCTION_SELECT_1           0x8C
27 #define WM8350_GPIO_FUNCTION_SELECT_2           0x8D
28 #define WM8350_GPIO_FUNCTION_SELECT_3           0x8E
29 #define WM8350_GPIO_FUNCTION_SELECT_4           0x8F
30
31 /*
32  * GPIO Functions
33  */
34 #define WM8350_GPIO0_GPIO_IN                    0x0
35 #define WM8350_GPIO0_GPIO_OUT                   0x0
36 #define WM8350_GPIO0_PWR_ON_IN                  0x1
37 #define WM8350_GPIO0_PWR_ON_OUT                 0x1
38 #define WM8350_GPIO0_LDO_EN_IN                  0x2
39 #define WM8350_GPIO0_VRTC_OUT                   0x2
40 #define WM8350_GPIO0_LPWR1_IN                   0x3
41 #define WM8350_GPIO0_POR_B_OUT                  0x3
42
43 #define WM8350_GPIO1_GPIO_IN                    0x0
44 #define WM8350_GPIO1_GPIO_OUT                   0x0
45 #define WM8350_GPIO1_PWR_ON_IN                  0x1
46 #define WM8350_GPIO1_DO_CONF_OUT                0x1
47 #define WM8350_GPIO1_LDO_EN_IN                  0x2
48 #define WM8350_GPIO1_RESET_OUT                  0x2
49 #define WM8350_GPIO1_LPWR2_IN                   0x3
50 #define WM8350_GPIO1_MEMRST_OUT                 0x3
51
52 #define WM8350_GPIO2_GPIO_IN                    0x0
53 #define WM8350_GPIO2_GPIO_OUT                   0x0
54 #define WM8350_GPIO2_PWR_ON_IN                  0x1
55 #define WM8350_GPIO2_PWR_ON_OUT                 0x1
56 #define WM8350_GPIO2_WAKE_UP_IN                 0x2
57 #define WM8350_GPIO2_VRTC_OUT                   0x2
58 #define WM8350_GPIO2_32KHZ_IN                   0x3
59 #define WM8350_GPIO2_32KHZ_OUT                  0x3
60
61 #define WM8350_GPIO3_GPIO_IN                    0x0
62 #define WM8350_GPIO3_GPIO_OUT                   0x0
63 #define WM8350_GPIO3_PWR_ON_IN                  0x1
64 #define WM8350_GPIO3_P_CLK_OUT                  0x1
65 #define WM8350_GPIO3_LDO_EN_IN                  0x2
66 #define WM8350_GPIO3_VRTC_OUT                   0x2
67 #define WM8350_GPIO3_PWR_OFF_IN                 0x3
68 #define WM8350_GPIO3_32KHZ_OUT                  0x3
69
70 #define WM8350_GPIO4_GPIO_IN                    0x0
71 #define WM8350_GPIO4_GPIO_OUT                   0x0
72 #define WM8350_GPIO4_MR_IN                      0x1
73 #define WM8350_GPIO4_MEM_RST_OUT                0x1
74 #define WM8350_GPIO4_FLASH_IN                   0x2
75 #define WM8350_GPIO4_ADA_OUT                    0x2
76 #define WM8350_GPIO4_HIBERNATE_IN               0x3
77 #define WM8350_GPIO4_FLASH_OUT                  0x3
78 #define WM8350_GPIO4_MICDET_OUT                 0x4
79 #define WM8350_GPIO4_MICSHT_OUT                 0x5
80
81 #define WM8350_GPIO5_GPIO_IN                    0x0
82 #define WM8350_GPIO5_GPIO_OUT                   0x0
83 #define WM8350_GPIO5_LPWR1_IN                   0x1
84 #define WM8350_GPIO5_P_CLK_OUT                  0x1
85 #define WM8350_GPIO5_ADCLRCLK_IN                0x2
86 #define WM8350_GPIO5_ADCLRCLK_OUT               0x2
87 #define WM8350_GPIO5_HIBERNATE_IN               0x3
88 #define WM8350_GPIO5_32KHZ_OUT                  0x3
89 #define WM8350_GPIO5_MICDET_OUT                 0x4
90 #define WM8350_GPIO5_MICSHT_OUT                 0x5
91 #define WM8350_GPIO5_ADA_OUT                    0x6
92 #define WM8350_GPIO5_OPCLK_OUT                  0x7
93
94 #define WM8350_GPIO6_GPIO_IN                    0x0
95 #define WM8350_GPIO6_GPIO_OUT                   0x0
96 #define WM8350_GPIO6_LPWR2_IN                   0x1
97 #define WM8350_GPIO6_MEMRST_OUT                 0x1
98 #define WM8350_GPIO6_FLASH_IN                   0x2
99 #define WM8350_GPIO6_ADA_OUT                    0x2
100 #define WM8350_GPIO6_HIBERNATE_IN               0x3
101 #define WM8350_GPIO6_RTC_OUT                    0x3
102 #define WM8350_GPIO6_MICDET_OUT                 0x4
103 #define WM8350_GPIO6_MICSHT_OUT                 0x5
104 #define WM8350_GPIO6_ADCLRCLKB_OUT              0x6
105 #define WM8350_GPIO6_SDOUT_OUT                  0x7
106
107 #define WM8350_GPIO7_GPIO_IN                    0x0
108 #define WM8350_GPIO7_GPIO_OUT                   0x0
109 #define WM8350_GPIO7_LPWR3_IN                   0x1
110 #define WM8350_GPIO7_P_CLK_OUT                  0x1
111 #define WM8350_GPIO7_MASK_IN                    0x2
112 #define WM8350_GPIO7_VCC_FAULT_OUT              0x2
113 #define WM8350_GPIO7_HIBERNATE_IN               0x3
114 #define WM8350_GPIO7_BATT_FAULT_OUT             0x3
115 #define WM8350_GPIO7_MICDET_OUT                 0x4
116 #define WM8350_GPIO7_MICSHT_OUT                 0x5
117 #define WM8350_GPIO7_ADA_OUT                    0x6
118 #define WM8350_GPIO7_CSB_IN                     0x7
119
120 #define WM8350_GPIO8_GPIO_IN                    0x0
121 #define WM8350_GPIO8_GPIO_OUT                   0x0
122 #define WM8350_GPIO8_MR_IN                      0x1
123 #define WM8350_GPIO8_VCC_FAULT_OUT              0x1
124 #define WM8350_GPIO8_ADCBCLK_IN                 0x2
125 #define WM8350_GPIO8_ADCBCLK_OUT                0x2
126 #define WM8350_GPIO8_PWR_OFF_IN                 0x3
127 #define WM8350_GPIO8_BATT_FAULT_OUT             0x3
128 #define WM8350_GPIO8_ALTSCL_IN                  0xf
129
130 #define WM8350_GPIO9_GPIO_IN                    0x0
131 #define WM8350_GPIO9_GPIO_OUT                   0x0
132 #define WM8350_GPIO9_HEARTBEAT_IN               0x1
133 #define WM8350_GPIO9_VCC_FAULT_OUT              0x1
134 #define WM8350_GPIO9_MASK_IN                    0x2
135 #define WM8350_GPIO9_LINE_GT_BATT_OUT           0x2
136 #define WM8350_GPIO9_PWR_OFF_IN                 0x3
137 #define WM8350_GPIO9_BATT_FAULT_OUT             0x3
138 #define WM8350_GPIO9_ALTSDA_OUT                 0xf
139
140 #define WM8350_GPIO10_GPIO_IN                   0x0
141 #define WM8350_GPIO10_GPIO_OUT                  0x0
142 #define WM8350_GPIO10_ISINKC_OUT                0x1
143 #define WM8350_GPIO10_PWR_OFF_IN                0x2
144 #define WM8350_GPIO10_LINE_GT_BATT_OUT          0x2
145 #define WM8350_GPIO10_CHD_IND_IN                0x3
146
147 #define WM8350_GPIO11_GPIO_IN                   0x0
148 #define WM8350_GPIO11_GPIO_OUT                  0x0
149 #define WM8350_GPIO11_ISINKD_OUT                0x1
150 #define WM8350_GPIO11_WAKEUP_IN                 0x2
151 #define WM8350_GPIO11_LINE_GT_BATT_OUT          0x2
152 #define WM8350_GPIO11_CHD_IND_IN                0x3
153
154 #define WM8350_GPIO12_GPIO_IN                   0x0
155 #define WM8350_GPIO12_GPIO_OUT                  0x0
156 #define WM8350_GPIO12_ISINKE_OUT                0x1
157 #define WM8350_GPIO12_LINE_GT_BATT_OUT          0x2
158 #define WM8350_GPIO12_LINE_EN_OUT               0x3
159 #define WM8350_GPIO12_32KHZ_OUT                 0x4
160
161 #define WM8350_GPIO_DIR_IN                      0
162 #define WM8350_GPIO_DIR_OUT                     1
163 #define WM8350_GPIO_ACTIVE_LOW                  0
164 #define WM8350_GPIO_ACTIVE_HIGH                 1
165 #define WM8350_GPIO_PULL_NONE                   0
166 #define WM8350_GPIO_PULL_UP                     1
167 #define WM8350_GPIO_PULL_DOWN                   2
168 #define WM8350_GPIO_INVERT_OFF                  0
169 #define WM8350_GPIO_INVERT_ON                   1
170 #define WM8350_GPIO_DEBOUNCE_OFF                0
171 #define WM8350_GPIO_DEBOUNCE_ON                 1
172
173 /*
174  * R128 (0x80) - GPIO Debounce
175  */
176 #define WM8350_GP12_DB                          0x1000
177 #define WM8350_GP11_DB                          0x0800
178 #define WM8350_GP10_DB                          0x0400
179 #define WM8350_GP9_DB                           0x0200
180 #define WM8350_GP8_DB                           0x0100
181 #define WM8350_GP7_DB                           0x0080
182 #define WM8350_GP6_DB                           0x0040
183 #define WM8350_GP5_DB                           0x0020
184 #define WM8350_GP4_DB                           0x0010
185 #define WM8350_GP3_DB                           0x0008
186 #define WM8350_GP2_DB                           0x0004
187 #define WM8350_GP1_DB                           0x0002
188 #define WM8350_GP0_DB                           0x0001
189
190 /*
191  * R129 (0x81) - GPIO Pin pull up Control
192  */
193 #define WM8350_GP12_PU                          0x1000
194 #define WM8350_GP11_PU                          0x0800
195 #define WM8350_GP10_PU                          0x0400
196 #define WM8350_GP9_PU                           0x0200
197 #define WM8350_GP8_PU                           0x0100
198 #define WM8350_GP7_PU                           0x0080
199 #define WM8350_GP6_PU                           0x0040
200 #define WM8350_GP5_PU                           0x0020
201 #define WM8350_GP4_PU                           0x0010
202 #define WM8350_GP3_PU                           0x0008
203 #define WM8350_GP2_PU                           0x0004
204 #define WM8350_GP1_PU                           0x0002
205 #define WM8350_GP0_PU                           0x0001
206
207 /*
208  * R130 (0x82) - GPIO Pull down Control
209  */
210 #define WM8350_GP12_PD                          0x1000
211 #define WM8350_GP11_PD                          0x0800
212 #define WM8350_GP10_PD                          0x0400
213 #define WM8350_GP9_PD                           0x0200
214 #define WM8350_GP8_PD                           0x0100
215 #define WM8350_GP7_PD                           0x0080
216 #define WM8350_GP6_PD                           0x0040
217 #define WM8350_GP5_PD                           0x0020
218 #define WM8350_GP4_PD                           0x0010
219 #define WM8350_GP3_PD                           0x0008
220 #define WM8350_GP2_PD                           0x0004
221 #define WM8350_GP1_PD                           0x0002
222 #define WM8350_GP0_PD                           0x0001
223
224 /*
225  * R131 (0x83) - GPIO Interrupt Mode
226  */
227 #define WM8350_GP12_INTMODE                     0x1000
228 #define WM8350_GP11_INTMODE                     0x0800
229 #define WM8350_GP10_INTMODE                     0x0400
230 #define WM8350_GP9_INTMODE                      0x0200
231 #define WM8350_GP8_INTMODE                      0x0100
232 #define WM8350_GP7_INTMODE                      0x0080
233 #define WM8350_GP6_INTMODE                      0x0040
234 #define WM8350_GP5_INTMODE                      0x0020
235 #define WM8350_GP4_INTMODE                      0x0010
236 #define WM8350_GP3_INTMODE                      0x0008
237 #define WM8350_GP2_INTMODE                      0x0004
238 #define WM8350_GP1_INTMODE                      0x0002
239 #define WM8350_GP0_INTMODE                      0x0001
240
241 /*
242  * R133 (0x85) - GPIO Control
243  */
244 #define WM8350_GP_DBTIME_MASK                   0x00C0
245
246 /*
247  * R134 (0x86) - GPIO Configuration (i/o)
248  */
249 #define WM8350_GP12_DIR                         0x1000
250 #define WM8350_GP11_DIR                         0x0800
251 #define WM8350_GP10_DIR                         0x0400
252 #define WM8350_GP9_DIR                          0x0200
253 #define WM8350_GP8_DIR                          0x0100
254 #define WM8350_GP7_DIR                          0x0080
255 #define WM8350_GP6_DIR                          0x0040
256 #define WM8350_GP5_DIR                          0x0020
257 #define WM8350_GP4_DIR                          0x0010
258 #define WM8350_GP3_DIR                          0x0008
259 #define WM8350_GP2_DIR                          0x0004
260 #define WM8350_GP1_DIR                          0x0002
261 #define WM8350_GP0_DIR                          0x0001
262
263 /*
264  * R135 (0x87) - GPIO Pin Polarity / Type
265  */
266 #define WM8350_GP12_CFG                         0x1000
267 #define WM8350_GP11_CFG                         0x0800
268 #define WM8350_GP10_CFG                         0x0400
269 #define WM8350_GP9_CFG                          0x0200
270 #define WM8350_GP8_CFG                          0x0100
271 #define WM8350_GP7_CFG                          0x0080
272 #define WM8350_GP6_CFG                          0x0040
273 #define WM8350_GP5_CFG                          0x0020
274 #define WM8350_GP4_CFG                          0x0010
275 #define WM8350_GP3_CFG                          0x0008
276 #define WM8350_GP2_CFG                          0x0004
277 #define WM8350_GP1_CFG                          0x0002
278 #define WM8350_GP0_CFG                          0x0001
279
280 /*
281  * R140 (0x8C) - GPIO Function Select 1
282  */
283 #define WM8350_GP3_FN_MASK                      0xF000
284 #define WM8350_GP2_FN_MASK                      0x0F00
285 #define WM8350_GP1_FN_MASK                      0x00F0
286 #define WM8350_GP0_FN_MASK                      0x000F
287
288 /*
289  * R141 (0x8D) - GPIO Function Select 2
290  */
291 #define WM8350_GP7_FN_MASK                      0xF000
292 #define WM8350_GP6_FN_MASK                      0x0F00
293 #define WM8350_GP5_FN_MASK                      0x00F0
294 #define WM8350_GP4_FN_MASK                      0x000F
295
296 /*
297  * R142 (0x8E) - GPIO Function Select 3
298  */
299 #define WM8350_GP11_FN_MASK                     0xF000
300 #define WM8350_GP10_FN_MASK                     0x0F00
301 #define WM8350_GP9_FN_MASK                      0x00F0
302 #define WM8350_GP8_FN_MASK                      0x000F
303
304 /*
305  * R143 (0x8F) - GPIO Function Select 4
306  */
307 #define WM8350_GP12_FN_MASK                     0x000F
308
309 /*
310  * R230 (0xE6) - GPIO Pin Status
311  */
312 #define WM8350_GP12_LVL                         0x1000
313 #define WM8350_GP11_LVL                         0x0800
314 #define WM8350_GP10_LVL                         0x0400
315 #define WM8350_GP9_LVL                          0x0200
316 #define WM8350_GP8_LVL                          0x0100
317 #define WM8350_GP7_LVL                          0x0080
318 #define WM8350_GP6_LVL                          0x0040
319 #define WM8350_GP5_LVL                          0x0020
320 #define WM8350_GP4_LVL                          0x0010
321 #define WM8350_GP3_LVL                          0x0008
322 #define WM8350_GP2_LVL                          0x0004
323 #define WM8350_GP1_LVL                          0x0002
324 #define WM8350_GP0_LVL                          0x0001
325
326 struct wm8350;
327
328 int wm8350_gpio_config(struct wm8350 *wm8350, int gpio, int dir, int func,
329                        int pol, int pull, int invert, int debounce);
330
331 /*
332  * GPIO Interrupts
333  */
334 #define WM8350_IRQ_GPIO(x)                      (50 + x)
335
336 #endif