diff options
author | Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com> | 2008-10-15 10:48:44 -0400 |
---|---|---|
committer | Kevin Hilman <khilman@deeprootsystems.com> | 2009-09-02 18:08:23 -0400 |
commit | fe617af716bc09cbbdd11ad820d5818017a9f481 (patch) | |
tree | 7e995f31945b92e9495f4b945b4119e2df7b1b3d /arch/arm | |
parent | ba20bb126940ce4847e146a0d00b7f7b0868d773 (diff) |
OMAP: PM: Hook into PM counters
This patch modifies the clock, clockdomain and OMAP3 specific
powerdomain code to call the PM counter infrastructure whenever one or
more powerdomains might have changed state.
Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-omap2/clock.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/clockdomain.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 6 |
3 files changed, 11 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c index 456e2ad5f621..f2a92d614f0f 100644 --- a/arch/arm/mach-omap2/clock.c +++ b/arch/arm/mach-omap2/clock.c | |||
@@ -1043,5 +1043,7 @@ void omap2_clk_disable_unused(struct clk *clk) | |||
1043 | omap2_clk_disable(clk); | 1043 | omap2_clk_disable(clk); |
1044 | } else | 1044 | } else |
1045 | _omap2_clk_disable(clk); | 1045 | _omap2_clk_disable(clk); |
1046 | if (clk->clkdm != NULL) | ||
1047 | pwrdm_clkdm_state_switch(clk->clkdm); | ||
1046 | } | 1048 | } |
1047 | #endif | 1049 | #endif |
diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c index 26912a95dc18..5b0b90b76e13 100644 --- a/arch/arm/mach-omap2/clockdomain.c +++ b/arch/arm/mach-omap2/clockdomain.c | |||
@@ -574,6 +574,7 @@ int omap2_clkdm_clk_enable(struct clockdomain *clkdm, struct clk *clk) | |||
574 | omap2_clkdm_wakeup(clkdm); | 574 | omap2_clkdm_wakeup(clkdm); |
575 | 575 | ||
576 | pwrdm_wait_transition(clkdm->pwrdm.ptr); | 576 | pwrdm_wait_transition(clkdm->pwrdm.ptr); |
577 | pwrdm_clkdm_state_switch(clkdm); | ||
577 | 578 | ||
578 | return 0; | 579 | return 0; |
579 | } | 580 | } |
@@ -626,6 +627,8 @@ int omap2_clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk) | |||
626 | else | 627 | else |
627 | omap2_clkdm_sleep(clkdm); | 628 | omap2_clkdm_sleep(clkdm); |
628 | 629 | ||
630 | pwrdm_clkdm_state_switch(clkdm); | ||
631 | |||
629 | return 0; | 632 | return 0; |
630 | } | 633 | } |
631 | 634 | ||
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 488d595d8e4b..f1976242f997 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -170,6 +170,8 @@ static void omap_sram_idle(void) | |||
170 | printk(KERN_ERR "Invalid mpu state in sram_idle\n"); | 170 | printk(KERN_ERR "Invalid mpu state in sram_idle\n"); |
171 | return; | 171 | return; |
172 | } | 172 | } |
173 | pwrdm_pre_transition(); | ||
174 | |||
173 | omap2_gpio_prepare_for_retention(); | 175 | omap2_gpio_prepare_for_retention(); |
174 | omap_uart_prepare_idle(0); | 176 | omap_uart_prepare_idle(0); |
175 | omap_uart_prepare_idle(1); | 177 | omap_uart_prepare_idle(1); |
@@ -182,6 +184,9 @@ static void omap_sram_idle(void) | |||
182 | omap_uart_resume_idle(1); | 184 | omap_uart_resume_idle(1); |
183 | omap_uart_resume_idle(0); | 185 | omap_uart_resume_idle(0); |
184 | omap2_gpio_resume_after_retention(); | 186 | omap2_gpio_resume_after_retention(); |
187 | |||
188 | pwrdm_post_transition(); | ||
189 | |||
185 | } | 190 | } |
186 | 191 | ||
187 | /* | 192 | /* |
@@ -271,6 +276,7 @@ static int set_pwrdm_state(struct powerdomain *pwrdm, u32 state) | |||
271 | if (sleep_switch) { | 276 | if (sleep_switch) { |
272 | omap2_clkdm_allow_idle(pwrdm->pwrdm_clkdms[0]); | 277 | omap2_clkdm_allow_idle(pwrdm->pwrdm_clkdms[0]); |
273 | pwrdm_wait_transition(pwrdm); | 278 | pwrdm_wait_transition(pwrdm); |
279 | pwrdm_state_switch(pwrdm); | ||
274 | } | 280 | } |
275 | 281 | ||
276 | err: | 282 | err: |