Skip to content

Commit 10f67d1

Browse files
tititiou36Wim Van Sebroeck
authored andcommitted
watchdog: dw_wdt: Simplify clk management
Use devm_clk_get_enabled() instead of hand-writing it. This saves some LoC. Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Link: https://lore.kernel.org/r/f6094c55cacf9637d835cd49290d9e888faeb0f7.1682491863.git.christophe.jaillet@wanadoo.fr Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
1 parent 7f53907 commit 10f67d1

1 file changed

Lines changed: 11 additions & 33 deletions

File tree

drivers/watchdog/dw_wdt.c

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -566,22 +566,16 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
566566
* to the common timer/bus clocks configuration, in which the very
567567
* first found clock supply both timer and APB signals.
568568
*/
569-
dw_wdt->clk = devm_clk_get(dev, "tclk");
569+
dw_wdt->clk = devm_clk_get_enabled(dev, "tclk");
570570
if (IS_ERR(dw_wdt->clk)) {
571-
dw_wdt->clk = devm_clk_get(dev, NULL);
571+
dw_wdt->clk = devm_clk_get_enabled(dev, NULL);
572572
if (IS_ERR(dw_wdt->clk))
573573
return PTR_ERR(dw_wdt->clk);
574574
}
575575

576-
ret = clk_prepare_enable(dw_wdt->clk);
577-
if (ret)
578-
return ret;
579-
580576
dw_wdt->rate = clk_get_rate(dw_wdt->clk);
581-
if (dw_wdt->rate == 0) {
582-
ret = -EINVAL;
583-
goto out_disable_clk;
584-
}
577+
if (dw_wdt->rate == 0)
578+
return -EINVAL;
585579

586580
/*
587581
* Request APB clock if device is configured with async clocks mode.
@@ -590,21 +584,13 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
590584
* so the pclk phandle reference is left optional. If it couldn't be
591585
* found we consider the device configured in synchronous clocks mode.
592586
*/
593-
dw_wdt->pclk = devm_clk_get_optional(dev, "pclk");
594-
if (IS_ERR(dw_wdt->pclk)) {
595-
ret = PTR_ERR(dw_wdt->pclk);
596-
goto out_disable_clk;
597-
}
598-
599-
ret = clk_prepare_enable(dw_wdt->pclk);
600-
if (ret)
601-
goto out_disable_clk;
587+
dw_wdt->pclk = devm_clk_get_optional_enabled(dev, "pclk");
588+
if (IS_ERR(dw_wdt->pclk))
589+
return PTR_ERR(dw_wdt->pclk);
602590

603591
dw_wdt->rst = devm_reset_control_get_optional_shared(&pdev->dev, NULL);
604-
if (IS_ERR(dw_wdt->rst)) {
605-
ret = PTR_ERR(dw_wdt->rst);
606-
goto out_disable_pclk;
607-
}
592+
if (IS_ERR(dw_wdt->rst))
593+
return PTR_ERR(dw_wdt->rst);
608594

609595
/* Enable normal reset without pre-timeout by default. */
610596
dw_wdt_update_mode(dw_wdt, DW_WDT_RMOD_RESET);
@@ -621,12 +607,12 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
621607
IRQF_SHARED | IRQF_TRIGGER_RISING,
622608
pdev->name, dw_wdt);
623609
if (ret)
624-
goto out_disable_pclk;
610+
return ret;
625611

626612
dw_wdt->wdd.info = &dw_wdt_pt_ident;
627613
} else {
628614
if (ret == -EPROBE_DEFER)
629-
goto out_disable_pclk;
615+
return ret;
630616

631617
dw_wdt->wdd.info = &dw_wdt_ident;
632618
}
@@ -675,12 +661,6 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
675661

676662
out_assert_rst:
677663
reset_control_assert(dw_wdt->rst);
678-
679-
out_disable_pclk:
680-
clk_disable_unprepare(dw_wdt->pclk);
681-
682-
out_disable_clk:
683-
clk_disable_unprepare(dw_wdt->clk);
684664
return ret;
685665
}
686666

@@ -692,8 +672,6 @@ static void dw_wdt_drv_remove(struct platform_device *pdev)
692672

693673
watchdog_unregister_device(&dw_wdt->wdd);
694674
reset_control_assert(dw_wdt->rst);
695-
clk_disable_unprepare(dw_wdt->pclk);
696-
clk_disable_unprepare(dw_wdt->clk);
697675
}
698676

699677
#ifdef CONFIG_OF

0 commit comments

Comments
 (0)