This patch changes usb_control_msg back to the state prior to commit
48867208444cb2a82e2af9c3249e90b7ed4a1751.

The USB driver ISR routine may update the status.

Signed-off-by: Daniel Hellstrom <dan...@gaisler.com>
---
 common/usb.c |   21 ++++++++++++---------
 1 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/common/usb.c b/common/usb.c
index eef4b34..f7a5513 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -197,16 +197,19 @@ int usb_control_msg(struct usb_device *dev, unsigned int 
pipe,
        if (timeout == 0)
                return (int)size;
 
-       if (dev->status != 0) {
-               /*
-                * Let's wait a while for the timeout to elapse.
-                * It has no real use, but it keeps the interface happy.
-                */
-               wait_ms(timeout);
-               return -1;
+       /* Wait for status to update until timeout expires, USB driver 
+        * interrupt handler may set the status when the USB operation has
+        * been completed.
+        */
+       while (timeout--) {
+               if ( !((volatile unsigned long)dev->status & USB_ST_NOT_PROC) )
+                       break;
+               wait_ms(1);
        }
-
-       return dev->act_len;
+       if ( dev->status == 0 )
+               return dev->act_len;
+       else
+               return -1;
 }
 
 /*-------------------------------------------------------------------
-- 
1.5.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to