[RESEND PATCH v3] spi: davinci: add support for adding delay between word's transmissions

2014-09-16 Thread Grygorii Strashko
From: Murali Karicheri m-kariche...@ti.com

This patch adds ability to configure delay between transmission of
words over SPI bus if it's required by SPI slave devices.

New optional SPI slave property:
- ti,spi-word-delay : delay between transmission of words
(SPIFMTn.WDELAY, SPIDAT1.WDEL)

Signed-off-by: Murali Karicheri m-kariche...@ti.com
Signed-off-by: Grygorii Strashko grygorii.stras...@ti.com
---
Rebased on top of:
  spi.git/for-next + 
  [PATCH] spi: davinci: remove empty function davinci_spi_cleanup
  http://www.spinics.net/lists/arm-kernel/msg362811.html

v3:
http://www.spinics.net/lists/devicetree/msg49141.html
v2:
http://www.spinics.net/lists/devicetree/msg48514.html
v1:
http://www.spinics.net/lists/linux-spi/msg01609.html

 .../devicetree/bindings/spi/spi-davinci.txt| 30 
 drivers/spi/spi-davinci.c  | 55 +++---
 2 files changed, 78 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/spi/spi-davinci.txt 
b/Documentation/devicetree/bindings/spi/spi-davinci.txt
index f80887b..12ecfe9 100644
--- a/Documentation/devicetree/bindings/spi/spi-davinci.txt
+++ b/Documentation/devicetree/bindings/spi/spi-davinci.txt
@@ -1,5 +1,10 @@
 Davinci SPI controller device bindings
 
+Links on DM:
+Keystone 2 - http://www.ti.com/lit/ug/sprugp2a/sprugp2a.pdf
+dm644x - http://www.ti.com/lit/ug/sprue32a/sprue32a.pdf
+OMAP-L138/da830 - http://www.ti.com/lit/ug/spruh77a/spruh77a.pdf
+
 Required properties:
 - #address-cells: number of cells required to define a chip select
address on the SPI bus. Should be set to 1.
@@ -24,6 +29,30 @@ Optional:
cs-gpios = 0, 0, 0, gpio1 30 0, gpio1 31 0;
where first three are internal CS and last two are GPIO CS.
 
+Optional properties for slave devices:
+SPI slave nodes can contain the following properties.
+Not all SPI Peripherals from Texas Instruments support this.
+Please check SPI peripheral documentation for a device before using these.
+
+- ti,spi-wdelay : delay between transmission of words
+   (SPIFMTn.WDELAY, SPIDAT1.WDEL) must be specified in number of SPI module
+   clock periods.
+
+   delay = WDELAY * SPI_module_clock_period + 2 * SPI_module_clock_period
+
+Below is timing diagram which shows functional meaning of
+ti,spi-wdelay parameter.
+
+ +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+
+SPI_CLK  | | | | | | | | | |   | | | | | |
+  +--+ +-+ +-+ +-+ +-+ +---+ +-+ +-+ +-
+
+SPI_SOMI/SIMO+-+   +---
+  +--+ word1   +---+word2
+ +-+   +---
+  WDELAY
+--
+
 Example of a NOR flash slave device (n25q032) connected to DaVinci
 SPI controller device over the SPI bus.
 
