Commit 1dfacc1613d088a99ac0360f6e276cad7f7cdf0c
Committed by
Stephen Warren
1 parent
92fe58f07f
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
ARM: tegra: Remove duplicate code
Remove Tegra legacy clock framework code. Signed-off-by: Prashant Gaikwad <pgaikwad@nvidia.com> Signed-off-by: Stephen Warren <swarren@nvidia.com>
Showing 3 changed files with 0 additions and 724 deletions Side-by-side Diff
arch/arm/mach-tegra/clock.c
... | ... | @@ -20,8 +20,6 @@ |
20 | 20 | #include <linux/kernel.h> |
21 | 21 | #include <linux/clk.h> |
22 | 22 | #include <linux/clkdev.h> |
23 | -#include <linux/debugfs.h> | |
24 | -#include <linux/delay.h> | |
25 | 23 | #include <linux/init.h> |
26 | 24 | #include <linux/list.h> |
27 | 25 | #include <linux/module.h> |
28 | 26 | |
29 | 27 | |
... | ... | @@ -37,642 +35,13 @@ |
37 | 35 | /* |
38 | 36 | * Locking: |
39 | 37 | * |
40 | - * Each struct clk has a spinlock. | |
41 | - * | |
42 | - * To avoid AB-BA locking problems, locks must always be traversed from child | |
43 | - * clock to parent clock. For example, when enabling a clock, the clock's lock | |
44 | - * is taken, and then clk_enable is called on the parent, which take's the | |
45 | - * parent clock's lock. There is one exceptions to this ordering: When dumping | |
46 | - * the clock tree through debugfs. In this case, clk_lock_all is called, | |
47 | - * which attemps to iterate through the entire list of clocks and take every | |
48 | - * clock lock. If any call to spin_trylock fails, all locked clocks are | |
49 | - * unlocked, and the process is retried. When all the locks are held, | |
50 | - * the only clock operation that can be called is clk_get_rate_all_locked. | |
51 | - * | |
52 | - * Within a single clock, no clock operation can call another clock operation | |
53 | - * on itself, except for clk_get_rate_locked and clk_set_rate_locked. Any | |
54 | - * clock operation can call any other clock operation on any of it's possible | |
55 | - * parents. | |
56 | - * | |
57 | 38 | * An additional mutex, clock_list_lock, is used to protect the list of all |
58 | 39 | * clocks. |
59 | 40 | * |
60 | - * The clock operations must lock internally to protect against | |
61 | - * read-modify-write on registers that are shared by multiple clocks | |
62 | 41 | */ |
63 | 42 | static DEFINE_MUTEX(clock_list_lock); |
64 | 43 | static LIST_HEAD(clocks); |
65 | 44 | |
66 | -#ifndef CONFIG_COMMON_CLK | |
67 | -struct clk *tegra_get_clock_by_name(const char *name) | |
68 | -{ | |
69 | - struct clk *c; | |
70 | - struct clk *ret = NULL; | |
71 | - mutex_lock(&clock_list_lock); | |
72 | - list_for_each_entry(c, &clocks, node) { | |
73 | - if (strcmp(c->name, name) == 0) { | |
74 | - ret = c; | |
75 | - break; | |
76 | - } | |
77 | - } | |
78 | - mutex_unlock(&clock_list_lock); | |
79 | - return ret; | |
80 | -} | |
81 | - | |
82 | -/* Must be called with c->spinlock held */ | |
83 | -static unsigned long clk_predict_rate_from_parent(struct clk *c, struct clk *p) | |
84 | -{ | |
85 | - u64 rate; | |
86 | - | |
87 | - rate = clk_get_rate(p); | |
88 | - | |
89 | - if (c->mul != 0 && c->div != 0) { | |
90 | - rate *= c->mul; | |
91 | - rate += c->div - 1; /* round up */ | |
92 | - do_div(rate, c->div); | |
93 | - } | |
94 | - | |
95 | - return rate; | |
96 | -} | |
97 | - | |
98 | -/* Must be called with c->spinlock held */ | |
99 | -unsigned long clk_get_rate_locked(struct clk *c) | |
100 | -{ | |
101 | - unsigned long rate; | |
102 | - | |
103 | - if (c->parent) | |
104 | - rate = clk_predict_rate_from_parent(c, c->parent); | |
105 | - else | |
106 | - rate = c->rate; | |
107 | - | |
108 | - return rate; | |
109 | -} | |
110 | - | |
111 | -unsigned long clk_get_rate(struct clk *c) | |
112 | -{ | |
113 | - unsigned long flags; | |
114 | - unsigned long rate; | |
115 | - | |
116 | - spin_lock_irqsave(&c->spinlock, flags); | |
117 | - | |
118 | - rate = clk_get_rate_locked(c); | |
119 | - | |
120 | - spin_unlock_irqrestore(&c->spinlock, flags); | |
121 | - | |
122 | - return rate; | |
123 | -} | |
124 | -EXPORT_SYMBOL(clk_get_rate); | |
125 | - | |
126 | -int clk_reparent(struct clk *c, struct clk *parent) | |
127 | -{ | |
128 | - c->parent = parent; | |
129 | - return 0; | |
130 | -} | |
131 | - | |
132 | -void clk_init(struct clk *c) | |
133 | -{ | |
134 | - spin_lock_init(&c->spinlock); | |
135 | - | |
136 | - if (c->ops && c->ops->init) | |
137 | - c->ops->init(c); | |
138 | - | |
139 | - if (!c->ops || !c->ops->enable) { | |
140 | - c->refcnt++; | |
141 | - c->set = true; | |
142 | - if (c->parent) | |
143 | - c->state = c->parent->state; | |
144 | - else | |
145 | - c->state = ON; | |
146 | - } | |
147 | - | |
148 | - mutex_lock(&clock_list_lock); | |
149 | - list_add(&c->node, &clocks); | |
150 | - mutex_unlock(&clock_list_lock); | |
151 | -} | |
152 | - | |
153 | -int clk_enable(struct clk *c) | |
154 | -{ | |
155 | - int ret = 0; | |
156 | - unsigned long flags; | |
157 | - | |
158 | - spin_lock_irqsave(&c->spinlock, flags); | |
159 | - | |
160 | - if (c->refcnt == 0) { | |
161 | - if (c->parent) { | |
162 | - ret = clk_enable(c->parent); | |
163 | - if (ret) | |
164 | - goto out; | |
165 | - } | |
166 | - | |
167 | - if (c->ops && c->ops->enable) { | |
168 | - ret = c->ops->enable(c); | |
169 | - if (ret) { | |
170 | - if (c->parent) | |
171 | - clk_disable(c->parent); | |
172 | - goto out; | |
173 | - } | |
174 | - c->state = ON; | |
175 | - c->set = true; | |
176 | - } | |
177 | - } | |
178 | - c->refcnt++; | |
179 | -out: | |
180 | - spin_unlock_irqrestore(&c->spinlock, flags); | |
181 | - return ret; | |
182 | -} | |
183 | -EXPORT_SYMBOL(clk_enable); | |
184 | - | |
185 | -void clk_disable(struct clk *c) | |
186 | -{ | |
187 | - unsigned long flags; | |
188 | - | |
189 | - spin_lock_irqsave(&c->spinlock, flags); | |
190 | - | |
191 | - if (c->refcnt == 0) { | |
192 | - WARN(1, "Attempting to disable clock %s with refcnt 0", c->name); | |
193 | - spin_unlock_irqrestore(&c->spinlock, flags); | |
194 | - return; | |
195 | - } | |
196 | - if (c->refcnt == 1) { | |
197 | - if (c->ops && c->ops->disable) | |
198 | - c->ops->disable(c); | |
199 | - | |
200 | - if (c->parent) | |
201 | - clk_disable(c->parent); | |
202 | - | |
203 | - c->state = OFF; | |
204 | - } | |
205 | - c->refcnt--; | |
206 | - | |
207 | - spin_unlock_irqrestore(&c->spinlock, flags); | |
208 | -} | |
209 | -EXPORT_SYMBOL(clk_disable); | |
210 | - | |
211 | -int clk_set_parent(struct clk *c, struct clk *parent) | |
212 | -{ | |
213 | - int ret; | |
214 | - unsigned long flags; | |
215 | - unsigned long new_rate; | |
216 | - unsigned long old_rate; | |
217 | - | |
218 | - spin_lock_irqsave(&c->spinlock, flags); | |
219 | - | |
220 | - if (!c->ops || !c->ops->set_parent) { | |
221 | - ret = -ENOSYS; | |
222 | - goto out; | |
223 | - } | |
224 | - | |
225 | - new_rate = clk_predict_rate_from_parent(c, parent); | |
226 | - old_rate = clk_get_rate_locked(c); | |
227 | - | |
228 | - ret = c->ops->set_parent(c, parent); | |
229 | - if (ret) | |
230 | - goto out; | |
231 | - | |
232 | -out: | |
233 | - spin_unlock_irqrestore(&c->spinlock, flags); | |
234 | - return ret; | |
235 | -} | |
236 | -EXPORT_SYMBOL(clk_set_parent); | |
237 | - | |
238 | -struct clk *clk_get_parent(struct clk *c) | |
239 | -{ | |
240 | - return c->parent; | |
241 | -} | |
242 | -EXPORT_SYMBOL(clk_get_parent); | |
243 | - | |
244 | -int clk_set_rate_locked(struct clk *c, unsigned long rate) | |
245 | -{ | |
246 | - long new_rate; | |
247 | - | |
248 | - if (!c->ops || !c->ops->set_rate) | |
249 | - return -ENOSYS; | |
250 | - | |
251 | - if (rate > c->max_rate) | |
252 | - rate = c->max_rate; | |
253 | - | |
254 | - if (c->ops && c->ops->round_rate) { | |
255 | - new_rate = c->ops->round_rate(c, rate); | |
256 | - | |
257 | - if (new_rate < 0) | |
258 | - return new_rate; | |
259 | - | |
260 | - rate = new_rate; | |
261 | - } | |
262 | - | |
263 | - return c->ops->set_rate(c, rate); | |
264 | -} | |
265 | - | |
266 | -int clk_set_rate(struct clk *c, unsigned long rate) | |
267 | -{ | |
268 | - int ret; | |
269 | - unsigned long flags; | |
270 | - | |
271 | - spin_lock_irqsave(&c->spinlock, flags); | |
272 | - | |
273 | - ret = clk_set_rate_locked(c, rate); | |
274 | - | |
275 | - spin_unlock_irqrestore(&c->spinlock, flags); | |
276 | - | |
277 | - return ret; | |
278 | -} | |
279 | -EXPORT_SYMBOL(clk_set_rate); | |
280 | - | |
281 | - | |
282 | -/* Must be called with clocks lock and all indvidual clock locks held */ | |
283 | -unsigned long clk_get_rate_all_locked(struct clk *c) | |
284 | -{ | |
285 | - u64 rate; | |
286 | - int mul = 1; | |
287 | - int div = 1; | |
288 | - struct clk *p = c; | |
289 | - | |
290 | - while (p) { | |
291 | - c = p; | |
292 | - if (c->mul != 0 && c->div != 0) { | |
293 | - mul *= c->mul; | |
294 | - div *= c->div; | |
295 | - } | |
296 | - p = c->parent; | |
297 | - } | |
298 | - | |
299 | - rate = c->rate; | |
300 | - rate *= mul; | |
301 | - do_div(rate, div); | |
302 | - | |
303 | - return rate; | |
304 | -} | |
305 | - | |
306 | -long clk_round_rate(struct clk *c, unsigned long rate) | |
307 | -{ | |
308 | - unsigned long flags; | |
309 | - long ret; | |
310 | - | |
311 | - spin_lock_irqsave(&c->spinlock, flags); | |
312 | - | |
313 | - if (!c->ops || !c->ops->round_rate) { | |
314 | - ret = -ENOSYS; | |
315 | - goto out; | |
316 | - } | |
317 | - | |
318 | - if (rate > c->max_rate) | |
319 | - rate = c->max_rate; | |
320 | - | |
321 | - ret = c->ops->round_rate(c, rate); | |
322 | - | |
323 | -out: | |
324 | - spin_unlock_irqrestore(&c->spinlock, flags); | |
325 | - return ret; | |
326 | -} | |
327 | -EXPORT_SYMBOL(clk_round_rate); | |
328 | - | |
329 | -static int tegra_clk_init_one_from_table(struct tegra_clk_init_table *table) | |
330 | -{ | |
331 | - struct clk *c; | |
332 | - struct clk *p; | |
333 | - | |
334 | - int ret = 0; | |
335 | - | |
336 | - c = tegra_get_clock_by_name(table->name); | |
337 | - | |
338 | - if (!c) { | |
339 | - pr_warning("Unable to initialize clock %s\n", | |
340 | - table->name); | |
341 | - return -ENODEV; | |
342 | - } | |
343 | - | |
344 | - if (table->parent) { | |
345 | - p = tegra_get_clock_by_name(table->parent); | |
346 | - if (!p) { | |
347 | - pr_warning("Unable to find parent %s of clock %s\n", | |
348 | - table->parent, table->name); | |
349 | - return -ENODEV; | |
350 | - } | |
351 | - | |
352 | - if (c->parent != p) { | |
353 | - ret = clk_set_parent(c, p); | |
354 | - if (ret) { | |
355 | - pr_warning("Unable to set parent %s of clock %s: %d\n", | |
356 | - table->parent, table->name, ret); | |
357 | - return -EINVAL; | |
358 | - } | |
359 | - } | |
360 | - } | |
361 | - | |
362 | - if (table->rate && table->rate != clk_get_rate(c)) { | |
363 | - ret = clk_set_rate(c, table->rate); | |
364 | - if (ret) { | |
365 | - pr_warning("Unable to set clock %s to rate %lu: %d\n", | |
366 | - table->name, table->rate, ret); | |
367 | - return -EINVAL; | |
368 | - } | |
369 | - } | |
370 | - | |
371 | - if (table->enabled) { | |
372 | - ret = clk_enable(c); | |
373 | - if (ret) { | |
374 | - pr_warning("Unable to enable clock %s: %d\n", | |
375 | - table->name, ret); | |
376 | - return -EINVAL; | |
377 | - } | |
378 | - } | |
379 | - | |
380 | - return 0; | |
381 | -} | |
382 | - | |
383 | -void tegra_clk_init_from_table(struct tegra_clk_init_table *table) | |
384 | -{ | |
385 | - for (; table->name; table++) | |
386 | - tegra_clk_init_one_from_table(table); | |
387 | -} | |
388 | -EXPORT_SYMBOL(tegra_clk_init_from_table); | |
389 | - | |
390 | -void tegra_periph_reset_deassert(struct clk *c) | |
391 | -{ | |
392 | - BUG_ON(!c->ops->reset); | |
393 | - c->ops->reset(c, false); | |
394 | -} | |
395 | -EXPORT_SYMBOL(tegra_periph_reset_deassert); | |
396 | - | |
397 | -void tegra_periph_reset_assert(struct clk *c) | |
398 | -{ | |
399 | - BUG_ON(!c->ops->reset); | |
400 | - c->ops->reset(c, true); | |
401 | -} | |
402 | -EXPORT_SYMBOL(tegra_periph_reset_assert); | |
403 | - | |
404 | -/* Several extended clock configuration bits (e.g., clock routing, clock | |
405 | - * phase control) are included in PLL and peripheral clock source | |
406 | - * registers. */ | |
407 | -int tegra_clk_cfg_ex(struct clk *c, enum tegra_clk_ex_param p, u32 setting) | |
408 | -{ | |
409 | - int ret = 0; | |
410 | - unsigned long flags; | |
411 | - | |
412 | - spin_lock_irqsave(&c->spinlock, flags); | |
413 | - | |
414 | - if (!c->ops || !c->ops->clk_cfg_ex) { | |
415 | - ret = -ENOSYS; | |
416 | - goto out; | |
417 | - } | |
418 | - ret = c->ops->clk_cfg_ex(c, p, setting); | |
419 | - | |
420 | -out: | |
421 | - spin_unlock_irqrestore(&c->spinlock, flags); | |
422 | - | |
423 | - return ret; | |
424 | -} | |
425 | - | |
426 | -#ifdef CONFIG_DEBUG_FS | |
427 | - | |
428 | -static int __clk_lock_all_spinlocks(void) | |
429 | -{ | |
430 | - struct clk *c; | |
431 | - | |
432 | - list_for_each_entry(c, &clocks, node) | |
433 | - if (!spin_trylock(&c->spinlock)) | |
434 | - goto unlock_spinlocks; | |
435 | - | |
436 | - return 0; | |
437 | - | |
438 | -unlock_spinlocks: | |
439 | - list_for_each_entry_continue_reverse(c, &clocks, node) | |
440 | - spin_unlock(&c->spinlock); | |
441 | - | |
442 | - return -EAGAIN; | |
443 | -} | |
444 | - | |
445 | -static void __clk_unlock_all_spinlocks(void) | |
446 | -{ | |
447 | - struct clk *c; | |
448 | - | |
449 | - list_for_each_entry_reverse(c, &clocks, node) | |
450 | - spin_unlock(&c->spinlock); | |
451 | -} | |
452 | - | |
453 | -/* | |
454 | - * This function retries until it can take all locks, and may take | |
455 | - * an arbitrarily long time to complete. | |
456 | - * Must be called with irqs enabled, returns with irqs disabled | |
457 | - * Must be called with clock_list_lock held | |
458 | - */ | |
459 | -static void clk_lock_all(void) | |
460 | -{ | |
461 | - int ret; | |
462 | -retry: | |
463 | - local_irq_disable(); | |
464 | - | |
465 | - ret = __clk_lock_all_spinlocks(); | |
466 | - if (ret) | |
467 | - goto failed_spinlocks; | |
468 | - | |
469 | - /* All locks taken successfully, return */ | |
470 | - return; | |
471 | - | |
472 | -failed_spinlocks: | |
473 | - local_irq_enable(); | |
474 | - yield(); | |
475 | - goto retry; | |
476 | -} | |
477 | - | |
478 | -/* | |
479 | - * Unlocks all clocks after a clk_lock_all | |
480 | - * Must be called with irqs disabled, returns with irqs enabled | |
481 | - * Must be called with clock_list_lock held | |
482 | - */ | |
483 | -static void clk_unlock_all(void) | |
484 | -{ | |
485 | - __clk_unlock_all_spinlocks(); | |
486 | - | |
487 | - local_irq_enable(); | |
488 | -} | |
489 | - | |
490 | -static struct dentry *clk_debugfs_root; | |
491 | - | |
492 | - | |
493 | -static void clock_tree_show_one(struct seq_file *s, struct clk *c, int level) | |
494 | -{ | |
495 | - struct clk *child; | |
496 | - const char *state = "uninit"; | |
497 | - char div[8] = {0}; | |
498 | - | |
499 | - if (c->state == ON) | |
500 | - state = "on"; | |
501 | - else if (c->state == OFF) | |
502 | - state = "off"; | |
503 | - | |
504 | - if (c->mul != 0 && c->div != 0) { | |
505 | - if (c->mul > c->div) { | |
506 | - int mul = c->mul / c->div; | |
507 | - int mul2 = (c->mul * 10 / c->div) % 10; | |
508 | - int mul3 = (c->mul * 10) % c->div; | |
509 | - if (mul2 == 0 && mul3 == 0) | |
510 | - snprintf(div, sizeof(div), "x%d", mul); | |
511 | - else if (mul3 == 0) | |
512 | - snprintf(div, sizeof(div), "x%d.%d", mul, mul2); | |
513 | - else | |
514 | - snprintf(div, sizeof(div), "x%d.%d..", mul, mul2); | |
515 | - } else { | |
516 | - snprintf(div, sizeof(div), "%d%s", c->div / c->mul, | |
517 | - (c->div % c->mul) ? ".5" : ""); | |
518 | - } | |
519 | - } | |
520 | - | |
521 | - seq_printf(s, "%*s%c%c%-*s %-6s %-3d %-8s %-10lu\n", | |
522 | - level * 3 + 1, "", | |
523 | - c->rate > c->max_rate ? '!' : ' ', | |
524 | - !c->set ? '*' : ' ', | |
525 | - 30 - level * 3, c->name, | |
526 | - state, c->refcnt, div, clk_get_rate_all_locked(c)); | |
527 | - | |
528 | - list_for_each_entry(child, &clocks, node) { | |
529 | - if (child->parent != c) | |
530 | - continue; | |
531 | - | |
532 | - clock_tree_show_one(s, child, level + 1); | |
533 | - } | |
534 | -} | |
535 | - | |
536 | -static int clock_tree_show(struct seq_file *s, void *data) | |
537 | -{ | |
538 | - struct clk *c; | |
539 | - seq_printf(s, " clock state ref div rate\n"); | |
540 | - seq_printf(s, "--------------------------------------------------------------\n"); | |
541 | - | |
542 | - mutex_lock(&clock_list_lock); | |
543 | - | |
544 | - clk_lock_all(); | |
545 | - | |
546 | - list_for_each_entry(c, &clocks, node) | |
547 | - if (c->parent == NULL) | |
548 | - clock_tree_show_one(s, c, 0); | |
549 | - | |
550 | - clk_unlock_all(); | |
551 | - | |
552 | - mutex_unlock(&clock_list_lock); | |
553 | - return 0; | |
554 | -} | |
555 | - | |
556 | -static int clock_tree_open(struct inode *inode, struct file *file) | |
557 | -{ | |
558 | - return single_open(file, clock_tree_show, inode->i_private); | |
559 | -} | |
560 | - | |
561 | -static const struct file_operations clock_tree_fops = { | |
562 | - .open = clock_tree_open, | |
563 | - .read = seq_read, | |
564 | - .llseek = seq_lseek, | |
565 | - .release = single_release, | |
566 | -}; | |
567 | - | |
568 | -static int possible_parents_show(struct seq_file *s, void *data) | |
569 | -{ | |
570 | - struct clk *c = s->private; | |
571 | - int i; | |
572 | - | |
573 | - for (i = 0; c->inputs[i].input; i++) { | |
574 | - char *first = (i == 0) ? "" : " "; | |
575 | - seq_printf(s, "%s%s", first, c->inputs[i].input->name); | |
576 | - } | |
577 | - seq_printf(s, "\n"); | |
578 | - return 0; | |
579 | -} | |
580 | - | |
581 | -static int possible_parents_open(struct inode *inode, struct file *file) | |
582 | -{ | |
583 | - return single_open(file, possible_parents_show, inode->i_private); | |
584 | -} | |
585 | - | |
586 | -static const struct file_operations possible_parents_fops = { | |
587 | - .open = possible_parents_open, | |
588 | - .read = seq_read, | |
589 | - .llseek = seq_lseek, | |
590 | - .release = single_release, | |
591 | -}; | |
592 | - | |
593 | -static int clk_debugfs_register_one(struct clk *c) | |
594 | -{ | |
595 | - struct dentry *d; | |
596 | - | |
597 | - d = debugfs_create_dir(c->name, clk_debugfs_root); | |
598 | - if (!d) | |
599 | - return -ENOMEM; | |
600 | - c->dent = d; | |
601 | - | |
602 | - d = debugfs_create_u8("refcnt", S_IRUGO, c->dent, (u8 *)&c->refcnt); | |
603 | - if (!d) | |
604 | - goto err_out; | |
605 | - | |
606 | - d = debugfs_create_u32("rate", S_IRUGO, c->dent, (u32 *)&c->rate); | |
607 | - if (!d) | |
608 | - goto err_out; | |
609 | - | |
610 | - d = debugfs_create_x32("flags", S_IRUGO, c->dent, (u32 *)&c->flags); | |
611 | - if (!d) | |
612 | - goto err_out; | |
613 | - | |
614 | - if (c->inputs) { | |
615 | - d = debugfs_create_file("possible_parents", S_IRUGO, c->dent, | |
616 | - c, &possible_parents_fops); | |
617 | - if (!d) | |
618 | - goto err_out; | |
619 | - } | |
620 | - | |
621 | - return 0; | |
622 | - | |
623 | -err_out: | |
624 | - debugfs_remove_recursive(c->dent); | |
625 | - return -ENOMEM; | |
626 | -} | |
627 | - | |
628 | -static int clk_debugfs_register(struct clk *c) | |
629 | -{ | |
630 | - int err; | |
631 | - struct clk *pa = c->parent; | |
632 | - | |
633 | - if (pa && !pa->dent) { | |
634 | - err = clk_debugfs_register(pa); | |
635 | - if (err) | |
636 | - return err; | |
637 | - } | |
638 | - | |
639 | - if (!c->dent) { | |
640 | - err = clk_debugfs_register_one(c); | |
641 | - if (err) | |
642 | - return err; | |
643 | - } | |
644 | - return 0; | |
645 | -} | |
646 | - | |
647 | -int __init tegra_clk_debugfs_init(void) | |
648 | -{ | |
649 | - struct clk *c; | |
650 | - struct dentry *d; | |
651 | - int err = -ENOMEM; | |
652 | - | |
653 | - d = debugfs_create_dir("clock", NULL); | |
654 | - if (!d) | |
655 | - return -ENOMEM; | |
656 | - clk_debugfs_root = d; | |
657 | - | |
658 | - d = debugfs_create_file("clock_tree", S_IRUGO, clk_debugfs_root, NULL, | |
659 | - &clock_tree_fops); | |
660 | - if (!d) | |
661 | - goto err_out; | |
662 | - | |
663 | - list_for_each_entry(c, &clocks, node) { | |
664 | - err = clk_debugfs_register(c); | |
665 | - if (err) | |
666 | - goto err_out; | |
667 | - } | |
668 | - return 0; | |
669 | -err_out: | |
670 | - debugfs_remove_recursive(clk_debugfs_root); | |
671 | - return err; | |
672 | -} | |
673 | -#endif | |
674 | -#else | |
675 | - | |
676 | 45 | void tegra_clk_add(struct clk *clk) |
677 | 46 | { |
678 | 47 | struct clk_tegra *c = to_clk_tegra(__clk_get_hw(clk)); |
... | ... | @@ -793,5 +162,4 @@ |
793 | 162 | out: |
794 | 163 | return ret; |
795 | 164 | } |
796 | -#endif /* !CONFIG_COMMON_CLK */ |
arch/arm/mach-tegra/clock.h
... | ... | @@ -24,7 +24,6 @@ |
24 | 24 | #include <linux/clk-provider.h> |
25 | 25 | #include <linux/clkdev.h> |
26 | 26 | #include <linux/list.h> |
27 | -#include <linux/spinlock.h> | |
28 | 27 | |
29 | 28 | #include <mach/clk.h> |
30 | 29 | |
31 | 30 | |
... | ... | @@ -54,12 +53,8 @@ |
54 | 53 | #define ENABLE_ON_INIT (1 << 28) |
55 | 54 | #define PERIPH_ON_APB (1 << 29) |
56 | 55 | |
57 | -struct clk; | |
58 | - | |
59 | -#ifdef CONFIG_COMMON_CLK | |
60 | 56 | struct clk_tegra; |
61 | 57 | #define to_clk_tegra(_hw) container_of(_hw, struct clk_tegra, hw) |
62 | -#endif | |
63 | 58 | |
64 | 59 | struct clk_mux_sel { |
65 | 60 | struct clk *input; |
... | ... | @@ -81,82 +76,6 @@ |
81 | 76 | OFF, |
82 | 77 | }; |
83 | 78 | |
84 | -#ifndef CONFIG_COMMON_CLK | |
85 | -struct clk_ops { | |
86 | - void (*init)(struct clk *); | |
87 | - int (*enable)(struct clk *); | |
88 | - void (*disable)(struct clk *); | |
89 | - int (*set_parent)(struct clk *, struct clk *); | |
90 | - int (*set_rate)(struct clk *, unsigned long); | |
91 | - long (*round_rate)(struct clk *, unsigned long); | |
92 | - void (*reset)(struct clk *, bool); | |
93 | - int (*clk_cfg_ex)(struct clk *, | |
94 | - enum tegra_clk_ex_param, u32); | |
95 | -}; | |
96 | - | |
97 | -struct clk { | |
98 | - /* node for master clocks list */ | |
99 | - struct list_head node; /* node for list of all clocks */ | |
100 | - struct clk_lookup lookup; | |
101 | - | |
102 | -#ifdef CONFIG_DEBUG_FS | |
103 | - struct dentry *dent; | |
104 | -#endif | |
105 | - bool set; | |
106 | - struct clk_ops *ops; | |
107 | - unsigned long rate; | |
108 | - unsigned long max_rate; | |
109 | - unsigned long min_rate; | |
110 | - u32 flags; | |
111 | - const char *name; | |
112 | - | |
113 | - u32 refcnt; | |
114 | - enum clk_state state; | |
115 | - struct clk *parent; | |
116 | - u32 div; | |
117 | - u32 mul; | |
118 | - | |
119 | - const struct clk_mux_sel *inputs; | |
120 | - u32 reg; | |
121 | - u32 reg_shift; | |
122 | - | |
123 | - struct list_head shared_bus_list; | |
124 | - | |
125 | - union { | |
126 | - struct { | |
127 | - unsigned int clk_num; | |
128 | - } periph; | |
129 | - struct { | |
130 | - unsigned long input_min; | |
131 | - unsigned long input_max; | |
132 | - unsigned long cf_min; | |
133 | - unsigned long cf_max; | |
134 | - unsigned long vco_min; | |
135 | - unsigned long vco_max; | |
136 | - const struct clk_pll_freq_table *freq_table; | |
137 | - int lock_delay; | |
138 | - unsigned long fixed_rate; | |
139 | - } pll; | |
140 | - struct { | |
141 | - u32 sel; | |
142 | - u32 reg_mask; | |
143 | - } mux; | |
144 | - struct { | |
145 | - struct clk *main; | |
146 | - struct clk *backup; | |
147 | - } cpu; | |
148 | - struct { | |
149 | - struct list_head node; | |
150 | - bool enabled; | |
151 | - unsigned long rate; | |
152 | - } shared_bus_user; | |
153 | - } u; | |
154 | - | |
155 | - spinlock_t spinlock; | |
156 | -}; | |
157 | - | |
158 | -#else | |
159 | - | |
160 | 79 | struct clk_tegra { |
161 | 80 | /* node for master clocks list */ |
162 | 81 | struct list_head node; /* node for list of all clocks */ |
... | ... | @@ -212,7 +131,6 @@ |
212 | 131 | void (*reset)(struct clk_hw *, bool); |
213 | 132 | int (*clk_cfg_ex)(struct clk_hw *, enum tegra_clk_ex_param, u32); |
214 | 133 | }; |
215 | -#endif /* !CONFIG_COMMON_CLK */ | |
216 | 134 | |
217 | 135 | struct clk_duplicate { |
218 | 136 | const char *name; |
... | ... | @@ -225,13 +143,6 @@ |
225 | 143 | unsigned long rate; |
226 | 144 | bool enabled; |
227 | 145 | }; |
228 | - | |
229 | -#ifndef CONFIG_COMMON_CLK | |
230 | -void clk_init(struct clk *clk); | |
231 | -unsigned long clk_get_rate_locked(struct clk *c); | |
232 | -int clk_set_rate_locked(struct clk *c, unsigned long rate); | |
233 | -int clk_reparent(struct clk *c, struct clk *parent); | |
234 | -#endif /* !CONFIG_COMMON_CLK */ | |
235 | 146 | |
236 | 147 | void tegra_clk_add(struct clk *c); |
237 | 148 | void tegra2_init_clocks(void); |