Patchwork [U-Boot,v2] arm:exynos4:universal_c210: implement software SPI

login
register
mail settings
Submitter Piotr Wilczek
Date Sept. 20, 2012, 11:50 a.m.
Message ID <1348141834-3603-2-git-send-email-p.wilczek@samsung.com>
Download mbox | patch
Permalink /patch/185382/
State Changes Requested
Delegated to: Minkyu Kang
Headers show

Comments

Piotr Wilczek - Sept. 20, 2012, 11:50 a.m.
This patch implements software SPI for the universal C210 board.

Signed-off-by: Piotr Wilczek <p.wilczek@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
CC: Minkyu Kang <mk7.kang@samsung.com>
CC: Wolfgang Denk <wd@denx.de>
CC: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
Changes in v2:
- removed space between # and include;
- changed return in spi_cs_is_valid function;

 board/samsung/universal_c210/universal.c |   35 ++++++++++++++++++++++++++++++
 drivers/spi/soft_spi.c                   |    7 +++++-
 include/configs/s5pc210_universal.h      |   19 ++++++++++++++++
 3 files changed, 60 insertions(+), 1 deletions(-)
Piotr Wilczek - Sept. 24, 2012, 11:56 a.m.
This patchset add software SPI support on Samsung Universal C210 board.
In SPI software driver #ifdef CONFIG_SYS_IMMR in spi_init function is added.

Changes in v2:
- removed space between # and include;
- changed return in spi_cs_is_valid function;
Changes in v3:
- Patch is split in two patches:
  - the first modifies software SPI driver;
  - the second patch add support for SPI on Universal C210 board

Piotr Wilczek (2):
  drivers: spi: modify soft spi driver
  exynos4: universal_C210: use software SPI

 board/samsung/universal_c210/universal.c |   34 ++++++++++++++++++++++++++++++
 drivers/spi/soft_spi.c                   |    3 ++
 include/configs/s5pc210_universal.h      |   19 ++++++++++++++++
 3 files changed, 56 insertions(+), 0 deletions(-)
Minkyu Kang - Oct. 10, 2012, 11:55 a.m.
Dear Piotr Wilczek,

On 24 September 2012 20:56, Piotr Wilczek <p.wilczek@samsung.com> wrote:
> This patchset add software SPI support on Samsung Universal C210 board.
> In SPI software driver #ifdef CONFIG_SYS_IMMR in spi_init function is added.
>
> Changes in v2:
> - removed space between # and include;
> - changed return in spi_cs_is_valid function;
> Changes in v3:
> - Patch is split in two patches:
>   - the first modifies software SPI driver;
>   - the second patch add support for SPI on Universal C210 board
>
> Piotr Wilczek (2):
>   drivers: spi: modify soft spi driver
>   exynos4: universal_C210: use software SPI
>
>  board/samsung/universal_c210/universal.c |   34 ++++++++++++++++++++++++++++++
>  drivers/spi/soft_spi.c                   |    3 ++
>  include/configs/s5pc210_universal.h      |   19 ++++++++++++++++
>  3 files changed, 56 insertions(+), 0 deletions(-)
>

applied to u-boot-samsung.

Thanks.
Minkyu Kang.
Minkyu Kang - Oct. 15, 2012, 1:11 a.m.
On 10 October 2012 20:55, Minkyu Kang <promsoft@gmail.com> wrote:
> Dear Piotr Wilczek,
>
> On 24 September 2012 20:56, Piotr Wilczek <p.wilczek@samsung.com> wrote:
>> This patchset add software SPI support on Samsung Universal C210 board.
>> In SPI software driver #ifdef CONFIG_SYS_IMMR in spi_init function is added.
>>
>> Changes in v2:
>> - removed space between # and include;
>> - changed return in spi_cs_is_valid function;
>> Changes in v3:
>> - Patch is split in two patches:
>>   - the first modifies software SPI driver;
>>   - the second patch add support for SPI on Universal C210 board
>>
>> Piotr Wilczek (2):
>>   drivers: spi: modify soft spi driver
>>   exynos4: universal_C210: use software SPI
>>
>>  board/samsung/universal_c210/universal.c |   34 ++++++++++++++++++++++++++++++
>>  drivers/spi/soft_spi.c                   |    3 ++
>>  include/configs/s5pc210_universal.h      |   19 ++++++++++++++++
>>  3 files changed, 56 insertions(+), 0 deletions(-)
>>
>
> applied to u-boot-samsung.
>

This patchset was reverted.

Thanks.
Minkyu Kang.

Patch

diff --git a/board/samsung/universal_c210/universal.c b/board/samsung/universal_c210/universal.c
index ded97ca..6947e83 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>
@@ -33,6 +34,9 @@ 
 #include <asm/arch/cpu.h>
 #include <max8998_pmic.h>
 #include <asm/arch/watchdog.h>
+#if defined(CONFIG_SOFT_SPI)
+# include <asm/gpio.h>
+#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -284,3 +288,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 bus == 0 && cs == 0;
+}
+
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
 	SPI_INIT;
 #endif
 }
diff --git a/include/configs/s5pc210_universal.h b/include/configs/s5pc210_universal.h
index 46f2663..f7a7443 100644
--- a/include/configs/s5pc210_universal.h
+++ b/include/configs/s5pc210_universal.h
@@ -264,4 +264,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 */