Commit d5d1e1be authored by Peter Chen's avatar Peter Chen Committed by Greg Kroah-Hartman

usb: chipidea: udc: return immediately if re-enable non-empty endpoint

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: default avatarPeter Chen <peter.chen@freescale.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9eccca08
...@@ -1151,10 +1151,13 @@ static int ep_enable(struct usb_ep *ep, ...@@ -1151,10 +1151,13 @@ static int ep_enable(struct usb_ep *ep,
/* only internal SW should enable ctrl endpts */ /* 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"); 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->dir = usb_endpoint_dir_in(desc) ? TX : RX;
hwep->num = usb_endpoint_num(desc); hwep->num = usb_endpoint_num(desc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment