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