diff options
Diffstat (limited to 'drivers/usb/musb/omap2430.c')
| -rw-r--r-- | drivers/usb/musb/omap2430.c | 31 | 
1 files changed, 18 insertions, 13 deletions
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index 2ae0bb30999..c7785e81254 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c @@ -282,7 +282,8 @@ static void musb_otg_notifier_work(struct work_struct *data_notifier_work)  static int omap2430_musb_init(struct musb *musb)  { -	u32 l, status = 0; +	u32 l; +	int status = 0;  	struct device *dev = musb->controller;  	struct musb_hdrc_platform_data *plat = dev->platform_data;  	struct omap_musb_board_data *data = plat->board_data; @@ -301,7 +302,7 @@ static int omap2430_musb_init(struct musb *musb)  	status = pm_runtime_get_sync(dev);  	if (status < 0) { -		dev_err(dev, "pm_runtime_get_sync FAILED"); +		dev_err(dev, "pm_runtime_get_sync FAILED %d\n", status);  		goto err1;  	} @@ -333,6 +334,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: @@ -452,14 +454,14 @@ static int __devinit omap2430_probe(struct platform_device *pdev)  		goto err2;  	} +	pm_runtime_enable(&pdev->dev); +  	ret = platform_device_add(musb);  	if (ret) {  		dev_err(&pdev->dev, "failed to register musb device\n");  		goto err2;  	} -	pm_runtime_enable(&pdev->dev); -  	return 0;  err2: @@ -478,7 +480,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; @@ -491,11 +492,13 @@ static int omap2430_runtime_suspend(struct device *dev)  	struct omap2430_glue		*glue = dev_get_drvdata(dev);  	struct musb			*musb = glue_to_musb(glue); -	musb->context.otg_interfsel = musb_readl(musb->mregs, -						OTG_INTERFSEL); +	if (musb) { +		musb->context.otg_interfsel = musb_readl(musb->mregs, +				OTG_INTERFSEL); -	omap2430_low_level_exit(musb); -	usb_phy_set_suspend(musb->xceiv, 1); +		omap2430_low_level_exit(musb); +		usb_phy_set_suspend(musb->xceiv, 1); +	}  	return 0;  } @@ -505,11 +508,13 @@ static int omap2430_runtime_resume(struct device *dev)  	struct omap2430_glue		*glue = dev_get_drvdata(dev);  	struct musb			*musb = glue_to_musb(glue); -	omap2430_low_level_init(musb); -	musb_writel(musb->mregs, OTG_INTERFSEL, -					musb->context.otg_interfsel); +	if (musb) { +		omap2430_low_level_init(musb); +		musb_writel(musb->mregs, OTG_INTERFSEL, +				musb->context.otg_interfsel); -	usb_phy_set_suspend(musb->xceiv, 0); +		usb_phy_set_suspend(musb->xceiv, 0); +	}  	return 0;  }  |