summaryrefslogtreecommitdiffstats
path: root/drivers/usb/musb
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2016-09-22 15:58:29 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-09-23 12:26:07 +0200
commit4e719183667e1363b0d81add5212aee2f149d727 (patch)
tree4bcea7383280830b102280df1f9f7b528badefa3 /drivers/usb/musb
parentb36df0905ef808a8e9e46ded5f0b4967f21a2114 (diff)
downloadlinux-4e719183667e1363b0d81add5212aee2f149d727.tar.gz
linux-4e719183667e1363b0d81add5212aee2f149d727.tar.bz2
linux-4e719183667e1363b0d81add5212aee2f149d727.zip
usb: musb: Fix PM runtime for disconnect after unconfigure
If we unconfigure musb as a USB peripheral with cable connected, and then remove the cable, no interrupts will happen. And musb thinks we're still connected keeping the device active. Now with the session bit based PM runtime working for musb, we can fix this issue by calling musb irq_work. That rechecks the devctl register and reconfigures PM runtime based on the devctl. Fixes: 467d5c980709 ("usb: musb: Implement session bit based runtime PM for musb-core") Signed-off-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Bin Liu <b-liu@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/musb')
-rw-r--r--drivers/usb/musb/musb_gadget.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index 6d1e975e9605..bff4869a57cd 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -1964,6 +1964,9 @@ static int musb_gadget_stop(struct usb_gadget *g)
* that currently misbehaves.
*/
+ /* Force check of devctl register for PM runtime */
+ schedule_work(&musb->irq_work);
+
pm_runtime_mark_last_busy(musb->controller);
pm_runtime_put_autosuspend(musb->controller);