PM / devfreq: exynos: Use Use devm_clk_get_enabled() helpers
PATCH v3 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.
---
v3 - No change
v2 - No change
--- 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.44.0
PATCH v3 2/2 PM / devfreq: exynos: Use DEFINE_SIMPLE_DEV_PM_OPS for PM functions
This macro has the advantage over SET_SYSTEM_SLEEP_PM_OPS that we don't have to care about when the functions are actually used.
Also make use of pm_sleep_ptr() to discard all PM_SLEEP related stuff if CONFIG_PM_SLEEP isn't enabled.
---
v3: fix using new DEFINE_SIMPLE_DEV_PM_OPS PM macro hence
change the $subject and the commit message
v2: add __maybe_unused to suspend/resume functions in case CONFIG_PM
is disabled
--- drivers/devfreq/exynos-bus.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
drivers/devfreq/exynos-bus.c +3 -6
@@ -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,11 +481,9 @@ 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) -}; +static DEFINE_SIMPLE_DEV_PM_OPS(exynos_bus_pm, + exynos_bus_suspend, exynos_bus_resume);static const struct of_device_id exynos_bus_of_match[] = { { .compatible ="samsung,exynos-bus" , },
@@ -499,7 +496,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.44.0
Chanwoo Choi
AppliedRe: [PATCH v3 2/2] PM / devfreq: exynos: Use DEFINE_SIMPLE_DEV_PM_OPS for PM functions
Quoted 54 lines · Anand Moon
This macro has the advantage over
SET_SYSTEM_SLEEP_PM_OPSthat we don't have to care about when the functions are actually used.Also make use of
pm_sleep_ptr()to discard allPM_SLEEPrelated stuff ifCONFIG_PM_SLEEPisn't enabled.Signed-off-by Anand Moon <[email protected]>---
v3: fix using newDEFINE_SIMPLE_DEV_PM_OPSPM macro hence
change the $subject and the commit messagev2: add
__maybe_unusedto suspend/resume functions in caseCONFIG_PM
is disabled--- drivers/devfreq/exynos-bus.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)drivers/devfreq/exynos-bus.c +3
-7@@ -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,11 +481,9 @@ 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) -}; +static DEFINE_SIMPLE_DEV_PM_OPS(exynos_bus_pm, + exynos_bus_suspend, exynos_bus_resume);static const struct of_device_id exynos_bus_of_match[] = { { .compatible ="samsung,exynos-bus" , },@@ -499,7 +496,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, }, }; --
Quoted 3 lines
2.44.0
Applied it. Thanks.
Signature · 3 lines
Best Regards, Chanwoo Choi Samsung Electronics
Quoted 47 lines · Anand Moon
The
devm_clk_get_enabled()helpers:
- calldevm_clk_get()
- callclk_prepare_enable()and register what is needed in order to callclk_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_probeconsistently, and use its return value to return the error code.Signed-off-by Anand Moon <[email protected]>---
v3 - No change
v2 - No change--- drivers/devfreq/exynos-bus.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-)drivers/devfreq/exynos-bus.c +0
-6@@ -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);
drivers/devfreq/exynos-bus.c static int exynos_bus_parse_of(struct device_node *np, · line 250
Quoted 10 lines
drivers/devfreq/exynos-bus.c +3
-7- } - - 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" );
nitpick. I recommend that better to keep 80 char on one line as following for the readability.
return dev_err_probe(dev, PTR_ERR(bus->clk),
"failed to get bus clock\n");Quoted 31 lines
drivers/devfreq/exynos-bus.c +1
-5/* 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); --2.44.0
Signature · 3 lines
Best Regards, Chanwoo Choi Samsung Electronics
Hi Chanwoo
Quoted 63 lines · Chanwoo Choi
Quoted 47 lines · Anand Moon
The
devm_clk_get_enabled()helpers:
- calldevm_clk_get()
- callclk_prepare_enable()and register what is needed in order to callclk_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_probeconsistently, and use its return value to return the error code.Signed-off-by Anand Moon <[email protected]>---
v3 - No change
v2 - No change--- drivers/devfreq/exynos-bus.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-)drivers/devfreq/exynos-bus.c +0
-6@@ -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);drivers/devfreq/exynos-bus.c static int exynos_bus_parse_of(struct device_node *np, · line 250
Quoted 10 lines
drivers/devfreq/exynos-bus.c +3
-7- } - - 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" );nitpick. I recommend that better to keep 80 char on one line as following for the readability.
Quoted 3 lines
return dev_err_probe(dev, PTR_ERR(bus->clk),
"failed to get bus clock\n");Ok
Quoted 1 line
I will update this in the next version.
Thanks
-Anand