diff options
author | Felipe Contreras <felipe.contreras@gmail.com> | 2011-12-19 15:01:54 -0500 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2011-12-20 06:38:09 -0500 |
commit | 772aed45b604c5ff171f0f12c12392d868333f79 (patch) | |
tree | 46dc4594c9664653f158cc7ec71de145f48de9c0 /drivers/usb/musb | |
parent | e7f4e73287d2915499c821b884f70f42187e2a74 (diff) |
usb: musb: fix pm_runtime mismatch
In musb_init_controller() there's a pm_runtime_put(), but there's no
pm_runtime_get(), which creates a mismatch that causes the driver to
sleep when it shouldn't.
This was introduced in 7acc619[1], but it wasn't triggered in my setup
until 18a2689[2] was merged to Linus' branch at point df0914[3]. IOW;
when PM is working as it was supposed to.
However, it seems most of the time this is used in a way that keeps the
counter above 0, so nobody noticed. Also, it seems to depend on the
configuration used in versions before 3.1, but not later (or in it).
I found the problem by loading isp1704_charger before any usb gadgets:
http://article.gmane.org/gmane.linux.kernel/1226122
All versions after 2.6.39 are affected.
[1] usb: musb: Idle path retention and offmode support for OMAP3
[2] OMAP2+: musb: hwmod adaptation for musb registration
[3] Merge branch 'omap-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
Cc: stable@vger.kernel.org
Cc: Hema HK <hemahk@ti.com>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/musb')
-rw-r--r-- | drivers/usb/musb/musb_core.c | 2 |
1 files changed, 0 insertions, 2 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 90b9da1428b4..b35942c56da6 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
@@ -2013,8 +2013,6 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) | |||
2013 | if (status < 0) | 2013 | if (status < 0) |
2014 | goto fail3; | 2014 | goto fail3; |
2015 | 2015 | ||
2016 | pm_runtime_put(musb->controller); | ||
2017 | |||
2018 | status = musb_init_debugfs(musb); | 2016 | status = musb_init_debugfs(musb); |
2019 | if (status < 0) | 2017 | if (status < 0) |
2020 | goto fail4; | 2018 | goto fail4; |