[U-Boot] [PATCH] Use common function to set GPIOs for MX3 and MX5

David Jander david.jander at protonic.nl
Fri Aug 20 11:29:25 CEST 2010


Hi Stefano,

On Friday 20 August 2010 10:20:11 am Stefano Babic wrote:
> diff --git a/drivers/spi/mxc_spi.c b/drivers/spi/mxc_spi.c
> index e15a63c..54af2e3 100644
> --- a/drivers/spi/mxc_spi.c
> +++ b/drivers/spi/mxc_spi.c
> @@ -23,6 +23,7 @@
>  #include <spi.h>
>  #include <asm/errno.h>
>  #include <asm/io.h>
> +#include <mxc_gpio.h>
> 
>  #ifdef CONFIG_MX27
>  /* i.MX27 has a completely wrong register layout and register definitions
>  in the @@ -68,9 +69,6 @@ static unsigned long spi_bases[] = {
>  	0x53f84000,
>  };
> 
> -#define OUT	MX31_GPIO_DIRECTION_OUT
> -#define mxc_gpio_direction	mx31_gpio_direction
> -#define mxc_gpio_set		mx31_gpio_set
>  #elif defined(CONFIG_MX51)
>  #include <asm/arch/imx-regs.h>
>  #include <asm/arch/clock.h>
> @@ -111,13 +109,12 @@ static unsigned long spi_bases[] = {
>  	CSPI2_BASE_ADDR,
>  	CSPI3_BASE_ADDR,
>  };
> -#define mxc_gpio_direction(gpio, dir)	(0)
> -#define mxc_gpio_set(gpio, value)	{}
> -#define OUT	1

After this change, it seems something else is missing:
GCC somehow removed the following code for i.MX51 without actually compiling 
the arguments to the functions (???), but now it becomes evident this only 
compiles for i.MX31:

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->ctrl_reg & MXC_CSPICTRL_SSPOL);
}

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,
			      !(mxcs->ctrl_reg & MXC_CSPICTRL_SSPOL));
}

On i.MX51 SSPOL is set in the config register, and per SS individually. 
Therefore, MXC_CSPICTRL_SSPOL isn't defined for i.MX51.

Best regards,

-- 
David Jander
Protonic Holland.


More information about the U-Boot mailing list