diff mbox

[09/11] spi-dw: Fix condition in spi_dw_{writer/reader}

Message ID 4E02B33A.3060805@gmail.com
State Superseded, archived
Headers show

Commit Message

dirk.brandewie@gmail.com June 23, 2011, 3:30 a.m. UTC
This patch should have been:

spi-dw: Fix condition in spi_dw_{writer/reader}

From: Dirk Brandewie <dirk.brandewie@gmail.com>

Fix the condition based on whether the current transfer has a tx/rx
buffer.

Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
---
  drivers/spi/spi-dw.c |   10 +++++-----
  1 files changed, 5 insertions(+), 5 deletions(-)


------------------------------------------------------------------------------
Simplify data backup and recovery for your virtual environment with vRanger.
Installation's a snap, and flexible recovery options mean your data is safe,
secure and there when you need it. Data protection magic?
Nope - It's vRanger. Get your free trial download today.
http://p.sf.net/sfu/quest-sfdev2dev

Comments

Feng Tang June 23, 2011, 5:09 a.m. UTC | #1
On Thu, 23 Jun 2011 11:30:02 +0800
Dirk Brandewie <dirk.brandewie@gmail.com> wrote:

> This patch should have been:
> 
> spi-dw: Fix condition in spi_dw_{writer/reader}
> 
> From: Dirk Brandewie <dirk.brandewie@gmail.com>
> 
> Fix the condition based on whether the current transfer has a tx/rx
> buffer.
> 
> Signed-off-by: Dirk Brandewie <dirk.brandewie@gmail.com>
> ---
>   drivers/spi/spi-dw.c |   10 +++++-----
>   1 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
> index 96ae4a7..0a848bc 100644
> --- a/drivers/spi/spi-dw.c
> +++ b/drivers/spi/spi-dw.c
> @@ -193,15 +193,15 @@ static void spi_dw_writer(struct spi_dw *dws)
>          u16 txw = 0;
> 
>          while (max--) {
> -               /* Set the tx word if the transfer's original "tx" is
> not null */
> -               if (dws->tx_end - dws->len) {
> +               /* Set the tx word if the transfer's "tx" is not null
> */
> +               if (dws->tx) {
>                          if (dws->n_bytes == 1)
>                                  txw = *(u8 *)(dws->tx);
>                          else
>                                  txw = *(u16 *)(dws->tx);
> +                       dws->tx += dws->n_bytes;
>                  }
>                  dw_writew(dws, dr, txw);
> -               dws->tx += dws->n_bytes;
>          }
>   }

emm, this patch still break the NULL original tx buf case, as it is used in

/* Return the max entries we can fill into tx fifo */
static inline u32 tx_max(struct dw_spi *dws)
{
	u32 tx_left, tx_room, rxtx_gap;

	tx_left = (dws->tx_end - dws->tx) / dws->n_bytes;
	tx_room = dws->fifo_len - dw_readw(dws, txflr);



> 
> @@ -213,13 +213,13 @@ static void spi_dw_reader(struct spi_dw *dws)
>          while (max--) {
>                  rxw = dw_readw(dws, dr);
>                  /* Care rx only if the transfer's original "rx" is
> not null */
> -               if (dws->rx_end - dws->len) {
> +               if (dws->rx) {
>                          if (dws->n_bytes == 1)
>                                  *(u8 *)(dws->rx) = rxw;
>                          else
>                                  *(u16 *)(dws->rx) = rxw;
> +                       dws->rx += dws->n_bytes;
>                  }
> -               dws->rx += dws->n_bytes;
>          }
>   }
> 

------------------------------------------------------------------------------
Simplify data backup and recovery for your virtual environment with vRanger.
Installation's a snap, and flexible recovery options mean your data is safe,
secure and there when you need it. Data protection magic?
Nope - It's vRanger. Get your free trial download today.
http://p.sf.net/sfu/quest-sfdev2dev
diff mbox

Patch

diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
index 96ae4a7..0a848bc 100644
--- a/drivers/spi/spi-dw.c
+++ b/drivers/spi/spi-dw.c
@@ -193,15 +193,15 @@  static void spi_dw_writer(struct spi_dw *dws)
         u16 txw = 0;

         while (max--) {
-               /* Set the tx word if the transfer's original "tx" is not null */
-               if (dws->tx_end - dws->len) {
+               /* Set the tx word if the transfer's "tx" is not null */
+               if (dws->tx) {
                         if (dws->n_bytes == 1)
                                 txw = *(u8 *)(dws->tx);
                         else
                                 txw = *(u16 *)(dws->tx);
+                       dws->tx += dws->n_bytes;
                 }
                 dw_writew(dws, dr, txw);
-               dws->tx += dws->n_bytes;
         }
  }

@@ -213,13 +213,13 @@  static void spi_dw_reader(struct spi_dw *dws)
         while (max--) {
                 rxw = dw_readw(dws, dr);
                 /* Care rx only if the transfer's original "rx" is not null */
-               if (dws->rx_end - dws->len) {
+               if (dws->rx) {
                         if (dws->n_bytes == 1)
                                 *(u8 *)(dws->rx) = rxw;
                         else
                                 *(u16 *)(dws->rx) = rxw;
+                       dws->rx += dws->n_bytes;
                 }
-               dws->rx += dws->n_bytes;
         }
  }