From: David Brownell This teaches OMAP how to implement the cross-platform GPIO interfaces. Signed-off-by: David Brownell Signed-off-by: Andrew Morton --- include/asm-arm/arch-omap/gpio.h | 54 +++++++++++++++++++++++++++++ 1 files changed, 54 insertions(+) diff -puN include/asm-arm/arch-omap/gpio.h~omap-gpio-wrappers include/asm-arm/arch-omap/gpio.h --- a/include/asm-arm/arch-omap/gpio.h~omap-gpio-wrappers +++ a/include/asm-arm/arch-omap/gpio.h @@ -76,4 +76,58 @@ extern void omap_set_gpio_direction(int extern void omap_set_gpio_dataout(int gpio, int enable); extern int omap_get_gpio_datain(int gpio); +/*-------------------------------------------------------------------------*/ + +/* wrappers for "new style" GPIO calls. the old OMAP-specfic ones should + * eventually be removed (along with this errno.h inclusion), and maybe + * gpios should put MPUIOs last too. + */ + +#include + +static inline int gpio_request(unsigned gpio, const char *label) + { return omap_request_gpio(gpio); } + +static inline void gpio_free(unsigned gpio) + { omap_free_gpio(gpio); } + + +static inline int __gpio_set_direction(unsigned gpio, int is_input) +{ + if (cpu_class_is_omap2()) { + if (gpio > OMAP_MAX_GPIO_LINES) + return -EINVAL; + } else { + if (gpio > (OMAP_MAX_GPIO_LINES + 16 /* MPUIO */)) + return -EINVAL; + } + omap_set_gpio_direction(gpio, is_input); + return 0; +} + +static inline int gpio_direction_input(unsigned gpio) + { return __gpio_set_direction(gpio, 1); } + +static inline int gpio_direction_output(unsigned gpio) + { return __gpio_set_direction(gpio, 0); } + + +static inline int gpio_get_value(unsigned gpio) + { return omap_get_gpio_datain(gpio); } + +static inline void gpio_set_value(unsigned gpio, int value) + { omap_set_gpio_dataout(gpio, value); } + +#include /* cansleep wrappers */ + +static inline int gpio_to_irq(unsigned gpio) + { return OMAP_GPIO_IRQ(gpio); } + +static inline int irq_to_gpio(unsigned irq) +{ + if (cpu_class_is_omap1() && (irq < (IH_MPUIO_BASE + 16))) + return (irq - IH_MPUIO_BASE) + OMAP_MAX_GPIO_LINES; + return irq - IH_GPIO_BASE; +} + #endif _