diff --git a/drivers/usb/gadget/ci13xxx_udc.c b/drivers/usb/gadget/ci13xxx_udc.c index 0252bbc..5a65cda 100644 --- a/drivers/usb/gadget/ci13xxx_udc.c +++ b/drivers/usb/gadget/ci13xxx_udc.c @@ -2140,6 +2140,7 @@ static int ep_queue(struct usb_ep *ep, struct usb_request *req, struct ci13xxx_req *mReq = container_of(req, struct ci13xxx_req, req); int retval = 0; unsigned long flags; + int empty; trace("%p, %p, %X", ep, req, gfp_flags); @@ -2170,15 +2171,18 @@ static int ep_queue(struct usb_ep *ep, struct usb_request *req, dbg_queue(_usb_addr(mEp), req, retval); + empty = list_empty(&mEp->qh[mEp->dir].queue); /* push request */ mReq->req.status = -EINPROGRESS; mReq->req.actual = 0; list_add_tail(&mReq->queue, &mEp->qh[mEp->dir].queue); - retval = _hardware_enqueue(mEp, mReq); - if (retval == -EALREADY || retval == -EBUSY) { - dbg_event(_usb_addr(mEp), "QUEUE", retval); - retval = 0; + if (empty) { + retval = _hardware_enqueue(mEp, mReq); + if (retval == -EALREADY || retval == -EBUSY) { + dbg_event(_usb_addr(mEp), "QUEUE", retval); + retval = 0; + } } done: