@@ -528,6 +528,7 @@ static int dwc3_probe(struct platform_device *pdev)
goto err3;
}
+ pm_runtime_put_sync(dev);
pm_runtime_allow(dev);
return 0;
@@ -557,6 +558,7 @@ err1:
err0:
dwc3_free_event_buffers(dwc);
+ pm_runtime_disable(&pdev->dev);
return ret;
}
@@ -568,7 +570,8 @@ static int dwc3_remove(struct platform_device *pdev)
usb_phy_set_suspend(dwc->usb2_phy, 1);
usb_phy_set_suspend(dwc->usb3_phy, 1);
- pm_runtime_put(&pdev->dev);
+ if (!pm_runtime_suspended(&pdev->dev))
+ pm_runtime_put(&pdev->dev);
pm_runtime_disable(&pdev->dev);
dwc3_debugfs_exit(dwc);
The current code in the dwc3 probe effectively disables runtime pm from ever working because it calls a get() that was never put() until device removal. Change the runtime pm code to match the standard formula and allow runtime pm to function. Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com> CC: Doug Anderson <dianders@chromium.org> --- drivers/usb/dwc3/core.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-)