Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c729f1e authored by David Brownell's avatar David Brownell Committed by Linus Torvalds
Browse files

[PATCH] OMAP GPIO wrappers



This teaches OMAP how to implement the cross-platform GPIO interfaces.

[akpm@osdl.org: cleanups]
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 4c20386c
Loading
Loading
Loading
Loading
+66 −0
Original line number Diff line number Diff line
@@ -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