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>
* @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);
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");