PM / devfreq: exynos: Use Use devm_clk_get_enabled() helpers
PATCH 1/2 PM / devfreq: exynos: Use Use devm_clk_get_enabled() helpers
The devm_clk_get_enabled() helpers:
- call devm_clk_get()
- call clk_prepare_enable() and register what is needed in order to call clk_disable_unprepare() when needed, as a managed resource.
This simplifies the code and avoids the calls to clk_disable_unprepare().
While at it, use dev_err_probe consistently, and use its return value to return the error code.
--- drivers/devfreq/exynos-bus.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-)
drivers/devfreq/exynos-bus.c +4 -17
@@ -160,7 +160,6 @@ static void exynos_bus_exit(struct device *dev)platform_device_unregister (bus->icc_pdev);dev_pm_opp_of_remove_table (dev); -clk_disable_unprepare (bus->clk);dev_pm_opp_put_regulators (bus->opp_token); }
@@ -171,7 +170,6 @@ static void exynos_bus_passive_exit(struct device *dev)platform_device_unregister (bus->icc_pdev);dev_pm_opp_of_remove_table (dev); -clk_disable_unprepare (bus->clk); } static int exynos_bus_parent_parse_of(struct device_node *np,
@@ -247,23 +245,15 @@ static int exynos_bus_parse_of(struct device_node *np,int ret;/* Get the clock to provide each bus with source clock */ - bus->clk =devm_clk_get (dev,"bus" ); -if (IS_ERR (bus->clk)) { -dev_err (dev,"failed to get bus clock\n" ); -return PTR_ERR (bus->clk); - } - - ret =clk_prepare_enable (bus->clk); -if (ret <0 ) { -dev_err (dev,"failed to get enable clock\n" ); -return ret; - } + bus->clk =devm_clk_get_enabled (dev,"bus" ); +if (IS_ERR (bus->clk)) +return dev_err_probe (dev,PTR_ERR (bus->clk),"failed to get bus clock\n" );/* Get the freq and voltage from OPP table to scale the bus freq */ ret =dev_pm_opp_of_add_table (dev);if (ret <0 ) {dev_err (dev,"failed to get OPP table\n" ); - goto err_clk; +return ret; } rate =clk_get_rate (bus->clk);
@@ -281,8 +271,6 @@ static int exynos_bus_parse_of(struct device_node *np, err_opp:dev_pm_opp_of_remove_table (dev); -err_clk: -clk_disable_unprepare (bus->clk);return ret; }
@@ -453,7 +441,6 @@ static int exynos_bus_probe(struct platform_device *pdev) err:dev_pm_opp_of_remove_table (dev); -clk_disable_unprepare (bus->clk); err_reg:dev_pm_opp_put_regulators (bus->opp_token);
Signature · 1 line
2.43.0
PATCH 2/2 PM / devfreq: exynos: Switch from CONFIG_PM_SLEEP guards to pm_sleep_ptr()
Use the new PM macros for the suspend and resume functions to be automatically dropped by the compiler when CONFIG_PM_SLEEP are disabled, without having to use #ifdef guards. If CONFIG_PM_SLEEP unused, they will simply be discarded by the compiler.
--- drivers/devfreq/exynos-bus.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/devfreq/exynos-bus.c +1 -3
@@ -454,7 +454,6 @@ static void exynos_bus_shutdown(struct platform_device *pdev)devfreq_suspend_device (bus->devfreq); } -#ifdef CONFIG_PM_SLEEP static int exynos_bus_resume (struct device *dev) {struct exynos_bus *bus =dev_get_drvdata (dev);
@@ -482,7 +481,6 @@ static int exynos_bus_suspend(struct device *dev)return 0 ; } -#endif static const struct dev_pm_ops exynos_bus_pm = {SET_SYSTEM_SLEEP_PM_OPS (exynos_bus_suspend, exynos_bus_resume)
@@ -499,7 +497,7 @@ static struct platform_driver exynos_bus_platdrv = { .shutdown = exynos_bus_shutdown, .driver = { .name = "exynos-bus", - .pm = &exynos_bus_pm, + .pm = pm_sleep_ptr(&exynos_bus_pm), .of_match_table = exynos_bus_of_match, }, };
Signature · 1 line
2.43.0