|
@@ -34,6 +34,7 @@
|
|
|
#include <linux/dma-mapping.h>
|
|
|
#include <linux/pm_runtime.h>
|
|
|
#include <linux/err.h>
|
|
|
+#include <linux/delay.h>
|
|
|
#include <linux/usb/musb-omap.h>
|
|
|
|
|
|
#include "musb_core.h"
|
|
@@ -150,6 +151,7 @@ static void omap2430_musb_set_vbus(struct musb *musb, int is_on)
|
|
|
|
|
|
if (is_on) {
|
|
|
if (musb->xceiv->state == OTG_STATE_A_IDLE) {
|
|
|
+ int loops = 100;
|
|
|
/* start the session */
|
|
|
devctl |= MUSB_DEVCTL_SESSION;
|
|
|
musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
|
|
@@ -159,9 +161,11 @@ static void omap2430_musb_set_vbus(struct musb *musb, int is_on)
|
|
|
*/
|
|
|
while (musb_readb(musb->mregs, MUSB_DEVCTL) & 0x80) {
|
|
|
|
|
|
+ mdelay(5);
|
|
|
cpu_relax();
|
|
|
|
|
|
- if (time_after(jiffies, timeout)) {
|
|
|
+ if (time_after(jiffies, timeout)
|
|
|
+ || loops-- <= 0) {
|
|
|
dev_err(musb->controller,
|
|
|
"configured as A device timeout");
|
|
|
ret = -EINVAL;
|