aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/clock.c
diff options
context:
space:
mode:
authorRajendra Nayak <rnayak@ti.com>2012-06-01 04:32:49 -0400
committerPaul Walmsley <paul@pwsan.com>2012-11-12 21:10:18 -0500
commit23fb8ba3a8f55f28a7a89b64b3711fcf72239d7f (patch)
treefcc04341ecf1d9c6a20261f3669a25a35506a246 /arch/arm/mach-omap2/clock.c
parent7a2bd1cc3926327c0393deb52e8300af75b1c9e1 (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.c59
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
69static 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 */
534void 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 */
554int 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 */
573int 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
524const struct clk_hw_omap_ops clkhwops_wait = { 583const 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,