diff options
author | Paul Zimmerman <Paul.Zimmerman@synopsys.com> | 2012-02-24 17:32:15 -0800 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2012-03-02 12:12:09 +0200 |
commit | aee63e3cb6b0396b99c6387a47cb90a7417f3957 (patch) | |
tree | 76468eed5464d6fca184f725467060518d23b5cd /drivers | |
parent | 7d26b58735f5badf2b7ce3320c6ba21b603c77a9 (diff) |
usb: dwc3: shorten long delay in dwc3_gadget_set_link_state()
The loop in dwc3_gadget_set_link_state() was using a udelay(500),
which is a long time to delay in interrupt context. Change it to
udelay(5) and increase the loop count to match.
Signed-off-by: Paul Zimmerman <paulz@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index fac11491850..e2633dd03f8 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -95,11 +95,11 @@ int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode) * @state: the state to put link into * * Caller should take care of locking. This function will - * return 0 on success or -EINVAL. + * return 0 on success or -ETIMEDOUT. */ int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state) { - int retries = 100; + int retries = 10000; u32 reg; reg = dwc3_readl(dwc->regs, DWC3_DCTL); @@ -113,11 +113,10 @@ int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state) while (--retries) { reg = dwc3_readl(dwc->regs, DWC3_DSTS); - /* in HS, means ON */ if (DWC3_DSTS_USBLNKST(reg) == state) return 0; - udelay(500); + udelay(5); } dev_vdbg(dwc->dev, "link state change request timed out\n"); |