From: Hans de Goede <hdegoede@redhat.com>
Date: Sun, 11 Jan 2015 19:34:50 +0000 (+0100)
Subject: musb-new: Fix interrupt transfers not working
X-Git-Tag: v2025.01-rc5-pxa1908~13891^2~5
X-Git-Url: http://git.dujemihanovic.xyz/html/static/git-favicon.png?a=commitdiff_plain;h=e8672e3f0ec571d0ca7ccd8cbbeb113802c1d443;p=u-boot.git

musb-new: Fix interrupt transfers not working

For bulk and ctrl transfers common/usb.c sets udev->status = USB_ST_NOT_PROC,
but it does not do so for interrupt transfers.

musb_uboot.c: submit_urb() however was waiting for USB_ST_NOT_PROC to become 0,
and thus without anyone setting USB_ST_NOT_PROC would exit immediately for
interrupt urbs, returning the urb status of EINPROGRESS as error.

This commit fixes this, thereby also making usb_kbd.c work together with
musb_new and CONFIG_SYS_USB_EVENT_POLL.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---

diff --git a/drivers/usb/musb-new/musb_uboot.c b/drivers/usb/musb-new/musb_uboot.c
index f8a0346f36..28500bf157 100644
--- a/drivers/usb/musb-new/musb_uboot.c
+++ b/drivers/usb/musb-new/musb_uboot.c
@@ -74,7 +74,7 @@ static int submit_urb(struct usb_hcd *hcd, struct urb *urb)
 		if (ctrlc())
 			return -EIO;
 		host->isr(0, host);
-	} while ((urb->dev->status & USB_ST_NOT_PROC) &&
+	} while (urb->status == -EINPROGRESS &&
 		 get_timer(0) < timeout);
 
 	return urb->status;