[U-Boot] [PATCH] arm:exynos4:universal_c210: implement software SPI

Minkyu Kang promsoft at gmail.com
Sat Sep 15 11:05:50 CEST 2012


Dear Piotr,

On 29 August 2012 17:15, Piotr Wilczek <p.wilczek at samsung.com> wrote:
> This patch implements software SPI for the universal C210 board.
>
> Signed-off-by: Piotr Wilczek <p.wilczek at samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
> CC: Minkyu Kang <mk7.kang at samsung.com>
> CC: Wolfgang Denk <wd at denx.de>
> CC: Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
> ---
>  board/samsung/universal_c210/universal.c |   36 ++++++++++++++++++++++++++++++
>  drivers/spi/soft_spi.c                   |    7 +++++-
>  include/configs/s5pc210_universal.h      |   19 +++++++++++++++
>  3 files changed, 61 insertions(+), 1 deletions(-)
>
> diff --git a/board/samsung/universal_c210/universal.c b/board/samsung/universal_c210/universal.c
> index 8a114e6..772ade5 100644
> --- a/board/samsung/universal_c210/universal.c
> +++ b/board/samsung/universal_c210/universal.c
> @@ -24,6 +24,7 @@
>
>  #include <common.h>
>  #include <asm/io.h>
> +#include <spi.h>
>  #include <asm/arch/adc.h>
>  #include <asm/arch/gpio.h>
>  #include <asm/arch/mmc.h>
> @@ -34,6 +35,10 @@
>  #include <max8998_pmic.h>
>  #include <asm/arch/watchdog.h>
>
> +#if defined(CONFIG_SOFT_SPI)
> +# include <asm/gpio.h>

remove space between # and include.

> +#endif
> +
>  DECLARE_GLOBAL_DATA_PTR;
>
>  struct exynos4_gpio_part1 *gpio1;
> @@ -288,3 +293,34 @@ int board_early_init_f(void)
>
>         return 0;
>  }
> +
> +void soft_spi_init()
> +{
> +       gpio_direction_output(CONFIG_SOFT_SPI_GPIO_SCLK,
> +               CONFIG_SOFT_SPI_MODE & SPI_CPOL);
> +       gpio_direction_output(CONFIG_SOFT_SPI_GPIO_MOSI, 1);
> +       gpio_direction_input(CONFIG_SOFT_SPI_GPIO_MISO);
> +       gpio_direction_output(CONFIG_SOFT_SPI_GPIO_CS,
> +               !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH));
> +}
> +
> +void spi_cs_activate(struct spi_slave *slave)
> +{
> +       gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS,
> +               !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH));
> +       SPI_SCL(1);
> +       gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS,
> +               CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH);
> +}
> +
> +void spi_cs_deactivate(struct spi_slave *slave)
> +{
> +       gpio_set_value(CONFIG_SOFT_SPI_GPIO_CS,
> +               !(CONFIG_SOFT_SPI_MODE & SPI_CS_HIGH));
> +}
> +
> +int  spi_cs_is_valid(unsigned int bus, unsigned int cs)
> +{
> +       return 1;

always return 1?

> +}
> +
> diff --git a/drivers/spi/soft_spi.c b/drivers/spi/soft_spi.c
> index 13df8cb..a0a3012 100644
> --- a/drivers/spi/soft_spi.c
> +++ b/drivers/spi/soft_spi.c
> @@ -29,6 +29,10 @@
>
>  #include <malloc.h>
>
> +#if defined(CONFIG_SOFT_SPI)
> +# include <asm/gpio.h>
> +#endif
> +
>  /*-----------------------------------------------------------------------
>   * Definitions
>   */
> @@ -59,8 +63,9 @@ static inline struct soft_spi_slave *to_soft_spi(struct spi_slave *slave)
>  void spi_init (void)
>  {
>  #ifdef SPI_INIT
> +#ifdef CONFIG_SYS_IMMR
>         volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
> -
> +#endif

Is it related change with this patch?

>         SPI_INIT;
>  #endif
>  }
> diff --git a/include/configs/s5pc210_universal.h b/include/configs/s5pc210_universal.h
> index 7978317..a338840 100644
> --- a/include/configs/s5pc210_universal.h
> +++ b/include/configs/s5pc210_universal.h
> @@ -266,4 +266,23 @@
>  #define CONFIG_USB_GADGET_S3C_UDC_OTG
>  #define CONFIG_USB_GADGET_DUALSPEED
>
> +/*
> + * SPI Settings
> + */
> +#define CONFIG_SOFT_SPI
> +#define CONFIG_SOFT_SPI_MODE SPI_MODE_3
> +#define CONFIG_SOFT_SPI_GPIO_SCLK exynos4_gpio_part2_get_nr(y3, 1)
> +#define CONFIG_SOFT_SPI_GPIO_MOSI exynos4_gpio_part2_get_nr(y3, 3)
> +#define CONFIG_SOFT_SPI_GPIO_MISO exynos4_gpio_part2_get_nr(y3, 0)
> +#define CONFIG_SOFT_SPI_GPIO_CS exynos4_gpio_part2_get_nr(y4, 3)
> +
> +#define SPI_DELAY udelay(1)
> +#define SPI_INIT soft_spi_init()
> +#define SPI_SCL(bit) gpio_set_value(CONFIG_SOFT_SPI_GPIO_SCLK, bit)
> +#define SPI_SDA(bit) gpio_set_value(CONFIG_SOFT_SPI_GPIO_MOSI, bit)
> +#define SPI_READ gpio_get_value(CONFIG_SOFT_SPI_GPIO_MISO)
> +#ifndef        __ASSEMBLY__
> +void soft_spi_init(void);
> +#endif
> +
>  #endif /* __CONFIG_H */
> --
> 1.7.5.4

Thanks.
Minkyu Kang.
-- 
from. prom.
www.promsoft.net


More information about the U-Boot mailing list