mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
[PATCH] OMAP GPIO wrappers
This teaches OMAP how to implement the cross-platform GPIO interfaces. [akpm@osdl.org: cleanups] Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
4c20386c8d
commit
3c729f1ecd
1 changed files with 66 additions and 0 deletions
|
@ -76,4 +76,70 @@ extern void omap_set_gpio_direction(int gpio, int is_input);
|
|||
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 <asm/errno.h>
|
||||
|
||||
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 <asm-generic/gpio.h> /* 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
|
||||
|
|
Loading…
Reference in a new issue