[U-Boot] [PATCH 4/5] spi: designware_spi: Some fixes / changes

2014-11-16 Thread Stefan Roese
As suggested by Pavel, here some fixes to the designware SPI driver:

- Spelling fixes
- Comment for timeout added
- Removed n_bytes completely (bits_per_word is enough for this)
- Unput clock now not defined via macro. The function to
  get the clock value is now called directly from within the driver

Signed-off-by: Stefan Roese s...@denx.de
Cc: Chin Liang See cl...@altera.com
Cc: Dinh Nguyen dingu...@altera.com
Cc: Vince Bridgers vbrid...@altera.com
Cc: Marek Vasut ma...@denx.de
Cc: Pavel Machek pa...@denx.de
Cc: Jagannadha Sutradharudu Teki jagannadh.t...@gmail.com
---
 drivers/spi/designware_spi.c | 39 ---
 1 file changed, 20 insertions(+), 19 deletions(-)

diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c
index 1bc0d04..98c9f03 100644
--- a/drivers/spi/designware_spi.c
+++ b/drivers/spi/designware_spi.c
@@ -3,7 +3,8 @@
  *
  * Copyright (C) 2014 Stefan Roese s...@denx.de
  *
- * Very loosly based on the Linux driver version which is:
+ * Very loosely based on the Linux driver:
+ * drivers/spi/spi-dw.c, which is:
  * Copyright (c) 2009, Intel Corporation.
  *
  * SPDX-License-Identifier:GPL-2.0
@@ -17,6 +18,7 @@
 #include fdtdec.h
 #include linux/compat.h
 #include asm/io.h
+#include asm/arch/clock_manager.h
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -81,7 +83,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #define SR_TX_ERR  (1  5)
 #define SR_DCOL(1  6)
 
-#define RX_TIMEOUT 1000
+#define RX_TIMEOUT 1000/* timeout in ms */
 
 struct dw_spi_platdata {
s32 frequency;  /* Default clock frequency, -1 for none */
@@ -95,7 +97,6 @@ struct dw_spi_priv {
 
int bits_per_word;
u8 cs;  /* chip select pin */
-   u8 n_bytes; /* current is a 1/2/4 byte op */
u8 tmode;   /* TR/TO/RO/EEPROM */
u8 type;/* SPI/SSP/MicroWire */
int len;
@@ -185,7 +186,6 @@ static int dw_spi_probe(struct udevice *bus)
 
/* Currently only bits_per_word == 8 supported */
priv-bits_per_word = 8;
-   priv-n_bytes = 1;
 
priv-tmode = 0; /* Tx  Rx */
 
@@ -200,19 +200,19 @@ static inline u32 tx_max(struct dw_spi_priv *priv)
 {
u32 tx_left, tx_room, rxtx_gap;
 
-   tx_left = (priv-tx_end - priv-tx) / priv-n_bytes;
+   tx_left = (priv-tx_end - priv-tx) / (priv-bits_per_word  3);
tx_room = priv-fifo_len - dw_readw(priv, DW_SPI_TXFLR);
 
/*
 * Another concern is about the tx/rx mismatch, we
-* though to use (priv-fifo_len - rxflr - txflr) as
+* thought about using (priv-fifo_len - rxflr - txflr) as
 * one maximum value for tx, but it doesn't cover the
 * data which is out of tx/rx fifo and inside the
 * shift registers. So a control from sw point of
 * view is taken.
 */
rxtx_gap = ((priv-rx_end - priv-rx) - (priv-tx_end - priv-tx)) /
-   priv-n_bytes;
+   (priv-bits_per_word  3);
 
return min3(tx_left, tx_room, (u32)(priv-fifo_len - rxtx_gap));
 }
@@ -220,7 +220,7 @@ static inline u32 tx_max(struct dw_spi_priv *priv)
 /* Return the max entries we should read out of rx fifo */
 static inline u32 rx_max(struct dw_spi_priv *priv)
 {
-   u32 rx_left = (priv-rx_end - priv-rx) / priv-n_bytes;
+   u32 rx_left = (priv-rx_end - priv-rx) / (priv-bits_per_word  3);
 
return min_t(u32, rx_left, dw_readw(priv, DW_SPI_RXFLR));
 }
@@ -233,14 +233,14 @@ static void dw_writer(struct dw_spi_priv *priv)
while (max--) {
/* Set the tx word if the transfer's original tx is not null 
*/
if (priv-tx_end - priv-len) {
-   if (priv-n_bytes == 1)
+   if (priv-bits_per_word == 8)
txw = *(u8 *)(priv-tx);
else
txw = *(u16 *)(priv-tx);
}
dw_writew(priv, DW_SPI_DR, txw);
debug(%s: tx=0x%02x\n, __func__, txw);
-   priv-tx += priv-n_bytes;
+   priv-tx += priv-bits_per_word  3;
}
 }
 
@@ -261,14 +261,18 @@ static int dw_reader(struct dw_spi_priv *priv)
while (max--) {
rxw = dw_readw(priv, DW_SPI_DR);
debug(%s: rx=0x%02x\n, __func__, rxw);
-   /* Care rx only if the transfer's original rx is not null */
+
+   /*
+* Care about rx only if the transfer's original rx is
+* not null
+*/
if (priv-rx_end - priv-len) {
-   if (priv-n_bytes == 1)
+   if (priv-bits_per_word == 8)
*(u8 *)(priv-rx) = rxw;
else
*(u16 *)(priv-rx) = rxw;
}
-   

Re: [U-Boot] [PATCH 4/5] spi: designware_spi: Some fixes / changes

2014-11-16 Thread Pavel Machek
On Sun 2014-11-16 12:47:01, Stefan Roese wrote:
 As suggested by Pavel, here some fixes to the designware SPI driver:
 
 - Spelling fixes
 - Comment for timeout added
 - Removed n_bytes completely (bits_per_word is enough for this)
 - Unput clock now not defined via macro. The function to
   get the clock value is now called directly from within the driver
 
 Signed-off-by: Stefan Roese s...@denx.de
 Cc: Chin Liang See cl...@altera.com
 Cc: Dinh Nguyen dingu...@altera.com
 Cc: Vince Bridgers vbrid...@altera.com
 Cc: Marek Vasut ma...@denx.de

Acked-by: Pavel Machek pa...@denx.de

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot