2 * Copyright 2006-2009 Analog Devices Inc.
4 * Licensed under the GPL-2 or later.
7 #ifndef __ARCH_BLACKFIN_GPIO_H__
8 #define __ARCH_BLACKFIN_GPIO_H__
10 #define gpio_bank(x) ((x) >> 4)
11 #define gpio_bit(x) (1<<((x) & 0xF))
12 #define gpio_sub_n(x) ((x) & 0xF)
14 #define GPIO_BANKSIZE 16
15 #define GPIO_BANK_NUM DIV_ROUND_UP(MAX_BLACKFIN_GPIOS, GPIO_BANKSIZE)
17 #include <mach/gpio.h>
68 #define PERIPHERAL_USAGE 1
73 #include <linux/compiler.h>
75 /***********************************************************
77 * FUNCTIONS: Blackfin General Purpose Ports Access Functions
80 * gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
83 * DESCRIPTION: These functions abstract direct register access
84 * to Blackfin processor General Purpose
87 * CAUTION: These functions do not belong to the GPIO Driver API
88 *************************************************************
89 * MODIFICATION HISTORY :
90 **************************************************************/
93 void set_gpio_dir(unsigned, unsigned short);
94 void set_gpio_inen(unsigned, unsigned short);
95 void set_gpio_polar(unsigned, unsigned short);
96 void set_gpio_edge(unsigned, unsigned short);
97 void set_gpio_both(unsigned, unsigned short);
98 void set_gpio_data(unsigned, unsigned short);
99 void set_gpio_maska(unsigned, unsigned short);
100 void set_gpio_maskb(unsigned, unsigned short);
101 void set_gpio_toggle(unsigned);
102 void set_gpiop_dir(unsigned, unsigned short);
103 void set_gpiop_inen(unsigned, unsigned short);
104 void set_gpiop_polar(unsigned, unsigned short);
105 void set_gpiop_edge(unsigned, unsigned short);
106 void set_gpiop_both(unsigned, unsigned short);
107 void set_gpiop_data(unsigned, unsigned short);
108 void set_gpiop_maska(unsigned, unsigned short);
109 void set_gpiop_maskb(unsigned, unsigned short);
110 unsigned short get_gpio_dir(unsigned);
111 unsigned short get_gpio_inen(unsigned);
112 unsigned short get_gpio_polar(unsigned);
113 unsigned short get_gpio_edge(unsigned);
114 unsigned short get_gpio_both(unsigned);
115 unsigned short get_gpio_maska(unsigned);
116 unsigned short get_gpio_maskb(unsigned);
117 unsigned short get_gpio_data(unsigned);
118 unsigned short get_gpiop_dir(unsigned);
119 unsigned short get_gpiop_inen(unsigned);
120 unsigned short get_gpiop_polar(unsigned);
121 unsigned short get_gpiop_edge(unsigned);
122 unsigned short get_gpiop_both(unsigned);
123 unsigned short get_gpiop_maska(unsigned);
124 unsigned short get_gpiop_maskb(unsigned);
125 unsigned short get_gpiop_data(unsigned);
129 unsigned short dummy1
;
130 unsigned short data_clear
;
131 unsigned short dummy2
;
132 unsigned short data_set
;
133 unsigned short dummy3
;
134 unsigned short toggle
;
135 unsigned short dummy4
;
136 unsigned short maska
;
137 unsigned short dummy5
;
138 unsigned short maska_clear
;
139 unsigned short dummy6
;
140 unsigned short maska_set
;
141 unsigned short dummy7
;
142 unsigned short maska_toggle
;
143 unsigned short dummy8
;
144 unsigned short maskb
;
145 unsigned short dummy9
;
146 unsigned short maskb_clear
;
147 unsigned short dummy10
;
148 unsigned short maskb_set
;
149 unsigned short dummy11
;
150 unsigned short maskb_toggle
;
151 unsigned short dummy12
;
153 unsigned short dummy13
;
154 unsigned short polar
;
155 unsigned short dummy14
;
157 unsigned short dummy15
;
159 unsigned short dummy16
;
164 #ifdef BFIN_SPECIAL_GPIO_BANKS
165 void bfin_special_gpio_free(unsigned gpio
);
166 int bfin_special_gpio_request(unsigned gpio
, const char *label
);
170 int bfin_pm_standby_ctrl(unsigned ctrl
);
172 static inline int bfin_pm_standby_setup(void)
174 return bfin_pm_standby_ctrl(1);
177 static inline void bfin_pm_standby_restore(void)
179 bfin_pm_standby_ctrl(0);
182 void bfin_gpio_pm_hibernate_restore(void);
183 void bfin_gpio_pm_hibernate_suspend(void);
186 int gpio_pm_wakeup_ctrl(unsigned gpio
, unsigned ctrl
);
190 unsigned short maska
;
191 unsigned short maskb
;
193 unsigned short polar
;
199 unsigned short reserved
;
202 #endif /*CONFIG_BF54x*/
204 /***********************************************************
206 * FUNCTIONS: Blackfin GPIO Driver
209 * gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
212 * DESCRIPTION: Blackfin GPIO Driver API
215 *************************************************************
216 * MODIFICATION HISTORY :
217 **************************************************************/
219 int bfin_gpio_request(unsigned gpio
, const char *label
);
220 void bfin_gpio_free(unsigned gpio
);
221 int bfin_gpio_irq_request(unsigned gpio
, const char *label
);
222 void bfin_gpio_irq_free(unsigned gpio
);
223 int bfin_gpio_direction_input(unsigned gpio
);
224 int bfin_gpio_direction_output(unsigned gpio
, int value
);
225 int bfin_gpio_get_value(unsigned gpio
);
226 void bfin_gpio_set_value(unsigned gpio
, int value
);
229 #include <asm/errno.h>
231 #ifdef CONFIG_GPIOLIB
232 #include <asm-generic/gpio.h> /* cansleep wrappers */
234 static inline int gpio_get_value(unsigned int gpio
)
236 if (gpio
< MAX_BLACKFIN_GPIOS
)
237 return bfin_gpio_get_value(gpio
);
239 return __gpio_get_value(gpio
);
242 static inline void gpio_set_value(unsigned int gpio
, int value
)
244 if (gpio
< MAX_BLACKFIN_GPIOS
)
245 bfin_gpio_set_value(gpio
, value
);
247 __gpio_set_value(gpio
, value
);
250 static inline int gpio_cansleep(unsigned int gpio
)
252 return __gpio_cansleep(gpio
);
255 static inline int gpio_to_irq(unsigned gpio
)
257 return __gpio_to_irq(gpio
);
260 #else /* !CONFIG_GPIOLIB */
262 static inline int gpio_request(unsigned gpio
, const char *label
)
264 return bfin_gpio_request(gpio
, label
);
267 static inline void gpio_free(unsigned gpio
)
269 return bfin_gpio_free(gpio
);
272 static inline int gpio_direction_input(unsigned gpio
)
274 return bfin_gpio_direction_input(gpio
);
277 static inline int gpio_direction_output(unsigned gpio
, int value
)
279 return bfin_gpio_direction_output(gpio
, value
);
282 static inline int gpio_set_debounce(unsigned gpio
, unsigned debounce
)
287 static inline int gpio_get_value(unsigned gpio
)
289 return bfin_gpio_get_value(gpio
);
292 static inline void gpio_set_value(unsigned gpio
, int value
)
294 return bfin_gpio_set_value(gpio
, value
);
297 static inline int gpio_to_irq(unsigned gpio
)
299 if (likely(gpio
< MAX_BLACKFIN_GPIOS
))
300 return gpio
+ GPIO_IRQ_BASE
;
305 #include <asm-generic/gpio.h> /* cansleep wrappers */
306 #endif /* !CONFIG_GPIOLIB */
308 static inline int irq_to_gpio(unsigned irq
)
310 return (irq
- GPIO_IRQ_BASE
);
313 #endif /* __ASSEMBLY__ */
315 #endif /* __ARCH_BLACKFIN_GPIO_H__ */