diff options
| author | Stefano Babic <sbabic@denx.de> | 2011-08-21 10:45:44 +0200 | 
|---|---|---|
| committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2011-09-04 11:36:11 +0200 | 
| commit | d8e0ca851b91b8ac16c648d437f668997b606e6b (patch) | |
| tree | ea8f4cdfb6613d0219ad9a68baea4320b6b037ff | |
| parent | 7acec2594840b2602054c5a9d1e14792837fd9db (diff) | |
| download | olio-uboot-2014.01-d8e0ca851b91b8ac16c648d437f668997b606e6b.tar.xz olio-uboot-2014.01-d8e0ca851b91b8ac16c648d437f668997b606e6b.zip | |
IMX: uniform GPIO interface using GPIO framework
IMX processors has a slightly different interface
to access GPIOs and do not make use of the provided GPIO
framework. The patch substitutes mxc_ specific
functions and make use of the API in asm/gpio.h
Signed-off-by: Stefano Babic <sbabic@denx.de>
| -rw-r--r-- | drivers/gpio/mxc_gpio.c | 51 | ||||
| -rw-r--r-- | drivers/spi/mxc_spi.c | 8 | ||||
| -rw-r--r-- | include/mxc_gpio.h | 57 | 
3 files changed, 51 insertions, 65 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; +} diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c index 81381d9b9..2fa748608 100644 --- a/drivers/spi/mxc_spi.c +++ b/drivers/spi/mxc_spi.c @@ -23,7 +23,7 @@  #include <spi.h>  #include <asm/errno.h>  #include <asm/io.h> -#include <mxc_gpio.h> +#include <asm/gpio.h>  #include <asm/arch/imx-regs.h>  #include <asm/arch/clock.h> @@ -145,14 +145,14 @@ void spi_cs_activate(struct spi_slave *slave)  {  	struct mxc_spi_slave *mxcs = to_mxc_spi_slave(slave);  	if (mxcs->gpio > 0) -		mxc_gpio_set(mxcs->gpio, mxcs->ss_pol); +		gpio_set_value(mxcs->gpio, mxcs->ss_pol);  }  void spi_cs_deactivate(struct spi_slave *slave)  {  	struct mxc_spi_slave *mxcs = to_mxc_spi_slave(slave);  	if (mxcs->gpio > 0) -		mxc_gpio_set(mxcs->gpio, +		gpio_set_value(mxcs->gpio,  			      !(mxcs->ss_pol));  } @@ -468,7 +468,7 @@ static int decode_cs(struct mxc_spi_slave *mxcs, unsigned int cs)  	if (cs > 3) {  		mxcs->gpio = cs >> 8;  		cs &= 3; -		ret = mxc_gpio_direction(mxcs->gpio, OUT); +		ret = gpio_direction_output(mxcs->gpio, 0);  		if (ret) {  			printf("mxc_spi: cannot setup gpio %d\n", mxcs->gpio);  			return -EINVAL; diff --git a/include/mxc_gpio.h b/include/mxc_gpio.h deleted file mode 100644 index f673dcecd..000000000 --- a/include/mxc_gpio.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * - * (c) 2007 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de> - * - * See file CREDITS for list of people who contributed to this - * project. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - */ - -#ifndef __MXC_GPIO_H -#define __MXC_GPIO_H - -/* Converts a GPIO port number and the internal bit position - * to the GPIO number - */ -#define MXC_GPIO_PORT_TO_NUM(port, bit) (((port - 1) << 5) + (bit & 0x1f)) - -enum mxc_gpio_direction { -	MXC_GPIO_DIRECTION_IN, -	MXC_GPIO_DIRECTION_OUT, -}; - -#ifdef CONFIG_MXC_GPIO -extern int mxc_gpio_direction(unsigned int gpio, -			       enum mxc_gpio_direction direction); -extern void mxc_gpio_set(unsigned int gpio, unsigned int value); -extern int mxc_gpio_get(unsigned int gpio); -#else -static inline int mxc_gpio_direction(unsigned int gpio, -				      enum mxc_gpio_direction direction) -{ -	return 1; -} -static inline int mxc_gpio_get(unsigned int gpio) -{ -	return 1; -} -static inline void mxc_gpio_set(unsigned int gpio, unsigned int value) -{ -} -#endif - -#endif |