9
0
Fork 0

ARM: i.MX: Add lowlevel gpio functions

Some boards need gpio functions very early and also sometimes
is useful to toggle gpios during early code debug. This adds a header
file for setting i.MX gpios early.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2014-01-31 13:56:35 +01:00
parent 021890a39e
commit cc66cf109b
1 changed files with 48 additions and 0 deletions

View File

@ -0,0 +1,48 @@
#ifndef __MACH_IMX_GPIO_H
#define __MACH_IMX_GPIO_H
#include <io.h>
/*
* i.MX lowlevel gpio functions. Only for use with lowlevel code. Use
* regular gpio functions outside of lowlevel code!
*/
static inline void imx_gpio_direction_output(void __iomem *gdir, void __iomem *dr,
int gpio, int value)
{
uint32_t val;
val = readl(gdir);
val |= 1 << gpio;
writel(val, gdir);
val = readl(dr);
if (value)
val |= 1 << gpio;
else
val &= ~(1 << gpio);
writel(val, dr);
}
static inline void imx1_gpio_direction_output(void *base, int gpio, int value)
{
imx_gpio_direction_output(base + 0x0, base + 0x1c, gpio, value);
}
#define imx21_gpio_direction_output(base, gpio, value) imx1_gpio_direction_output(base, gpio,value)
#define imx27_gpio_direction_output(base, gpio, value) imx1_gpio_direction_output(base, gpio,value)
static inline void imx31_gpio_direction_output(void *base, int gpio, int value)
{
imx_gpio_direction_output(base + 0x4, base + 0x0, gpio, value);
}
#define imx25_gpio_direction_output(base, gpio, value) imx31_gpio_direction_output(base, gpio,value)
#define imx35_gpio_direction_output(base, gpio, value) imx31_gpio_direction_output(base, gpio,value)
#define imx51_gpio_direction_output(base, gpio, value) imx31_gpio_direction_output(base, gpio,value)
#define imx53_gpio_direction_output(base, gpio, value) imx31_gpio_direction_output(base, gpio,value)
#define imx6_gpio_direction_output(base, gpio, value) imx31_gpio_direction_output(base, gpio,value)
#endif /* __MACH_IMX_GPIO_H */