On 01/10/2017 05:05 AM, Bartlomiej Zolnierkiewicz wrote: > > Hi, > > On Monday, January 09, 2017 07:21:31 PM Shuah Khan wrote: >> 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. > > It is legal to call clk_prepare_enable() and clk_disable_unprepare() > for NULL clock. Also your patch changes susp_clk handling while > leaves axius_clk handling (which also can be NULL) untouched. > > Do you actually see some runtime problem with the current code? > > If not then the patch should probably be dropped. > > Best regards, > -- > Bartlomiej Zolnierkiewicz > Samsung R&D Institute Poland > Samsung Electronics Hi Bartlomiej, I am seeing the "no suspend clk specified" message in dmesg. After that it sets the exynos->susp_clk = NULL and starts calling clk_prepare_enable(exynos->susp_clk); That can't be good. If you see the logic right above this one for exynos->clk, it returns error and fails the probe. This this case it doesn't, but tries to use null susp_clk. I believe this patch is necessary. thanks, -- Shuah > >> 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); > -- 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