@@ -43,6 +72,7 @@ spi0:spi@20BF {
compatible = st,m25p32;
spi-max-frequency = 2500;
reg = 0;
+   ti,spi-wdelay = 8;
 
partition@0 {
label = u-boot-spl;
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c
index 134fb6e..ada3891 100644
--- a/drivers/spi/spi-davinci.c
+++ b/drivers/spi/spi-davinci.c
@@ -65,6 +65,7 @@
 
 /* SPIDAT1 (upper 16 bit defines) */
 #define SPIDAT1_CSHOLD_MASKBIT(12)
+#define SPIDAT1_WDEL   BIT(10)
 
 /* SPIGCR1 */
 #define SPIGCR1_CLKMOD_MASKBIT(1)
@@ -209,6 +210,7 @@ static void davinci_spi_chipselect(struct spi_device *spi, 
int value)
 {
struct davinci_spi *dspi;
struct davinci_spi_platform_data *pdata;
+   struct davinci_spi_config *spicfg = spi-controller_data;
u8 chip_sel = spi-chip_select;
u16 spidat1 = CS_DEFAULT;
bool gpio_chipsel = false;
@@ -223,6 +225,10 @@ static void davinci_spi_chipselect(struct spi_device *spi, 
int value)
gpio = spi-cs_gpio;
}
 
+   /* program delay transfers if tx_delay is non zero */
+   if (spicfg-wdelay)
+   spidat1 |= SPIDAT1_WDEL;
+
/*
 * Board specific chip select logic decides the polarity and cs
 * line for the controller
@@ -237,9 +243,9 @@ static void davinci_spi_chipselect(struct spi_device *spi, 
int value)
spidat1 |= SPIDAT1_CSHOLD_MASK;
spidat1 = ~(0x1  chip_sel);
}
-
-   iowrite16(spidat1, dspi-base + SPIDAT1 + 2);
}
+
+   iowrite16(spidat1, dspi-base + SPIDAT1 + 2);
 }
 
 /**
@@ -285,7 +291,7 @@ static int davinci_spi_setup_transfer(struct spi_device 
*spi,
int prescale;
 
dspi = spi_master_get_devdata(spi-master);
-   spicfg = (struct davinci_spi_config *)spi-controller_data;
+   spicfg = spi-controller_data;
if (!spicfg)

Re: [RESEND PATCH v3] spi: davinci: add support for adding delay between word's transmissions

2014-09-16 Thread Mark Brown
On Tue, Sep 16, 2014 at 02:25:05PM +0300, Grygorii Strashko wrote:
 From: Murali Karicheri m-kariche...@ti.com
 
 This patch adds ability to configure delay between transmission of
 words over SPI bus if it's required by SPI slave devices.

Applied, thanks.


signature.asc
Description: Digital signature
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH v3] spi: davinci: add support for adding delay between word's transmissions

2014-09-15 Thread Grygorii Strashko
On 09/13/2014 07:06 PM, Mark Brown wrote:
 On Fri, Sep 12, 2014 at 06:48:12PM +0300, Grygorii Strashko wrote:
 From: Murali Karicheri m-kariche...@ti.com

 This patch adds ability to configure delay between transmission of
 words over SPI bus if it's required by SPI slave devices.
 
 This is fine but it doesn't appear to apply against current code.  Can
 you please check and resend?
 

This one should be applied without conflicts on top of
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git
branch: for-next

since you've applied the patch:
[PATCH] spi: davinci: request cs_gpio's from probe
http://www.spinics.net/lists/linux-spi/msg01811.html

I have to mention about this dependency, sorry for that.

Regards,
-grygorii

___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


Re: [PATCH v3] spi: davinci: add support for adding delay between word's transmissions

2014-09-13 Thread Mark Brown
On Fri, Sep 12, 2014 at 06:48:12PM +0300, Grygorii Strashko wrote:
 From: Murali Karicheri m-kariche...@ti.com
 
 This patch adds ability to configure delay between transmission of
 words over SPI bus if it's required by SPI slave devices.

This is fine but it doesn't appear to apply against current code.  Can
you please check and resend?


signature.asc
Description: Digital signature
___
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source


[PATCH v3] spi: davinci: add support for adding delay between word's transmissions

2014-09-12 Thread Grygorii Strashko
From: Murali Karicheri m-kariche...@ti.com

This patch adds ability to configure delay between transmission of
words over SPI bus if it's required by SPI slave devices.

New optional SPI slave's property:
- ti,spi-word-delay : delay between transmission of words
(SPIFMTn.WDELAY, SPIDAT1.WDEL)

Signed-off-by: Murali Karicheri m-kariche...@ti.com
Signed-off-by: Grygorii Strashko grygorii.stras...@ti.com
---
Changes in v3:
- removed C2TDELAY, T2CDELAY parameters

v2:
http://www.spinics.net/lists/devicetree/msg48514.html
v1:
http://www.spinics.net/lists/linux-spi/msg01609.html

 .../devicetree/bindings/spi/spi-davinci.txt| 30 +
 drivers/spi/spi-davinci.c  | 50 +++---
 2 files changed, 73 insertions(+), 7 deletions(-)

diff --git a/Documentation/devicetree/bindings/spi/spi-davinci.txt 
b/Documentation/devicetree/bindings/spi/spi-davinci.txt
index f80887b..12ecfe9 100644
--- a/Documentation/devicetree/bindings/spi/spi-davinci.txt
+++ b/Documentation/devicetree/bindings/spi/spi-davinci.txt
@@ -1,5 +1,10 @@
 Davinci SPI controller device bindings
 
+Links on DM:
+Keystone 2 - http://www.ti.com/lit/ug/sprugp2a/sprugp2a.pdf
+dm644x - http://www.ti.com/lit/ug/sprue32a/sprue32a.pdf
+OMAP-L138/da830 - http://www.ti.com/lit/ug/spruh77a/spruh77a.pdf
+
 Required properties:
 - #address-cells: number of cells required to define a chip select
address on the SPI bus. Should be set to 1.
@@ -24,6 +29,30 @@ Optional:
cs-gpios = 0, 0, 0, gpio1 30 0, gpio1 31 0;
where first three are internal CS and last two are GPIO CS.
 
+Optional properties for slave devices:
+SPI slave nodes can contain the following properties.
+Not all SPI Peripherals from Texas Instruments support this.
+Please check SPI peripheral documentation for a device before using these.
+
+- ti,spi-wdelay : delay between transmission of words
+   (SPIFMTn.WDELAY, SPIDAT1.WDEL) must be specified in number of SPI module
+   clock periods.
+
+   delay = WDELAY * SPI_module_clock_period + 2 * SPI_module_clock_period
+
+Below is timing diagram which shows functional meaning of
+ti,spi-wdelay parameter.
+
+ +-+ +-+ +-+ +-+ +-+   +-+ +-+ +-+
+SPI_CLK  | | | | | | | | | |   | | | | | |
+  +--+ +-+ +-+ +-+ +-+ +---+ +-+ +-+ +-
+
+SPI_SOMI/SIMO+-+   +---
+  +--+ word1   +---+word2
+ +-+   +---
+  WDELAY
+--
+
 Example of a NOR flash slave device (n25q032) connected to DaVinci
 SPI controller device over the SPI bus.
 
@@ -43,6 +72,7 @@ spi0:spi@20BF {
compatible = st,m25p32;
spi-max-frequency = 2500;
reg = 0;
+   ti,spi-wdelay = 8;
 
partition@0 {
label = u-boot-spl;
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c
index d493507..ada3891 100644
--- a/drivers/spi/spi-davinci.c
+++ b/drivers/spi/spi-davinci.c
@@ -65,6 +65,7 @@
 
 /* SPIDAT1 (upper 16 bit defines) */
 #define SPIDAT1_CSHOLD_MASKBIT(12)
+#define SPIDAT1_WDEL   BIT(10)
 
 /* SPIGCR1 */
 #define SPIGCR1_CLKMOD_MASKBIT(1)
@@ -209,6 +210,7 @@ static void davinci_spi_chipselect(struct spi_device *spi, 
int value)
 {
struct davinci_spi *dspi;
struct davinci_spi_platform_data *pdata;
+   struct davinci_spi_config *spicfg = spi-controller_data;
u8 chip_sel = spi-chip_select;
u16 spidat1 = CS_DEFAULT;
bool gpio_chipsel = false;
@@ -223,6 +225,10 @@ static void davinci_spi_chipselect(struct spi_device *spi, 
int value)
gpio = spi-cs_gpio;
}
 
+   /* program delay transfers if tx_delay is non zero */
+   if (spicfg-wdelay)
+   spidat1 |= SPIDAT1_WDEL;
+
/*
 * Board specific chip select logic decides the polarity and cs
 * line for the controller
@@ -237,9 +243,9 @@ static void davinci_spi_chipselect(struct spi_device *spi, 
int value)
spidat1 |= SPIDAT1_CSHOLD_MASK;
spidat1 = ~(0x1  chip_sel);
}
-
-   iowrite16(spidat1, dspi-base + SPIDAT1 + 2);
}
+
+   iowrite16(spidat1, dspi-base + SPIDAT1 + 2);
 }
 
 /**
@@ -285,7 +291,7 @@ static int davinci_spi_setup_transfer(struct spi_device 
*spi,
int prescale;
 
dspi = spi_master_get_devdata(spi-master);
-   spicfg = (struct davinci_spi_config *)spi-controller_data;
+   spicfg = spi-controller_data;
if (!spicfg)
spicfg = davinci_spi_default_cfg;
 
@@ -333,6 +339,14 @@ static int davinci_spi_setup_transfer(struct spi_device 
*spi,
spifmt |=