diff options
author | Shawn Lin <shawn.lin@rock-chips.com> | 2016-02-14 22:33:15 -0500 |
---|---|---|
committer | Heiko Stuebner <heiko@sntech.de> | 2016-02-15 16:32:00 -0500 |
commit | 282312d1ac8aad4947a01c2caf79c9c0299fb495 (patch) | |
tree | fbab6a0c8e44336e243f40774af80d852f48926f | |
parent | 36714529f8bbd4f8eaf93b50f4a64c52a24879aa (diff) |
clk: rockchip: disable alt_parent clk in err cases when registering cpuclk
Add clk_disable_unprepare to handle cpuclk->alt_parent if
rockchip_clk_register_cpuclk fails.
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
-rw-r--r-- | drivers/clk/rockchip/clk-cpu.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/clk/rockchip/clk-cpu.c b/drivers/clk/rockchip/clk-cpu.c index d07374f48caf..68a2a87717d2 100644 --- a/drivers/clk/rockchip/clk-cpu.c +++ b/drivers/clk/rockchip/clk-cpu.c | |||
@@ -290,14 +290,14 @@ struct clk *rockchip_clk_register_cpuclk(const char *name, | |||
290 | pr_err("%s: could not lookup parent clock %s\n", | 290 | pr_err("%s: could not lookup parent clock %s\n", |
291 | __func__, parent_names[0]); | 291 | __func__, parent_names[0]); |
292 | ret = -EINVAL; | 292 | ret = -EINVAL; |
293 | goto free_cpuclk; | 293 | goto free_alt_parent; |
294 | } | 294 | } |
295 | 295 | ||
296 | ret = clk_notifier_register(clk, &cpuclk->clk_nb); | 296 | ret = clk_notifier_register(clk, &cpuclk->clk_nb); |
297 | if (ret) { | 297 | if (ret) { |
298 | pr_err("%s: failed to register clock notifier for %s\n", | 298 | pr_err("%s: failed to register clock notifier for %s\n", |
299 | __func__, name); | 299 | __func__, name); |
300 | goto free_cpuclk; | 300 | goto free_alt_parent; |
301 | } | 301 | } |
302 | 302 | ||
303 | if (nrates > 0) { | 303 | if (nrates > 0) { |
@@ -326,6 +326,8 @@ free_rate_table: | |||
326 | kfree(cpuclk->rate_table); | 326 | kfree(cpuclk->rate_table); |
327 | unregister_notifier: | 327 | unregister_notifier: |
328 | clk_notifier_unregister(clk, &cpuclk->clk_nb); | 328 | clk_notifier_unregister(clk, &cpuclk->clk_nb); |
329 | free_alt_parent: | ||
330 | clk_disable_unprepare(cpuclk->alt_parent); | ||
329 | free_cpuclk: | 331 | free_cpuclk: |
330 | kfree(cpuclk); | 332 | kfree(cpuclk); |
331 | return ERR_PTR(ret); | 333 | return ERR_PTR(ret); |