• Home
  • Raw
  • Download

Lines Matching refs:clk

31 static void __clk_enable(struct clk *clk)  in __clk_enable()  argument
33 if (clk->parent) in __clk_enable()
34 __clk_enable(clk->parent); in __clk_enable()
35 clk->usecount++; in __clk_enable()
38 static void __clk_disable(struct clk *clk) in __clk_disable() argument
40 if (WARN_ON(clk->usecount == 0)) in __clk_disable()
42 --clk->usecount; in __clk_disable()
44 if (clk->parent) in __clk_disable()
45 __clk_disable(clk->parent); in __clk_disable()
48 int clk_enable(struct clk *clk) in clk_enable() argument
52 if (clk == NULL || IS_ERR(clk)) in clk_enable()
56 __clk_enable(clk); in clk_enable()
63 void clk_disable(struct clk *clk) in clk_disable() argument
67 if (clk == NULL || IS_ERR(clk)) in clk_disable()
71 __clk_disable(clk); in clk_disable()
76 unsigned long clk_get_rate(struct clk *clk) in clk_get_rate() argument
78 if (clk == NULL || IS_ERR(clk)) in clk_get_rate()
81 return clk->rate; in clk_get_rate()
85 long clk_round_rate(struct clk *clk, unsigned long rate) in clk_round_rate() argument
87 if (clk == NULL || IS_ERR(clk)) in clk_round_rate()
90 if (clk->round_rate) in clk_round_rate()
91 return clk->round_rate(clk, rate); in clk_round_rate()
93 return clk->rate; in clk_round_rate()
98 static void propagate_rate(struct clk *root) in propagate_rate()
100 struct clk *clk; in propagate_rate() local
102 list_for_each_entry(clk, &root->children, childnode) { in propagate_rate()
103 if (clk->recalc) in propagate_rate()
104 clk->rate = clk->recalc(clk); in propagate_rate()
105 propagate_rate(clk); in propagate_rate()
109 int clk_set_rate(struct clk *clk, unsigned long rate) in clk_set_rate() argument
114 if (clk == NULL || IS_ERR(clk)) in clk_set_rate()
117 if (clk->set_rate) in clk_set_rate()
118 ret = clk->set_rate(clk, rate); in clk_set_rate()
122 if (clk->recalc) in clk_set_rate()
123 clk->rate = clk->recalc(clk); in clk_set_rate()
124 propagate_rate(clk); in clk_set_rate()
132 int clk_set_parent(struct clk *clk, struct clk *parent) in clk_set_parent() argument
136 if (clk == NULL || IS_ERR(clk)) in clk_set_parent()
140 if (WARN_ON(clk->usecount)) in clk_set_parent()
144 clk->parent = parent; in clk_set_parent()
145 list_del_init(&clk->childnode); in clk_set_parent()
146 list_add(&clk->childnode, &clk->parent->children); in clk_set_parent()
150 if (clk->recalc) in clk_set_parent()
151 clk->rate = clk->recalc(clk); in clk_set_parent()
152 propagate_rate(clk); in clk_set_parent()
159 int clk_register(struct clk *clk) in clk_register() argument
161 if (clk == NULL || IS_ERR(clk)) in clk_register()
164 if (WARN(clk->parent && !clk->parent->rate, in clk_register()
166 clk->name, clk->parent->name)) in clk_register()
170 list_add_tail(&clk->node, &clocks); in clk_register()
171 if (clk->parent) in clk_register()
172 list_add_tail(&clk->childnode, &clk->parent->children); in clk_register()
176 if (clk->rate) in clk_register()
180 if (clk->recalc) in clk_register()
181 clk->rate = clk->recalc(clk); in clk_register()
184 else if (clk->parent) in clk_register()
185 clk->rate = clk->parent->rate; in clk_register()
191 void clk_unregister(struct clk *clk) in clk_unregister() argument
193 if (clk == NULL || IS_ERR(clk)) in clk_unregister()
197 list_del(&clk->node); in clk_unregister()
198 list_del(&clk->childnode); in clk_unregister()
209 static unsigned long clk_sysclk_recalc(struct clk *clk) in clk_sysclk_recalc() argument
213 unsigned long rate = clk->rate; in clk_sysclk_recalc()
215 if (WARN_ON(!clk->parent)) in clk_sysclk_recalc()
218 rate = clk->parent->rate; in clk_sysclk_recalc()
221 if (WARN_ON(!clk->parent->pll_data)) in clk_sysclk_recalc()
224 pll = clk->parent->pll_data; in clk_sysclk_recalc()
227 if (clk->flags & PRE_PLL) in clk_sysclk_recalc()
230 if (!clk->div) { in clk_sysclk_recalc()
232 clk->name, rate / 1000); in clk_sysclk_recalc()
236 if (clk->flags & FIXED_DIV_PLL) { in clk_sysclk_recalc()
237 rate /= clk->div; in clk_sysclk_recalc()
239 clk->name, clk->div, rate / 1000); in clk_sysclk_recalc()
243 v = pll_read(pll, clk->div); in clk_sysclk_recalc()
253 clk->name, plldiv, rate / 1000); in clk_sysclk_recalc()
258 static unsigned long clk_leafclk_recalc(struct clk *clk) in clk_leafclk_recalc() argument
260 if (WARN_ON(!clk->parent)) in clk_leafclk_recalc()
261 return clk->rate; in clk_leafclk_recalc()
264 clk->name, clk->parent->name, clk->parent->rate / 1000); in clk_leafclk_recalc()
266 return clk->parent->rate; in clk_leafclk_recalc()
269 static unsigned long clk_pllclk_recalc(struct clk *clk) in clk_pllclk_recalc() argument
273 struct pll_data *pll = clk->pll_data; in clk_pllclk_recalc()
274 unsigned long rate = clk->rate; in clk_pllclk_recalc()
276 if (clk->flags & FIXED_RATE_PLL) in clk_pllclk_recalc()
280 rate = pll->input_rate = clk->parent->rate; in clk_pllclk_recalc()
316 pll->num, clk->parent->rate / 1000000, in clk_pllclk_recalc()
320 pll->num, clk->parent->rate / 1000000); in clk_pllclk_recalc()
326 static void __init __init_clk(struct clk *clk) in __init_clk() argument
328 INIT_LIST_HEAD(&clk->node); in __init_clk()
329 INIT_LIST_HEAD(&clk->children); in __init_clk()
330 INIT_LIST_HEAD(&clk->childnode); in __init_clk()
332 if (!clk->recalc) { in __init_clk()
335 if (clk->pll_data) in __init_clk()
336 clk->recalc = clk_pllclk_recalc; in __init_clk()
339 else if (clk->flags & CLK_PLL) in __init_clk()
340 clk->recalc = clk_sysclk_recalc; in __init_clk()
343 else if (clk->parent) in __init_clk()
344 clk->recalc = clk_leafclk_recalc; in __init_clk()
351 struct clk *clk; in c6x_clks_init() local
354 for (c = clocks; c->clk; c++) { in c6x_clks_init()
355 clk = c->clk; in c6x_clks_init()
357 __init_clk(clk); in c6x_clks_init()
358 clk_register(clk); in c6x_clks_init()
362 if (clk->flags & ALWAYS_ENABLED) in c6x_clks_init()
363 clk_enable(clk); in c6x_clks_init()
379 dump_clock(struct seq_file *s, unsigned nest, struct clk *parent) in dump_clock()
383 struct clk *clk; in dump_clock() local
403 list_for_each_entry(clk, &parent->children, childnode) { in dump_clock()
404 dump_clock(s, nest + NEST_DELTA, clk); in dump_clock()
410 struct clk *clk; in c6x_ck_show() local
416 list_for_each_entry(clk, &clocks, node) in c6x_ck_show()
417 if (!clk->parent) in c6x_ck_show()
418 dump_clock(m, 0, clk); in c6x_ck_show()