usb: musb: Check devctl status again for a spurious session request
On start-up, we can get a spurious session request interrupt with nothing connected. After that the devctl session bit will silently clear, but the musb hardware is never idled until a cable is plugged in, or the glue layer module is reloaded. Let's just check the session bit again in 3 seconds in peripheral mode to catch the issue. Signed-off-by: Tony Lindgren <tony@atomide.com> Link: https://lore.kernel.org/r/20210518150615.53464-1-tony@atomide.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
62d472d8ad
commit
7d076c2f55
|
@ -2055,6 +2055,15 @@ static void musb_pm_runtime_check_session(struct musb *musb)
|
||||||
dev_err(musb->controller, "Could not enable: %i\n",
|
dev_err(musb->controller, "Could not enable: %i\n",
|
||||||
error);
|
error);
|
||||||
musb->quirk_retries = 3;
|
musb->quirk_retries = 3;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We can get a spurious MUSB_INTR_SESSREQ interrupt on start-up
|
||||||
|
* in B-peripheral mode with nothing connected and the session
|
||||||
|
* bit clears silently. Check status again in 3 seconds.
|
||||||
|
*/
|
||||||
|
if (devctl & MUSB_DEVCTL_BDEVICE)
|
||||||
|
schedule_delayed_work(&musb->irq_work,
|
||||||
|
msecs_to_jiffies(3000));
|
||||||
} else {
|
} else {
|
||||||
musb_dbg(musb, "Allow PM with no session: %02x", devctl);
|
musb_dbg(musb, "Allow PM with no session: %02x", devctl);
|
||||||
pm_runtime_mark_last_busy(musb->controller);
|
pm_runtime_mark_last_busy(musb->controller);
|
||||||
|
|
Loading…
Reference in New Issue