diff options
author | Zhang Yan <b34916@freescale.com> | 2011-02-12 15:52:52 +0800 |
---|---|---|
committer | Zhang Yan <b34916@freescale.com> | 2011-02-12 16:10:24 +0800 |
commit | b549cbc712d2fe3bb231d50dc2c1012d0e0decbd (patch) | |
tree | b57717a4bffcfb6b065d81fce0a791d04dffcf37 /drivers | |
parent | 2d939af982bbd25e056b5908097f071dbf0b8520 (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.c | 9 |
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); |