diff options
Diffstat (limited to 'drivers/gpio/mxc_gpio.c')
| -rw-r--r-- | drivers/gpio/mxc_gpio.c | 51 | 
1 files changed, 47 insertions, 4 deletions
| diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c index 6efbb02c1..a7f36b293 100644 --- a/drivers/gpio/mxc_gpio.c +++ b/drivers/gpio/mxc_gpio.c @@ -2,6 +2,9 @@   * Copyright (C) 2009   * Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de>   * + * Copyright (C) 2011 + * Stefano Babic, DENX Software Engineering, <sbabic@denx.de> + *   * See file CREDITS for list of people who contributed to this   * project.   * @@ -22,10 +25,16 @@   */  #include <common.h>  #include <asm/arch/imx-regs.h> +#include <asm/gpio.h>  #include <asm/io.h> -#include <mxc_gpio.h>  #include <errno.h> +enum mxc_gpio_direction { +	MXC_GPIO_DIRECTION_IN, +	MXC_GPIO_DIRECTION_OUT, +}; + +  /* GPIO port description */  static unsigned long gpio_ports[] = {  	[0] = GPIO1_BASE_ADDR, @@ -41,7 +50,8 @@ static unsigned long gpio_ports[] = {  #endif  }; -int mxc_gpio_direction(unsigned int gpio, enum mxc_gpio_direction direction) +static int mxc_gpio_direction(unsigned int gpio, +	enum mxc_gpio_direction direction)  {  	unsigned int port = gpio >> 5;  	struct gpio_regs *regs; @@ -68,7 +78,7 @@ int mxc_gpio_direction(unsigned int gpio, enum mxc_gpio_direction direction)  	return 0;  } -void mxc_gpio_set(unsigned int gpio, unsigned int value) +void gpio_set_value(int gpio, int value)  {  	unsigned int port = gpio >> 5;  	struct gpio_regs *regs; @@ -89,7 +99,7 @@ void mxc_gpio_set(unsigned int gpio, unsigned int value)  	writel(l, ®s->gpio_dr);  } -int mxc_gpio_get(unsigned int gpio) +int gpio_get_value(int gpio)  {  	unsigned int port = gpio >> 5;  	struct gpio_regs *regs; @@ -106,3 +116,36 @@ int mxc_gpio_get(unsigned int gpio)  	return l;  } + +int gpio_request(int gp, const char *label) +{ +	unsigned int port = gp >> 5; +	if (port >= ARRAY_SIZE(gpio_ports)) +		return -EINVAL; +	return 0; +} + +void gpio_free(int gp) +{ +} + +void gpio_toggle_value(int gp) +{ +	gpio_set_value(gp, !gpio_get_value(gp)); +} + +int gpio_direction_input(int gp) +{ +	return mxc_gpio_direction(gp, MXC_GPIO_DIRECTION_IN); +} + +int gpio_direction_output(int gp, int value) +{ +	int ret = mxc_gpio_direction(gp, MXC_GPIO_DIRECTION_OUT); + +	if (ret < 0) +		return ret; + +	gpio_set_value(gp, value); +	return 0; +} |