1/* 2 * Copyright 2006-2009 Analog Devices Inc. 3 * 4 * Licensed under the GPL-2 or later. 5 */ 6 7#ifndef __ARCH_BLACKFIN_GPIO_H__ 8#define __ARCH_BLACKFIN_GPIO_H__ 9 10#define gpio_bank(x) ((x) >> 4) 11#define gpio_bit(x) (1<<((x) & 0xF)) 12#define gpio_sub_n(x) ((x) & 0xF) 13 14#define GPIO_BANKSIZE 16 15#define GPIO_BANK_NUM DIV_ROUND_UP(MAX_BLACKFIN_GPIOS, GPIO_BANKSIZE) 16 17#include <mach/gpio.h> 18 19#define GPIO_0 0 20#define GPIO_1 1 21#define GPIO_2 2 22#define GPIO_3 3 23#define GPIO_4 4 24#define GPIO_5 5 25#define GPIO_6 6 26#define GPIO_7 7 27#define GPIO_8 8 28#define GPIO_9 9 29#define GPIO_10 10 30#define GPIO_11 11 31#define GPIO_12 12 32#define GPIO_13 13 33#define GPIO_14 14 34#define GPIO_15 15 35#define GPIO_16 16 36#define GPIO_17 17 37#define GPIO_18 18 38#define GPIO_19 19 39#define GPIO_20 20 40#define GPIO_21 21 41#define GPIO_22 22 42#define GPIO_23 23 43#define GPIO_24 24 44#define GPIO_25 25 45#define GPIO_26 26 46#define GPIO_27 27 47#define GPIO_28 28 48#define GPIO_29 29 49#define GPIO_30 30 50#define GPIO_31 31 51#define GPIO_32 32 52#define GPIO_33 33 53#define GPIO_34 34 54#define GPIO_35 35 55#define GPIO_36 36 56#define GPIO_37 37 57#define GPIO_38 38 58#define GPIO_39 39 59#define GPIO_40 40 60#define GPIO_41 41 61#define GPIO_42 42 62#define GPIO_43 43 63#define GPIO_44 44 64#define GPIO_45 45 65#define GPIO_46 46 66#define GPIO_47 47 67 68#define PERIPHERAL_USAGE 1 69#define GPIO_USAGE 0 70 71#ifndef __ASSEMBLY__ 72 73#include <linux/compiler.h> 74 75/*********************************************************** 76* 77* FUNCTIONS: Blackfin General Purpose Ports Access Functions 78* 79* INPUTS/OUTPUTS: 80* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS 81* 82* 83* DESCRIPTION: These functions abstract direct register access 84* to Blackfin processor General Purpose 85* Ports Regsiters 86* 87* CAUTION: These functions do not belong to the GPIO Driver API 88************************************************************* 89* MODIFICATION HISTORY : 90**************************************************************/ 91 92#ifndef CONFIG_BF54x 93void set_gpio_dir(unsigned, unsigned short); 94void set_gpio_inen(unsigned, unsigned short); 95void set_gpio_polar(unsigned, unsigned short); 96void set_gpio_edge(unsigned, unsigned short); 97void set_gpio_both(unsigned, unsigned short); 98void set_gpio_data(unsigned, unsigned short); 99void set_gpio_maska(unsigned, unsigned short); 100void set_gpio_maskb(unsigned, unsigned short); 101void set_gpio_toggle(unsigned); 102void set_gpiop_dir(unsigned, unsigned short); 103void set_gpiop_inen(unsigned, unsigned short); 104void set_gpiop_polar(unsigned, unsigned short); 105void set_gpiop_edge(unsigned, unsigned short); 106void set_gpiop_both(unsigned, unsigned short); 107void set_gpiop_data(unsigned, unsigned short); 108void set_gpiop_maska(unsigned, unsigned short); 109void set_gpiop_maskb(unsigned, unsigned short); 110unsigned short get_gpio_dir(unsigned); 111unsigned short get_gpio_inen(unsigned); 112unsigned short get_gpio_polar(unsigned); 113unsigned short get_gpio_edge(unsigned); 114unsigned short get_gpio_both(unsigned); 115unsigned short get_gpio_maska(unsigned); 116unsigned short get_gpio_maskb(unsigned); 117unsigned short get_gpio_data(unsigned); 118unsigned short get_gpiop_dir(unsigned); 119unsigned short get_gpiop_inen(unsigned); 120unsigned short get_gpiop_polar(unsigned); 121unsigned short get_gpiop_edge(unsigned); 122unsigned short get_gpiop_both(unsigned); 123unsigned short get_gpiop_maska(unsigned); 124unsigned short get_gpiop_maskb(unsigned); 125unsigned short get_gpiop_data(unsigned); 126 127struct gpio_port_t { 128 unsigned short data; 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; 152 unsigned short dir; 153 unsigned short dummy13; 154 unsigned short polar; 155 unsigned short dummy14; 156 unsigned short edge; 157 unsigned short dummy15; 158 unsigned short both; 159 unsigned short dummy16; 160 unsigned short inen; 161}; 162#endif 163 164#ifdef BFIN_SPECIAL_GPIO_BANKS 165void bfin_special_gpio_free(unsigned gpio); 166int bfin_special_gpio_request(unsigned gpio, const char *label); 167#endif 168 169#ifdef CONFIG_PM 170int bfin_pm_standby_ctrl(unsigned ctrl); 171 172static inline int bfin_pm_standby_setup(void) 173{ 174 return bfin_pm_standby_ctrl(1); 175} 176 177static inline void bfin_pm_standby_restore(void) 178{ 179 bfin_pm_standby_ctrl(0); 180} 181 182void bfin_gpio_pm_hibernate_restore(void); 183void bfin_gpio_pm_hibernate_suspend(void); 184 185#ifndef CONFIG_BF54x 186int gpio_pm_wakeup_ctrl(unsigned gpio, unsigned ctrl); 187 188struct gpio_port_s { 189 unsigned short data; 190 unsigned short maska; 191 unsigned short maskb; 192 unsigned short dir; 193 unsigned short polar; 194 unsigned short edge; 195 unsigned short both; 196 unsigned short inen; 197 198 unsigned short fer; 199 unsigned short reserved; 200 unsigned short mux; 201}; 202#endif /*CONFIG_BF54x*/ 203#endif /*CONFIG_PM*/ 204/*********************************************************** 205* 206* FUNCTIONS: Blackfin GPIO Driver 207* 208* INPUTS/OUTPUTS: 209* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS 210* 211* 212* DESCRIPTION: Blackfin GPIO Driver API 213* 214* CAUTION: 215************************************************************* 216* MODIFICATION HISTORY : 217**************************************************************/ 218 219int bfin_gpio_request(unsigned gpio, const char *label); 220void bfin_gpio_free(unsigned gpio); 221int bfin_gpio_irq_request(unsigned gpio, const char *label); 222void bfin_gpio_irq_free(unsigned gpio); 223int bfin_gpio_direction_input(unsigned gpio); 224int bfin_gpio_direction_output(unsigned gpio, int value); 225int bfin_gpio_get_value(unsigned gpio); 226void bfin_gpio_set_value(unsigned gpio, int value); 227 228#include <asm/irq.h> 229#include <asm/errno.h> 230 231#ifdef CONFIG_GPIOLIB 232#include <asm-generic/gpio.h> /* cansleep wrappers */ 233 234static inline int gpio_get_value(unsigned int gpio) 235{ 236 if (gpio < MAX_BLACKFIN_GPIOS) 237 return bfin_gpio_get_value(gpio); 238 else 239 return __gpio_get_value(gpio); 240} 241 242static inline void gpio_set_value(unsigned int gpio, int value) 243{ 244 if (gpio < MAX_BLACKFIN_GPIOS) 245 bfin_gpio_set_value(gpio, value); 246 else 247 __gpio_set_value(gpio, value); 248} 249 250static inline int gpio_cansleep(unsigned int gpio) 251{ 252 return __gpio_cansleep(gpio); 253} 254 255static inline int gpio_to_irq(unsigned gpio) 256{ 257 return __gpio_to_irq(gpio); 258} 259 260#else /* !CONFIG_GPIOLIB */ 261 262static inline int gpio_request(unsigned gpio, const char *label) 263{ 264 return bfin_gpio_request(gpio, label); 265} 266 267static inline void gpio_free(unsigned gpio) 268{ 269 return bfin_gpio_free(gpio); 270} 271 272static inline int gpio_direction_input(unsigned gpio) 273{ 274 return bfin_gpio_direction_input(gpio); 275} 276 277static inline int gpio_direction_output(unsigned gpio, int value) 278{ 279 return bfin_gpio_direction_output(gpio, value); 280} 281 282static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) 283{ 284 return -EINVAL; 285} 286 287static inline int gpio_get_value(unsigned gpio) 288{ 289 return bfin_gpio_get_value(gpio); 290} 291 292static inline void gpio_set_value(unsigned gpio, int value) 293{ 294 return bfin_gpio_set_value(gpio, value); 295} 296 297static inline int gpio_to_irq(unsigned gpio) 298{ 299 if (likely(gpio < MAX_BLACKFIN_GPIOS)) 300 return gpio + GPIO_IRQ_BASE; 301 302 return -EINVAL; 303} 304 305#include <asm-generic/gpio.h> /* cansleep wrappers */ 306#endif /* !CONFIG_GPIOLIB */ 307 308static inline int irq_to_gpio(unsigned irq) 309{ 310 return (irq - GPIO_IRQ_BASE); 311} 312 313#endif /* __ASSEMBLY__ */ 314 315#endif /* __ARCH_BLACKFIN_GPIO_H__ */ 316