Message ID | 1346228122-13444-2-git-send-email-p.wilczek@samsung.com |
---|---|
State | Changes Requested |
Delegated to: | Minkyu Kang |
Headers | show |
Dear Piotr, On 29 August 2012 17:15, Piotr Wilczek <p.wilczek@samsung.com> wrote: > 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> > --- > 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.
Dear Minkyu, > -----Original Message----- > From: Minkyu Kang [mailto:promsoft@gmail.com] > Sent: Saturday, September 15, 2012 11:06 AM > To: Piotr Wilczek > Cc: u-boot@lists.denx.de; Kyungmin Park > Subject: Re: [U-Boot] [PATCH] arm:exynos4:universal_c210: implement > software SPI > > Dear Piotr, > > On 29 August 2012 17:15, Piotr Wilczek <p.wilczek@samsung.com> wrote: > > 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> > > --- > > 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. Ok. > > > +#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? I can change that it would return 1 only if bus==0 and 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 > > Is it related change with this patch? Yes, it is necessary to successfully compile. > > > 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 Best regards, Piotr Wilczek
This patch implements software SPI for the universal C210 board. SPI is used to configure video driver. Changes in v2: - removed space between # and include; - changed return in spi_cs_is_valid function; Piotr Wilczek (1): arm:exynos4:universal_c210: implement software SPI 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(-)
Dear Piotr Wilczek, In message <1348141834-3603-1-git-send-email-p.wilczek@samsung.com> you wrote: > This patch implements software SPI for the universal C210 board. > SPI is used to configure video driver. Can you please adjust the Subject: to make clear that this is some C210 board specific code? Because we do have software SPI support already ... Say something like: "ARM: C210 board: add software SPI support" Thanks. Wolfgang Denk
Dear Wolfgang Denk, Thank you for your comment. The title is indeed misleading and I change it. Also the patch should be split in two patches. Actually I'm using your software SPI in our board and I need to add two modifications in the soft_spi.c file. Best regards, Piotr Wilczek > -----Original Message----- > From: Wolfgang Denk [mailto:wd@denx.de] > Sent: Thursday, September 20, 2012 5:18 PM > To: Piotr Wilczek > Cc: u-boot@lists.denx.de; Minkyu Kang; Kyungmin Park; Jean-Christophe > PLAGNIOL-VILLARD; Lukasz Majewski > Subject: Re: [PATCH v2] implement software SPI > > Dear Piotr Wilczek, > > In message <1348141834-3603-1-git-send-email-p.wilczek@samsung.com> you > wrote: > > This patch implements software SPI for the universal C210 board. > > SPI is used to configure video driver. > > Can you please adjust the Subject: to make clear that this is some > C210 board specific code? Because we do have software SPI support > already ... > > Say something like: "ARM: C210 board: add software SPI support" > > Thanks. > > Wolfgang Denk > > -- > DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de > "No one talks peace unless he's ready to back it up with war." > "He talks of peace if it is the only way to live." > -- Colonel Green and Surak of Vulcan, "The Savage Curtain", > stardate 5906.5.
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> +#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; +} + 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 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 */