mirror of https://gitee.com/openkylin/linux.git
sh: call clock framework init() callback once
Make sure that clk->ops->init() only gets called once in the case of CLK_ALWAYS_ENABLED. Without this patch the init() callback may be called multiple times. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
parent
5dafc91fca
commit
b3cacf3181
|
@ -99,15 +99,18 @@ static int __clk_enable(struct clk *clk)
|
||||||
* changes and the clock needs to hunt for the proper set of
|
* changes and the clock needs to hunt for the proper set of
|
||||||
* divisors to use before it can effectively recalc.
|
* divisors to use before it can effectively recalc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (clk->flags & CLK_ALWAYS_ENABLED) {
|
||||||
|
kref_get(&clk->kref);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (unlikely(atomic_read(&clk->kref.refcount) == 1))
|
if (unlikely(atomic_read(&clk->kref.refcount) == 1))
|
||||||
if (clk->ops && clk->ops->init)
|
if (clk->ops && clk->ops->init)
|
||||||
clk->ops->init(clk);
|
clk->ops->init(clk);
|
||||||
|
|
||||||
kref_get(&clk->kref);
|
kref_get(&clk->kref);
|
||||||
|
|
||||||
if (clk->flags & CLK_ALWAYS_ENABLED)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (likely(clk->ops && clk->ops->enable))
|
if (likely(clk->ops && clk->ops->enable))
|
||||||
clk->ops->enable(clk);
|
clk->ops->enable(clk);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue