summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorZhang Yan <b34916@freescale.com>2011-02-12 15:52:52 +0800
committerZhang Yan <b34916@freescale.com>2011-02-12 16:10:24 +0800
commitb549cbc712d2fe3bb231d50dc2c1012d0e0decbd (patch)
treeb57717a4bffcfb6b065d81fce0a791d04dffcf37 /drivers
parent2d939af982bbd25e056b5908097f071dbf0b8520 (diff)
ENGR00139111: USB GADGET: Fix endpoint disable problems
fsl_ep_disable may be called while unregister gadget driver. Gedget speed was set to UNKNOWN. So we should disable endpoint whatever link speed. Correct uninitialized variables in spin lock. Signed-off-by: Zhang Yan <b34916@freescale.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/arcotg_udc.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/drivers/usb/gadget/arcotg_udc.c b/drivers/usb/gadget/arcotg_udc.c
index a6bae6c738d3..68c2e1b9c1cc 100644
--- a/drivers/usb/gadget/arcotg_udc.c
+++ b/drivers/usb/gadget/arcotg_udc.c
@@ -802,13 +802,6 @@ static int fsl_ep_disable(struct usb_ep *_ep)
return -EINVAL;
}
- spin_lock_irqsave(&udc->lock, flags);
- udc = (struct fsl_udc *)ep->udc;
- if (!udc->driver || (udc->gadget.speed == USB_SPEED_UNKNOWN)) {
- spin_unlock_irqrestore(&udc->lock, flags);
- return -ESHUTDOWN;
- }
-
/* disable ep on controller */
ep_num = ep_index(ep);
epctrl = fsl_readl(&dr_regs->endptctrl[ep_num]);
@@ -818,6 +811,8 @@ static int fsl_ep_disable(struct usb_ep *_ep)
epctrl &= ~EPCTRL_RX_ENABLE;
fsl_writel(epctrl, &dr_regs->endptctrl[ep_num]);
+ udc = (struct fsl_udc *)ep->udc;
+ spin_lock_irqsave(&udc->lock, flags);
/* nuke all pending requests (does flush) */
nuke(ep, -ESHUTDOWN);