[U-Boot] [PATCH 1/1] USB: usb_control_msg wait for driver ISR to set status.
Daniel Hellstrom
daniel at gaisler.com
Mon Feb 1 10:58:15 CET 2010
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 <daniel at 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
More information about the U-Boot
mailing list