Lines Matching refs:clk
43 static struct clk master_clk = {
49 static struct clk module_clk = {
55 static struct clk bus_clk = {
61 static struct clk cpu_clk = {
70 static struct clk *onchip_clocks[] = {
77 static void propagate_rate(struct clk *clk) in propagate_rate() argument
79 struct clk *clkp; in propagate_rate()
82 if (likely(clkp->parent != clk)) in propagate_rate()
91 static int __clk_enable(struct clk *clk) in __clk_enable() argument
100 if (unlikely(atomic_read(&clk->kref.refcount) == 1)) in __clk_enable()
101 if (clk->ops && clk->ops->init) in __clk_enable()
102 clk->ops->init(clk); in __clk_enable()
104 kref_get(&clk->kref); in __clk_enable()
106 if (clk->flags & CLK_ALWAYS_ENABLED) in __clk_enable()
109 if (likely(clk->ops && clk->ops->enable)) in __clk_enable()
110 clk->ops->enable(clk); in __clk_enable()
115 int clk_enable(struct clk *clk) in clk_enable() argument
120 if (!clk) in clk_enable()
123 clk_enable(clk->parent); in clk_enable()
126 ret = __clk_enable(clk); in clk_enable()
138 static void __clk_disable(struct clk *clk) in __clk_disable() argument
140 int count = kref_put(&clk->kref, clk_kref_release); in __clk_disable()
142 if (clk->flags & CLK_ALWAYS_ENABLED) in __clk_disable()
146 if (likely(clk->ops && clk->ops->disable)) in __clk_disable()
147 clk->ops->disable(clk); in __clk_disable()
151 void clk_disable(struct clk *clk) in clk_disable() argument
155 if (!clk) in clk_disable()
159 __clk_disable(clk); in clk_disable()
162 clk_disable(clk->parent); in clk_disable()
166 int clk_register(struct clk *clk) in clk_register() argument
170 list_add(&clk->node, &clock_list); in clk_register()
171 kref_init(&clk->kref); in clk_register()
175 if (clk->flags & CLK_ALWAYS_ENABLED) { in clk_register()
176 pr_debug( "Clock '%s' is ALWAYS_ENABLED\n", clk->name); in clk_register()
177 if (clk->ops && clk->ops->init) in clk_register()
178 clk->ops->init(clk); in clk_register()
179 if (clk->ops && clk->ops->enable) in clk_register()
180 clk->ops->enable(clk); in clk_register()
188 void clk_unregister(struct clk *clk) in clk_unregister() argument
191 list_del(&clk->node); in clk_unregister()
196 unsigned long clk_get_rate(struct clk *clk) in clk_get_rate() argument
198 return clk->rate; in clk_get_rate()
202 int clk_set_rate(struct clk *clk, unsigned long rate) in clk_set_rate() argument
204 return clk_set_rate_ex(clk, rate, 0); in clk_set_rate()
208 int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id) in clk_set_rate_ex() argument
212 if (likely(clk->ops && clk->ops->set_rate)) { in clk_set_rate_ex()
216 ret = clk->ops->set_rate(clk, rate, algo_id); in clk_set_rate_ex()
220 if (unlikely(clk->flags & CLK_RATE_PROPAGATES)) in clk_set_rate_ex()
221 propagate_rate(clk); in clk_set_rate_ex()
227 void clk_recalc_rate(struct clk *clk) in clk_recalc_rate() argument
229 if (likely(clk->ops && clk->ops->recalc)) { in clk_recalc_rate()
233 clk->ops->recalc(clk); in clk_recalc_rate()
237 if (unlikely(clk->flags & CLK_RATE_PROPAGATES)) in clk_recalc_rate()
238 propagate_rate(clk); in clk_recalc_rate()
242 long clk_round_rate(struct clk *clk, unsigned long rate) in clk_round_rate() argument
244 if (likely(clk->ops && clk->ops->round_rate)) { in clk_round_rate()
248 rounded = clk->ops->round_rate(clk, rate); in clk_round_rate()
254 return clk_get_rate(clk); in clk_round_rate()
262 struct clk *clk_get(struct device *dev, const char *id) in clk_get()
264 struct clk *p, *clk = ERR_PTR(-ENOENT); in clk_get() local
276 clk = p; in clk_get()
283 clk = p; in clk_get()
291 return clk; in clk_get()
295 void clk_put(struct clk *clk) in clk_put() argument
297 if (clk && !IS_ERR(clk)) in clk_put()
298 module_put(clk->owner); in clk_put()
316 struct clk *clk; in show_clocks() local
319 list_for_each_entry_reverse(clk, &clock_list, node) { in show_clocks()
320 unsigned long rate = clk_get_rate(clk); in show_clocks()
322 p += sprintf(p, "%-12s\t: %ld.%02ldMHz\t%s\n", clk->name, in show_clocks()
324 ((clk->flags & CLK_ALWAYS_ENABLED) || in show_clocks()
325 (atomic_read(&clk->kref.refcount) != 1)) ? in show_clocks()
339 struct clk *clk = onchip_clocks[i]; in clk_init() local
341 arch_init_clk_ops(&clk->ops, i); in clk_init()
342 ret |= clk_register(clk); in clk_init()