diff options
author | Rajendra Nayak <rnayak@ti.com> | 2012-06-01 04:32:49 -0400 |
---|---|---|
committer | Paul Walmsley <paul@pwsan.com> | 2012-11-12 21:10:18 -0500 |
commit | 23fb8ba3a8f55f28a7a89b64b3711fcf72239d7f (patch) | |
tree | fcc04341ecf1d9c6a20261f3669a25a35506a246 /arch/arm/mach-omap2/clock.c | |
parent | 7a2bd1cc3926327c0393deb52e8300af75b1c9e1 (diff) |
ARM: OMAP: clock: list all clk_hw_omap clks to enable/disable autoidle
Platforms can call omap2_init_clk_hw_omap_clocks() to register a clock
using clk_hw_omap. omap2_clk_enable_autoidle_all() and
omap2_clk_disable_autoidle_all() can then be used to run through
all the clocks which support autoidle to enable/disable them.
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Mike Turquette <mturquette@ti.com>
[paul@pwsan.com: added kerneldoc on non-trivial new functions]
Signed-off-by: Paul Walmsley <paul@pwsan.com>
Diffstat (limited to 'arch/arm/mach-omap2/clock.c')
-rw-r--r-- | arch/arm/mach-omap2/clock.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 72d7105b3c7d..c64203e55d19 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c | |||
@@ -66,6 +66,7 @@ static DEFINE_SPINLOCK(clockfw_lock); | |||
66 | #endif | 66 | #endif |
67 | 67 | ||
68 | #ifdef CONFIG_COMMON_CLK | 68 | #ifdef CONFIG_COMMON_CLK |
69 | static LIST_HEAD(clk_hw_omap_clocks); | ||
69 | 70 | ||
70 | /* | 71 | /* |
71 | * Used for clocks that have the same value as the parent clock, | 72 | * Used for clocks that have the same value as the parent clock, |
@@ -521,6 +522,64 @@ static int __init omap_clk_setup(char *str) | |||
521 | } | 522 | } |
522 | __setup("mpurate=", omap_clk_setup); | 523 | __setup("mpurate=", omap_clk_setup); |
523 | 524 | ||
525 | /** | ||
526 | * omap2_init_clk_hw_omap_clocks - initialize an OMAP clock | ||
527 | * @clk: struct clk * to initialize | ||
528 | * | ||
529 | * Add an OMAP clock @clk to the internal list of OMAP clocks. Used | ||
530 | * temporarily for autoidle handling, until this support can be | ||
531 | * integrated into the common clock framework code in some way. No | ||
532 | * return value. | ||
533 | */ | ||
534 | void omap2_init_clk_hw_omap_clocks(struct clk *clk) | ||
535 | { | ||
536 | struct clk_hw_omap *c; | ||
537 | |||
538 | if (__clk_get_flags(clk) & CLK_IS_BASIC) | ||
539 | return; | ||
540 | |||
541 | c = to_clk_hw_omap(__clk_get_hw(clk)); | ||
542 | list_add(&c->node, &clk_hw_omap_clocks); | ||
543 | } | ||
544 | |||
545 | /** | ||
546 | * omap2_clk_enable_autoidle_all - enable autoidle on all OMAP clocks that | ||
547 | * support it | ||
548 | * | ||
549 | * Enable clock autoidle on all OMAP clocks that have allow_idle | ||
550 | * function pointers associated with them. This function is intended | ||
551 | * to be temporary until support for this is added to the common clock | ||
552 | * code. Returns 0. | ||
553 | */ | ||
554 | int omap2_clk_enable_autoidle_all(void) | ||
555 | { | ||
556 | struct clk_hw_omap *c; | ||
557 | |||
558 | list_for_each_entry(c, &clk_hw_omap_clocks, node) | ||
559 | if (c->ops && c->ops->allow_idle) | ||
560 | c->ops->allow_idle(c); | ||
561 | return 0; | ||
562 | } | ||
563 | |||
564 | /** | ||
565 | * omap2_clk_disable_autoidle_all - disable autoidle on all OMAP clocks that | ||
566 | * support it | ||
567 | * | ||
568 | * Disable clock autoidle on all OMAP clocks that have allow_idle | ||
569 | * function pointers associated with them. This function is intended | ||
570 | * to be temporary until support for this is added to the common clock | ||
571 | * code. Returns 0. | ||
572 | */ | ||
573 | int omap2_clk_disable_autoidle_all(void) | ||
574 | { | ||
575 | struct clk_hw_omap *c; | ||
576 | |||
577 | list_for_each_entry(c, &clk_hw_omap_clocks, node) | ||
578 | if (c->ops && c->ops->deny_idle) | ||
579 | c->ops->deny_idle(c); | ||
580 | return 0; | ||
581 | } | ||
582 | |||
524 | const struct clk_hw_omap_ops clkhwops_wait = { | 583 | const struct clk_hw_omap_ops clkhwops_wait = { |
525 | .find_idlest = omap2_clk_dflt_find_idlest, | 584 | .find_idlest = omap2_clk_dflt_find_idlest, |
526 | .find_companion = omap2_clk_dflt_find_companion, | 585 | .find_companion = omap2_clk_dflt_find_companion, |