mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 18:14:07 +08:00
clk: Unprepare the unused prepared slow clocks at late init
The unused ungated fast clocks are already being disabled from
clk_disable_unused at late init. This patch extend this sequence
to the slow unused prepared clocks to be unprepared.
Unless the optional .is_prepared callback is implemented by a
clk_hw the clk_disable_unused sequence will not unprepare any
unused clocks, since it will fall back to use the software
prepare counter.
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Mike Turquette <mturquette@linaro.org>
[mturquette@linaro.org: fixed hlist accessors per b67bfe0d
]
This commit is contained in:
parent
3d6ee287a3
commit
1c155b3dfe
@ -335,6 +335,28 @@ late_initcall(clk_debug_init);
|
||||
static inline int clk_debug_register(struct clk *clk) { return 0; }
|
||||
#endif
|
||||
|
||||
/* caller must hold prepare_lock */
|
||||
static void clk_unprepare_unused_subtree(struct clk *clk)
|
||||
{
|
||||
struct clk *child;
|
||||
|
||||
if (!clk)
|
||||
return;
|
||||
|
||||
hlist_for_each_entry(child, &clk->children, child_node)
|
||||
clk_unprepare_unused_subtree(child);
|
||||
|
||||
if (clk->prepare_count)
|
||||
return;
|
||||
|
||||
if (clk->flags & CLK_IGNORE_UNUSED)
|
||||
return;
|
||||
|
||||
if (__clk_is_prepared(clk))
|
||||
if (clk->ops->unprepare)
|
||||
clk->ops->unprepare(clk->hw);
|
||||
}
|
||||
|
||||
/* caller must hold prepare_lock */
|
||||
static void clk_disable_unused_subtree(struct clk *clk)
|
||||
{
|
||||
@ -386,6 +408,12 @@ static int clk_disable_unused(void)
|
||||
hlist_for_each_entry(clk, &clk_orphan_list, child_node)
|
||||
clk_disable_unused_subtree(clk);
|
||||
|
||||
hlist_for_each_entry(clk, &clk_root_list, child_node)
|
||||
clk_unprepare_unused_subtree(clk);
|
||||
|
||||
hlist_for_each_entry(clk, &clk_orphan_list, child_node)
|
||||
clk_unprepare_unused_subtree(clk);
|
||||
|
||||
mutex_unlock(&prepare_lock);
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user