1
2
3
4
5
6
7#ifndef _UX500_GPIO_h
8#define _UX500_GPIO_h
9
10#include <asm/types.h>
11#include <asm/io.h>
12#include <asm/errno.h>
13
14#include <asm/arch/sys_proto.h>
15#include <asm/arch/u8500.h>
16
17#define GPIO_TOTAL_PINS 268
18
19#define GPIO_PINS_PER_BLOCK 32
20#define GPIO_BLOCKS_COUNT (GPIO_TOTAL_PINS/GPIO_PINS_PER_BLOCK + 1)
21#define GPIO_BLOCK(pin) (((pin + GPIO_PINS_PER_BLOCK) >> 5) - 1)
22
23
24struct gpio_register {
25 u32 gpio_dat;
26 u32 gpio_dats;
27 u32 gpio_datc;
28 u32 gpio_pdis;
29 u32 gpio_dir;
30 u32 gpio_dirs;
31 u32 gpio_dirc;
32 u32 gpio_slpm;
33 u32 gpio_afsa;
34 u32 gpio_afsb;
35 u32 gpio_lowemi;
36 u32 reserved_1[(0x040 - 0x02C) >> 2];
37 u32 gpio_rimsc;
38 u32 gpio_fimsc;
39 u32 gpio_mis;
40 u32 gpio_ic;
41 u32 gpio_rwimsc;
42 u32 gpio_fwimsc;
43 u32 gpio_wks;
44};
45
46
47enum gpio_error {
48 GPIO_OK = 0,
49 GPIO_UNSUPPORTED_HW = -2,
50 GPIO_UNSUPPORTED_FEATURE = -3,
51 GPIO_INVALID_PARAMETER = -4,
52 GPIO_REQUEST_NOT_APPLICABLE = -5,
53 GPIO_REQUEST_PENDING = -6,
54 GPIO_NOT_CONFIGURED = -7,
55 GPIO_INTERNAL_ERROR = -8,
56 GPIO_INTERNAL_EVENT = 1,
57 GPIO_REMAINING_EVENT = 2,
58 GPIO_NO_MORE_PENDING_EVENT = 3,
59 GPIO_INVALID_CLIENT = -25,
60 GPIO_INVALID_PIN = -26,
61 GPIO_PIN_BUSY = -27,
62 GPIO_PIN_NOT_ALLOCATED = -28,
63 GPIO_WRONG_CLIENT = -29,
64 GPIO_UNSUPPORTED_ALTFUNC = -30,
65};
66
67
68enum gpio_device_id {
69 GPIO_DEVICE_ID_0,
70 GPIO_DEVICE_ID_1,
71 GPIO_DEVICE_ID_2,
72 GPIO_DEVICE_ID_3,
73 GPIO_DEVICE_ID_INVALID
74};
75
76
77
78
79
80
81enum gpio_alt_function {
82 GPIO_ALT_UART_0_MODEM,
83 GPIO_ALT_UART_0_NO_MODEM,
84 GPIO_ALT_UART_1,
85 GPIO_ALT_UART_2,
86 GPIO_ALT_I2C_0,
87 GPIO_ALT_I2C_1,
88 GPIO_ALT_I2C_2,
89 GPIO_ALT_I2C_3,
90 GPIO_ALT_MSP_0,
91 GPIO_ALT_MSP_1,
92 GPIO_ALT_MSP_2,
93 GPIO_ALT_MSP_3,
94 GPIO_ALT_MSP_4,
95 GPIO_ALT_MSP_5,
96 GPIO_ALT_SSP_0,
97 GPIO_ALT_SSP_1,
98 GPIO_ALT_MM_CARD0,
99 GPIO_ALT_SD_CARD0,
100 GPIO_ALT_DMA_0,
101 GPIO_ALT_DMA_1,
102 GPIO_ALT_HSI0,
103 GPIO_ALT_CCIR656_INPUT,
104 GPIO_ALT_CCIR656_OUTPUT,
105 GPIO_ALT_LCD_PANEL,
106 GPIO_ALT_MDIF,
107 GPIO_ALT_SDRAM,
108 GPIO_ALT_HAMAC_AUDIO_DBG,
109 GPIO_ALT_HAMAC_VIDEO_DBG,
110 GPIO_ALT_CLOCK_RESET,
111 GPIO_ALT_TSP,
112 GPIO_ALT_IRDA,
113 GPIO_ALT_USB_MINIMUM,
114 GPIO_ALT_USB_I2C,
115 GPIO_ALT_OWM,
116 GPIO_ALT_PWL,
117 GPIO_ALT_FSMC,
118 GPIO_ALT_COMP_FLASH,
119 GPIO_ALT_SRAM_NOR_FLASH,
120 GPIO_ALT_FSMC_ADDLINE_0_TO_15,
121 GPIO_ALT_SCROLL_KEY,
122 GPIO_ALT_MSHC,
123 GPIO_ALT_HPI,
124 GPIO_ALT_USB_OTG,
125 GPIO_ALT_SDIO,
126 GPIO_ALT_HSMMC,
127 GPIO_ALT_FSMC_ADD_DATA_0_TO_25,
128 GPIO_ALT_HSI1,
129 GPIO_ALT_NOR,
130 GPIO_ALT_NAND,
131 GPIO_ALT_KEYPAD,
132 GPIO_ALT_VPIP,
133 GPIO_ALT_CAM,
134 GPIO_ALT_CCP1,
135 GPIO_ALT_EMMC,
136 GPIO_ALT_POP_EMMC,
137 GPIO_ALT_FUNMAX
138};
139
140
141enum gpio_mode {
142 GPIO_MODE_LEAVE_UNCHANGED,
143 GPIO_MODE_SOFTWARE,
144 GPIO_ALTF_A,
145 GPIO_ALTF_B,
146 GPIO_ALTF_C,
147 GPIO_ALTF_FIND,
148 GPIO_ALTF_DISABLE
149};
150
151
152enum gpio_direction {
153 GPIO_DIR_LEAVE_UNCHANGED,
154 GPIO_DIR_INPUT,
155 GPIO_DIR_OUTPUT
156};
157
158
159enum gpio_trig {
160 GPIO_TRIG_LEAVE_UNCHANGED,
161 GPIO_TRIG_DISABLE,
162 GPIO_TRIG_RISING_EDGE,
163 GPIO_TRIG_FALLING_EDGE,
164 GPIO_TRIG_BOTH_EDGES,
165 GPIO_TRIG_HIGH_LEVEL,
166 GPIO_TRIG_LOW_LEVEL
167};
168
169
170struct gpio_config {
171 enum gpio_mode mode;
172 enum gpio_direction direction;
173 enum gpio_trig trig;
174 char *dev_name;
175};
176
177
178enum gpio_data {
179 GPIO_DATA_LOW,
180 GPIO_DATA_HIGH
181};
182
183
184enum gpio_sleep_mode {
185 GPIO_SLEEP_MODE_LEAVE_UNCHANGED,
186 GPIO_SLEEP_MODE_INPUT_DEFAULTVOLT,
187
188
189 GPIO_SLEEP_MODE_CONTROLLED_BY_GPIO
190
191
192
193
194
195
196};
197
198
199enum gpio_wake {
200 GPIO_WAKE_LEAVE_UNCHANGED,
201 GPIO_WAKE_DISABLE,
202 GPIO_WAKE_LOW_LEVEL,
203 GPIO_WAKE_HIGH_LEVEL,
204 GPIO_WAKE_RISING_EDGE,
205 GPIO_WAKE_FALLING_EDGE,
206 GPIO_WAKE_BOTH_EDGES
207};
208
209
210struct gpio_sleep_config {
211 enum gpio_sleep_mode sleep_mode;
212 enum gpio_wake wake;
213};
214
215extern int gpio_setpinconfig(int pin_id, struct gpio_config *pin_config);
216extern int gpio_resetpinconfig(int pin_id, char *dev_name);
217extern int gpio_writepin(int pin_id, enum gpio_data value, char *dev_name);
218extern int gpio_readpin(int pin_id, enum gpio_data *value);
219extern int gpio_altfuncenable(enum gpio_alt_function altfunc,
220 char *dev_name);
221extern int gpio_altfuncdisable(enum gpio_alt_function altfunc,
222 char *dev_name);
223
224struct gpio_altfun_data {
225 u16 altfun;
226 u16 start;
227 u16 end;
228 u16 cont;
229 u8 type;
230};
231#endif
232