|
@@ -828,7 +828,7 @@ static int usba_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
|
|
|
{
|
|
|
struct usba_ep *ep = to_usba_ep(_ep);
|
|
|
struct usba_udc *udc = ep->udc;
|
|
|
- struct usba_request *req = to_usba_req(_req);
|
|
|
+ struct usba_request *req;
|
|
|
unsigned long flags;
|
|
|
u32 status;
|
|
|
|
|
@@ -837,6 +837,16 @@ static int usba_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
|
|
|
|
|
|
spin_lock_irqsave(&udc->lock, flags);
|
|
|
|
|
|
+ list_for_each_entry(req, &ep->queue, queue) {
|
|
|
+ if (&req->req == _req)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (&req->req != _req) {
|
|
|
+ spin_unlock_irqrestore(&udc->lock, flags);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
if (req->using_dma) {
|
|
|
/*
|
|
|
* If this request is currently being transferred,
|