diff options
Diffstat (limited to 'drivers/usb/musb/musb_core.c')
-rw-r--r-- | drivers/usb/musb/musb_core.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 0319ea67e5a1..27dadc0d9114 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -1855,11 +1855,13 @@ static void musb_pm_runtime_check_session(struct musb *musb) MUSB_DEVCTL_HR; switch (devctl & ~s) { case MUSB_QUIRK_B_INVALID_VBUS_91: - if (musb->session) - break; - musb_dbg(musb, "Allow PM as device with invalid vbus: %02x", - devctl); - return; + if (!musb->session && !musb->quirk_invalid_vbus) { + musb->quirk_invalid_vbus = true; + musb_dbg(musb, + "First invalid vbus, assume no session"); + return; + } + break; case MUSB_QUIRK_A_DISCONNECT_19: if (!musb->session) break; @@ -1886,6 +1888,7 @@ static void musb_pm_runtime_check_session(struct musb *musb) error); } else { musb_dbg(musb, "Allow PM with no session: %02x", devctl); + musb->quirk_invalid_vbus = false; pm_runtime_mark_last_busy(musb->controller); pm_runtime_put_autosuspend(musb->controller); } |