Commit 7099dbc5 authored by Tony Lindgren's avatar Tony Lindgren Committed by Greg Kroah-Hartman

usb: musb: Update to use PM runtime autosuspend

Let's make the PM runtime use the standard autosuspend calls.
Commit 5de85b9d ("PM / runtime: Re-init runtime PM states at probe
error and driver unbind") means we must pair use_autosuspend with
dont_use_autosuspend and then use put_sync to properly idle the
device.

Note that we'll be removing the PM runtime calls from the glue
layer to the MUSB core in the next patch. And we can also remove
the pointless FIXME comment now.
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarBin Liu <b-liu@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 302f6802
...@@ -2220,7 +2220,8 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) ...@@ -2220,7 +2220,8 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
if (status) if (status)
goto fail5; goto fail5;
pm_runtime_put(musb->controller); pm_runtime_mark_last_busy(musb->controller);
pm_runtime_put_autosuspend(musb->controller);
/* /*
* For why this is currently needed, see commit 3e43a0725637 * For why this is currently needed, see commit 3e43a0725637
...@@ -2248,6 +2249,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) ...@@ -2248,6 +2249,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
usb_phy_shutdown(musb->xceiv); usb_phy_shutdown(musb->xceiv);
err_usb_phy_init: err_usb_phy_init:
pm_runtime_dont_use_autosuspend(musb->controller);
pm_runtime_put_sync(musb->controller); pm_runtime_put_sync(musb->controller);
fail2: fail2:
...@@ -2313,8 +2315,6 @@ static int musb_remove(struct platform_device *pdev) ...@@ -2313,8 +2315,6 @@ static int musb_remove(struct platform_device *pdev)
spin_unlock_irqrestore(&musb->lock, flags); spin_unlock_irqrestore(&musb->lock, flags);
musb_writeb(musb->mregs, MUSB_DEVCTL, 0); musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
musb_platform_exit(musb); musb_platform_exit(musb);
pm_runtime_put(musb->controller);
/* FIXME power down */
musb_phy_callback = NULL; musb_phy_callback = NULL;
...@@ -2326,6 +2326,9 @@ static int musb_remove(struct platform_device *pdev) ...@@ -2326,6 +2326,9 @@ static int musb_remove(struct platform_device *pdev)
cancel_work_sync(&musb->irq_work); cancel_work_sync(&musb->irq_work);
cancel_delayed_work_sync(&musb->finish_resume_work); cancel_delayed_work_sync(&musb->finish_resume_work);
cancel_delayed_work_sync(&musb->deassert_reset_work); cancel_delayed_work_sync(&musb->deassert_reset_work);
pm_runtime_dont_use_autosuspend(musb->controller);
pm_runtime_put_sync(musb->controller);
pm_runtime_disable(musb->controller);
musb_free(musb); musb_free(musb);
device_init_wakeup(dev, 0); device_init_wakeup(dev, 0);
return 0; return 0;
......
...@@ -1963,7 +1963,8 @@ static int musb_gadget_stop(struct usb_gadget *g) ...@@ -1963,7 +1963,8 @@ static int musb_gadget_stop(struct usb_gadget *g)
* that currently misbehaves. * that currently misbehaves.
*/ */
pm_runtime_put(musb->controller); pm_runtime_mark_last_busy(musb->controller);
pm_runtime_put_autosuspend(musb->controller);
return 0; return 0;
} }
......
...@@ -435,8 +435,9 @@ static int omap2430_musb_init(struct musb *musb) ...@@ -435,8 +435,9 @@ static int omap2430_musb_init(struct musb *musb)
phy_init(musb->phy); phy_init(musb->phy);
phy_power_on(musb->phy); phy_power_on(musb->phy);
pm_runtime_put_noidle(musb->controller); pm_runtime_mark_last_busy(musb->controller);
pm_runtime_put_noidle(glue->dev); pm_runtime_put_autosuspend(musb->controller);
pm_runtime_put(glue->dev);
return 0; return 0;
err1: err1:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment