USB: usb_control_msg wait for driver ISR to set status.
This patch changes usb_control_msg back to the state prior to commit
4886720844
.
The USB driver ISR routine may update the status.
Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
This commit is contained in:
parent
6e20e64f5c
commit
84d36b3018
19
common/usb.c
19
common/usb.c
|
@ -197,16 +197,21 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe,
|
||||||
if (timeout == 0)
|
if (timeout == 0)
|
||||||
return (int)size;
|
return (int)size;
|
||||||
|
|
||||||
if (dev->status != 0) {
|
/*
|
||||||
/*
|
* Wait for status to update until timeout expires, USB driver
|
||||||
* Let's wait a while for the timeout to elapse.
|
* interrupt handler may set the status when the USB operation has
|
||||||
* It has no real use, but it keeps the interface happy.
|
* been completed.
|
||||||
*/
|
*/
|
||||||
wait_ms(timeout);
|
while (timeout--) {
|
||||||
return -1;
|
if (!((volatile unsigned long)dev->status & USB_ST_NOT_PROC))
|
||||||
|
break;
|
||||||
|
wait_ms(1);
|
||||||
}
|
}
|
||||||
|
if (dev->status)
|
||||||
|
return -1;
|
||||||
|
|
||||||
return dev->act_len;
|
return dev->act_len;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------------------------
|
/*-------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue