aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/musb/musb_dsps.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index c7fe16db6bb6..e0d81b8318ab 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -121,6 +121,7 @@ struct dsps_glue {
121 unsigned long last_timer; /* last timer data for each instance */ 121 unsigned long last_timer; /* last timer data for each instance */
122}; 122};
123 123
124static void dsps_musb_try_idle(struct musb *musb, unsigned long timeout);
124/** 125/**
125 * dsps_musb_enable - enable interrupts 126 * dsps_musb_enable - enable interrupts
126 */ 127 */
@@ -143,6 +144,7 @@ static void dsps_musb_enable(struct musb *musb)
143 /* Force the DRVVBUS IRQ so we can start polling for ID change. */ 144 /* Force the DRVVBUS IRQ so we can start polling for ID change. */
144 dsps_writel(reg_base, wrp->coreintr_set, 145 dsps_writel(reg_base, wrp->coreintr_set,
145 (1 << wrp->drvvbus) << wrp->usb_shift); 146 (1 << wrp->drvvbus) << wrp->usb_shift);
147 dsps_musb_try_idle(musb, 0);
146} 148}
147 149
148/** 150/**
@@ -234,6 +236,9 @@ static void dsps_musb_try_idle(struct musb *musb, unsigned long timeout)
234 if (musb->port_mode == MUSB_PORT_MODE_HOST) 236 if (musb->port_mode == MUSB_PORT_MODE_HOST)
235 return; 237 return;
236 238
239 if (!musb->g.dev.driver)
240 return;
241
237 if (time_after(glue->last_timer, timeout) && 242 if (time_after(glue->last_timer, timeout) &&
238 timer_pending(&glue->timer)) { 243 timer_pending(&glue->timer)) {
239 dev_dbg(musb->controller, 244 dev_dbg(musb->controller,