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>
This commit is contained in:
Paul Zimmerman 2012-02-24 17:32:15 -08:00 committed by Felipe Balbi
parent 7d26b58735
commit aee63e3cb6
1 changed files with 3 additions and 4 deletions

View File

@ -95,11 +95,11 @@ int dwc3_gadget_set_test_mode(struct dwc3 *dwc, int mode)
* @state: the state to put link into * @state: the state to put link into
* *
* Caller should take care of locking. This function will * 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 dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state)
{ {
int retries = 100; int retries = 10000;
u32 reg; u32 reg;
reg = dwc3_readl(dwc->regs, DWC3_DCTL); 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) { while (--retries) {
reg = dwc3_readl(dwc->regs, DWC3_DSTS); reg = dwc3_readl(dwc->regs, DWC3_DSTS);
/* in HS, means ON */
if (DWC3_DSTS_USBLNKST(reg) == state) if (DWC3_DSTS_USBLNKST(reg) == state)
return 0; return 0;
udelay(500); udelay(5);
} }
dev_vdbg(dwc->dev, "link state change request timed out\n"); dev_vdbg(dwc->dev, "link state change request timed out\n");