Fix dwc3_exynos_probe() to call clk_prepare_enable() only when suspend clock is specified. Call clk_disable_unprepare() from remove and probe error path only when susp_clk has been set from remove and probe error paths. Signed-off-by: Shuah Khan <shuahkh@xxxxxxxxxxxxxxx> --- drivers/usb/dwc3/dwc3-exynos.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/usb/dwc3/dwc3-exynos.c b/drivers/usb/dwc3/dwc3-exynos.c index e27899b..f97a3d7 100644 --- a/drivers/usb/dwc3/dwc3-exynos.c +++ b/drivers/usb/dwc3/dwc3-exynos.c @@ -131,8 +131,8 @@ static int dwc3_exynos_probe(struct platform_device *pdev) if (IS_ERR(exynos->susp_clk)) { dev_info(dev, "no suspend clk specified\n"); exynos->susp_clk = NULL; - } - clk_prepare_enable(exynos->susp_clk); + } else + clk_prepare_enable(exynos->susp_clk); if (of_device_is_compatible(node, "samsung,exynos7-dwusb3")) { exynos->axius_clk = devm_clk_get(dev, "usbdrd30_axius_clk"); @@ -196,7 +196,8 @@ static int dwc3_exynos_probe(struct platform_device *pdev) regulator_disable(exynos->vdd33); err2: clk_disable_unprepare(exynos->axius_clk); - clk_disable_unprepare(exynos->susp_clk); + if (exynos->susp_clk) + clk_disable_unprepare(exynos->susp_clk); clk_disable_unprepare(exynos->clk); return ret; } @@ -210,7 +211,8 @@ static int dwc3_exynos_remove(struct platform_device *pdev) platform_device_unregister(exynos->usb3_phy); clk_disable_unprepare(exynos->axius_clk); - clk_disable_unprepare(exynos->susp_clk); + if (exynos->susp_clk) + clk_disable_unprepare(exynos->susp_clk); clk_disable_unprepare(exynos->clk); regulator_disable(exynos->vdd33); -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html