diff options
| -rw-r--r-- | drivers/usb/musb/musb_core.c | 9 | ||||
| -rw-r--r-- | 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 0f8b82918a4..239214626ec 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 11b571ec22f..3dfd122266f 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c @@ -333,6 +333,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: @@ -478,7 +479,6 @@ static int __devexit 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;  |