Re: [PATCH 1/2] usb: musb: fix some runtime_pm issues

2012-03-21 Thread Felipe Balbi
On Sat, Feb 04, 2012 at 07:43:51PM +0200, Grazvydas Ignotas wrote:
 When runtime_pm was originally added, it was done in rather confusing
 way: omap2430_musb_init() (called from musb_init_controller) would do
 runtime_pm_get_sync() and musb_init_controller() itself would do
 runtime_pm_put to balance it out. This is not only confusing but also
 wrong if non-omap2430 glue layer is used.
 
 This confusion resulted in commit 772aed45b604 usb: musb: fix
 pm_runtime mismatch, that removed runtime_pm_put() from
 musb_init_controller as that looked unbalanced, and also happened to
 fix unrelated isp1704_charger crash. However this broke runtime PM
 functionality (musb is now always powered, even without gadget active).
 
 Avoid these confusing runtime pm dependences by making
 musb_init_controller() and omap2430_musb_init() do their own runtime
 get/put pairs; also cover error paths. Remove unneeded runtime_pm_put
 in omap2430_remove too. isp1704_charger crash that motivated
 772aed45b604 will be fixed by following patch.
 
 Cc: Felipe Contreras felipe.contre...@gmail.com
 Signed-off-by: Grazvydas Ignotas nota...@gmail.com

applied, thanks

-- 
balbi


signature.asc
Description: Digital signature


[PATCH 1/2] usb: musb: fix some runtime_pm issues

2012-02-04 Thread Grazvydas Ignotas
When runtime_pm was originally added, it was done in rather confusing
way: omap2430_musb_init() (called from musb_init_controller) would do
runtime_pm_get_sync() and musb_init_controller() itself would do
runtime_pm_put to balance it out. This is not only confusing but also
wrong if non-omap2430 glue layer is used.

This confusion resulted in commit 772aed45b604 usb: musb: fix
pm_runtime mismatch, that removed runtime_pm_put() from
musb_init_controller as that looked unbalanced, and also happened to
fix unrelated isp1704_charger crash. However this broke runtime PM
functionality (musb is now always powered, even without gadget active).

Avoid these confusing runtime pm dependences by making
musb_init_controller() and omap2430_musb_init() do their own runtime
get/put pairs; also cover error paths. Remove unneeded runtime_pm_put
in omap2430_remove too. isp1704_charger crash that motivated
772aed45b604 will be fixed by following patch.

Cc: Felipe Contreras felipe.contre...@gmail.com
Signed-off-by: Grazvydas Ignotas nota...@gmail.com
---
 drivers/usb/musb/musb_core.c |9 -
 drivers/usb/musb/omap2430.c  |2 +-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 3d11cf6..19543c9 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -1904,7 +1904,7 @@ musb_init_controller(struct device *dev, int nIrq, void 
__iomem *ctrl)
 
if (!musb-isr) {
status = -ENODEV;
-   goto fail3;
+   goto fail2;
}
 
if (!musb-xceiv-io_ops) {
@@ -1912,6 +1912,8 @@ musb_init_controller(struct device *dev, int nIrq, void 
__iomem *ctrl)
musb-xceiv-io_ops = musb_ulpi_access;
}
 
+   pm_runtime_get_sync(musb-controller);
+
 #ifndef CONFIG_MUSB_PIO_ONLY
if (use_dma  dev-dma_mask) {
struct dma_controller   *c;
@@ -2023,6 +2025,8 @@ musb_init_controller(struct device *dev, int nIrq, void 
__iomem *ctrl)
goto fail5;
 #endif
 
+   pm_runtime_put(musb-controller);
+
dev_info(dev, USB %s mode controller at %p using %s, IRQ %d\n,
({char *s;
 switch (musb-board_mode) {
@@ -2047,6 +2051,9 @@ fail4:
musb_gadget_cleanup(musb);
 
 fail3:
+   pm_runtime_put_sync(musb-controller);
+
+fail2:
if (musb-irq_wake)
device_init_wakeup(dev, 0);
musb_platform_exit(musb);
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c
index df719ea..b105d46 100644
--- a/drivers/usb/musb/omap2430.c
+++ b/drivers/usb/musb/omap2430.c
@@ -332,6 +332,7 @@ static int omap2430_musb_init(struct musb *musb)
 
setup_timer(musb_idle_timer, musb_do_idle, (unsigned long) musb);
 
+   pm_runtime_put_noidle(musb-controller);
return 0;
 
 err1:
@@ -477,7 +478,6 @@ static int __exit omap2430_remove(struct platform_device 
*pdev)
 
platform_device_del(glue-musb);
platform_device_put(glue-musb);
-   pm_runtime_put(pdev-dev);
kfree(glue);
 
return 0;
-- 
1.7.0.4

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html