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

David Jander
2010-08-20T09:29:25Z

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.