From 33f5015f2186111d4707f9985dde06504c1ffd92 Mon Sep 17 00:00:00 2001
From: Gregory Nutt <gnutt@nuttx.org>
Date: Mon, 11 May 2015 09:04:25 -0600
Subject: [PATCH] Correct an error recently introduced in the STM32 and EFM32
 USB host controller drivers.

The test for data partially transferred is incorrectec: chan->xfrd != xfrlen
Should be chan->xfrd > 0

From Ronly XLN.
---
 arch/arm/src/efm32/efm32_usbhost.c   | 16 ++++++++--------
 arch/arm/src/stm32/stm32_otgfshost.c | 16 ++++++++--------
 arch/arm/src/stm32/stm32_otghshost.c | 16 ++++++++--------
 3 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/arch/arm/src/efm32/efm32_usbhost.c b/arch/arm/src/efm32/efm32_usbhost.c
index 53f47ea7c1..c2743fd5f7 100644
--- a/arch/arm/src/efm32/efm32_usbhost.c
+++ b/arch/arm/src/efm32/efm32_usbhost.c
@@ -1955,14 +1955,14 @@ static ssize_t efm32_in_transfer(FAR struct efm32_usbhost_s *priv, int chidx,
           /* Check for a special case:  If (1) the transfer was NAKed and (2)
            * no Tx FIFO empty or Rx FIFO not-empty event occurred, then we
            * should be able to just flush the Rx and Tx FIFOs and try again.
-           * We can detect this latter case becasue the then the transfer
+           * We can detect this latter case because the then the transfer
            * buffer pointer and buffer size will be unaltered.
            */
 
           elapsed = clock_systimer() - start;
-          if (ret != -EAGAIN ||                       /* Not a NAK condition OR */
-              elapsed >= EFM32_DATANAK_DELAY ||       /* Timeout has elapsed OR */
-               chan->xfrd > 0)                        /* Data has been partially transferred */
+          if (ret != -EAGAIN ||                  /* Not a NAK condition OR */
+              elapsed >= EFM32_DATANAK_DELAY ||  /* Timeout has elapsed OR */
+              chan->xfrd > 0)                    /* Data has been partially transferred */
             {
               /* Break out and return the error */
 
@@ -2221,14 +2221,14 @@ static ssize_t efm32_out_transfer(FAR struct efm32_usbhost_s *priv, int chidx,
           /* Check for a special case:  If (1) the transfer was NAKed and (2)
            * no Tx FIFO empty or Rx FIFO not-empty event occurred, then we
            * should be able to just flush the Rx and Tx FIFOs and try again.
-           * We can detect this latter case becasue the then the transfer
+           * We can detect this latter case because the then the transfer
            * buffer pointer and buffer size will be unaltered.
            */
 
           elapsed = clock_systimer() - start;
-          if (ret != -EAGAIN ||                     /* Not a NAK condition OR */
-              elapsed >= EFM32_DATANAK_DELAY ||     /* Timeout has elapsed OR */
-              chan->xfrd != xfrlen)                 /* Data has been partially transferred */
+          if (ret != -EAGAIN ||                  /* Not a NAK condition OR */
+              elapsed >= EFM32_DATANAK_DELAY ||  /* Timeout has elapsed OR */
+              chan->xfrd > 0)                    /* Data has been partially transferred */
             {
               /* Break out and return the error */
 
diff --git a/arch/arm/src/stm32/stm32_otgfshost.c b/arch/arm/src/stm32/stm32_otgfshost.c
index 137ffa66e7..4791cdfae5 100644
--- a/arch/arm/src/stm32/stm32_otgfshost.c
+++ b/arch/arm/src/stm32/stm32_otgfshost.c
@@ -1877,14 +1877,14 @@ static ssize_t stm32_in_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
           /* Check for a special case:  If (1) the transfer was NAKed and (2)
            * no Tx FIFO empty or Rx FIFO not-empty event occurred, then we
            * should be able to just flush the Rx and Tx FIFOs and try again.
-           * We can detect this latter case becasue the then the transfer
+           * We can detect this latter case because the then the transfer
            * buffer pointer and buffer size will be unaltered.
            */
 
           elapsed = clock_systimer() - start;
-          if (ret != -EAGAIN ||                       /* Not a NAK condition OR */
-              elapsed >= STM32_DATANAK_DELAY ||       /* Timeout has elapsed OR */
-              chan->xfrd > 0)                         /* Data has been partially transferred */
+          if (ret != -EAGAIN ||                  /* Not a NAK condition OR */
+              elapsed >= STM32_DATANAK_DELAY ||  /* Timeout has elapsed OR */
+              chan->xfrd > 0)                    /* Data has been partially transferred */
             {
               /* Break out and return the error */
 
@@ -2143,14 +2143,14 @@ static ssize_t stm32_out_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
           /* Check for a special case:  If (1) the transfer was NAKed and (2)
            * no Tx FIFO empty or Rx FIFO not-empty event occurred, then we
            * should be able to just flush the Rx and Tx FIFOs and try again.
-           * We can detect this latter case becasue the then the transfer
+           * We can detect this latter case because the then the transfer
            * buffer pointer and buffer size will be unaltered.
            */
 
           elapsed = clock_systimer() - start;
-          if (ret != -EAGAIN ||                     /* Not a NAK condition OR */
-              elapsed >= STM32_DATANAK_DELAY ||     /* Timeout has elapsed OR */
-              chan->xfrd != xfrlen)                 /* Data has been partially transferred */
+          if (ret != -EAGAIN ||                  /* Not a NAK condition OR */
+              elapsed >= STM32_DATANAK_DELAY ||  /* Timeout has elapsed OR */
+              chan->xfrd > 0)                    /* Data has been partially transferred */
             {
               /* Break out and return the error */
 
diff --git a/arch/arm/src/stm32/stm32_otghshost.c b/arch/arm/src/stm32/stm32_otghshost.c
index 638caec147..4856040a64 100644
--- a/arch/arm/src/stm32/stm32_otghshost.c
+++ b/arch/arm/src/stm32/stm32_otghshost.c
@@ -1877,14 +1877,14 @@ static ssize_t stm32_in_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
           /* Check for a special case:  If (1) the transfer was NAKed and (2)
            * no Tx FIFO empty or Rx FIFO not-empty event occurred, then we
            * should be able to just flush the Rx and Tx FIFOs and try again.
-           * We can detect this latter case becasue the then the transfer
+           * We can detect this latter case because the then the transfer
            * buffer pointer and buffer size will be unaltered.
            */
 
           elapsed = clock_systimer() - start;
-          if (ret != -EAGAIN ||                       /* Not a NAK condition OR */
-              elapsed >= STM32_DATANAK_DELAY ||       /* Timeout has elapsed OR */
-               chan->xfrd > 0)                        /* Data has been partially transferred */
+          if (ret != -EAGAIN ||                  /* Not a NAK condition OR */
+              elapsed >= STM32_DATANAK_DELAY ||  /* Timeout has elapsed OR */
+              chan->xfrd > 0)                    /* Data has been partially transferred */
             {
               /* Break out and return the error */
 
@@ -2143,14 +2143,14 @@ static ssize_t stm32_out_transfer(FAR struct stm32_usbhost_s *priv, int chidx,
           /* Check for a special case:  If (1) the transfer was NAKed and (2)
            * no Tx FIFO empty or Rx FIFO not-empty event occurred, then we
            * should be able to just flush the Rx and Tx FIFOs and try again.
-           * We can detect this latter case becasue the then the transfer
+           * We can detect this latter case because the then the transfer
            * buffer pointer and buffer size will be unaltered.
            */
 
           elapsed = clock_systimer() - start;
-          if (ret != -EAGAIN ||                     /* Not a NAK condition OR */
-              elapsed >= STM32_DATANAK_DELAY ||     /* Timeout has elapsed OR */
-              chan->xfrd != xfrlen)                 /* Data has been partially transferred */
+          if (ret != -EAGAIN ||                  /* Not a NAK condition OR */
+              elapsed >= STM32_DATANAK_DELAY ||  /* Timeout has elapsed OR */
+              chan->xfrd > 0)                    /* Data has been partially transferred */
             {
               /* Break out and return the error */