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>
This commit is contained in:
parent
7f53907506
commit
10f67d1fd2
|
@ -566,22 +566,16 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
|
||||||
* to the common timer/bus clocks configuration, in which the very
|
* to the common timer/bus clocks configuration, in which the very
|
||||||
* first found clock supply both timer and APB signals.
|
* first found clock supply both timer and APB signals.
|
||||||
*/
|
*/
|
||||||
dw_wdt->clk = devm_clk_get(dev, "tclk");
|
dw_wdt->clk = devm_clk_get_enabled(dev, "tclk");
|
||||||
if (IS_ERR(dw_wdt->clk)) {
|
if (IS_ERR(dw_wdt->clk)) {
|
||||||
dw_wdt->clk = devm_clk_get(dev, NULL);
|
dw_wdt->clk = devm_clk_get_enabled(dev, NULL);
|
||||||
if (IS_ERR(dw_wdt->clk))
|
if (IS_ERR(dw_wdt->clk))
|
||||||
return PTR_ERR(dw_wdt->clk);
|
return PTR_ERR(dw_wdt->clk);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = clk_prepare_enable(dw_wdt->clk);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
dw_wdt->rate = clk_get_rate(dw_wdt->clk);
|
dw_wdt->rate = clk_get_rate(dw_wdt->clk);
|
||||||
if (dw_wdt->rate == 0) {
|
if (dw_wdt->rate == 0)
|
||||||
ret = -EINVAL;
|
return -EINVAL;
|
||||||
goto out_disable_clk;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Request APB clock if device is configured with async clocks mode.
|
* 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)
|
||||||
* so the pclk phandle reference is left optional. If it couldn't be
|
* so the pclk phandle reference is left optional. If it couldn't be
|
||||||
* found we consider the device configured in synchronous clocks mode.
|
* found we consider the device configured in synchronous clocks mode.
|
||||||
*/
|
*/
|
||||||
dw_wdt->pclk = devm_clk_get_optional(dev, "pclk");
|
dw_wdt->pclk = devm_clk_get_optional_enabled(dev, "pclk");
|
||||||
if (IS_ERR(dw_wdt->pclk)) {
|
if (IS_ERR(dw_wdt->pclk))
|
||||||
ret = PTR_ERR(dw_wdt->pclk);
|
return PTR_ERR(dw_wdt->pclk);
|
||||||
goto out_disable_clk;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = clk_prepare_enable(dw_wdt->pclk);
|
|
||||||
if (ret)
|
|
||||||
goto out_disable_clk;
|
|
||||||
|
|
||||||
dw_wdt->rst = devm_reset_control_get_optional_shared(&pdev->dev, NULL);
|
dw_wdt->rst = devm_reset_control_get_optional_shared(&pdev->dev, NULL);
|
||||||
if (IS_ERR(dw_wdt->rst)) {
|
if (IS_ERR(dw_wdt->rst))
|
||||||
ret = PTR_ERR(dw_wdt->rst);
|
return PTR_ERR(dw_wdt->rst);
|
||||||
goto out_disable_pclk;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Enable normal reset without pre-timeout by default. */
|
/* Enable normal reset without pre-timeout by default. */
|
||||||
dw_wdt_update_mode(dw_wdt, DW_WDT_RMOD_RESET);
|
dw_wdt_update_mode(dw_wdt, DW_WDT_RMOD_RESET);
|
||||||
|
@ -621,12 +607,12 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
|
||||||
IRQF_SHARED | IRQF_TRIGGER_RISING,
|
IRQF_SHARED | IRQF_TRIGGER_RISING,
|
||||||
pdev->name, dw_wdt);
|
pdev->name, dw_wdt);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out_disable_pclk;
|
return ret;
|
||||||
|
|
||||||
dw_wdt->wdd.info = &dw_wdt_pt_ident;
|
dw_wdt->wdd.info = &dw_wdt_pt_ident;
|
||||||
} else {
|
} else {
|
||||||
if (ret == -EPROBE_DEFER)
|
if (ret == -EPROBE_DEFER)
|
||||||
goto out_disable_pclk;
|
return ret;
|
||||||
|
|
||||||
dw_wdt->wdd.info = &dw_wdt_ident;
|
dw_wdt->wdd.info = &dw_wdt_ident;
|
||||||
}
|
}
|
||||||
|
@ -675,12 +661,6 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
out_assert_rst:
|
out_assert_rst:
|
||||||
reset_control_assert(dw_wdt->rst);
|
reset_control_assert(dw_wdt->rst);
|
||||||
|
|
||||||
out_disable_pclk:
|
|
||||||
clk_disable_unprepare(dw_wdt->pclk);
|
|
||||||
|
|
||||||
out_disable_clk:
|
|
||||||
clk_disable_unprepare(dw_wdt->clk);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -692,8 +672,6 @@ static void dw_wdt_drv_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
watchdog_unregister_device(&dw_wdt->wdd);
|
watchdog_unregister_device(&dw_wdt->wdd);
|
||||||
reset_control_assert(dw_wdt->rst);
|
reset_control_assert(dw_wdt->rst);
|
||||||
clk_disable_unprepare(dw_wdt->pclk);
|
|
||||||
clk_disable_unprepare(dw_wdt->clk);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
|
|
Loading…
Reference in New Issue