Skip to content

Commit

Permalink
usb: chipidea: udc: return immediately if re-enable non-empty endpoint
Browse files Browse the repository at this point in the history
Some gadget driver (like uac1) will try to enable endpoint again even
the ep is not empty, it will cause the ep reset again and may affect
the dTD list which has already queued.

It returns -EBUSY immediately, and indicate the endpoint is in use.
In this way, the ep's behavior will not be affected, and the gadget
driver is also notified.

Cc: Xuebing Wang <xbing6@gmail.com>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Peter Chen authored and Greg Kroah-Hartman committed Mar 18, 2015
1 parent 9eccca0 commit d5d1e1b
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions drivers/usb/chipidea/udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1151,10 +1151,13 @@ static int ep_enable(struct usb_ep *ep,

/* only internal SW should enable ctrl endpts */

hwep->ep.desc = desc;

if (!list_empty(&hwep->qh.queue))
if (!list_empty(&hwep->qh.queue)) {
dev_warn(hwep->ci->dev, "enabling a non-empty endpoint!\n");
spin_unlock_irqrestore(hwep->lock, flags);
return -EBUSY;
}

hwep->ep.desc = desc;

hwep->dir = usb_endpoint_dir_in(desc) ? TX : RX;
hwep->num = usb_endpoint_num(desc);
Expand Down

0 comments on commit d5d1e1b

Please sign in to comment.