aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/pm34xx.c
diff options
context:
space:
mode:
authorKevin Hilman <khilman@deeprootsystems.com>2010-09-08 19:37:42 -0400
committerKevin Hilman <khilman@deeprootsystems.com>2010-09-23 20:13:50 -0400
commite7410cf7831c2e5106a90dac6179df5d2c9bd60e (patch)
treed53065cc2c53d2cc512b5bbb0a8f4ba23c652eac /arch/arm/mach-omap2/pm34xx.c
parent6cdee91257bee23a46dc869ca62469b67cba2c7e (diff)
OMAP3: PM: move device-specific special cases from PM core into CPUidle
In an effort to simplify the core idle path, move any device-specific special case handling from the core PM idle path into the CPUidle pre-idle checking path. This keeps the core, interrupts-disabled idle path streamlined and independent of any device-specific handling, and also allows CPUidle to do the checking only for certain C-states as needed. This patch has the device checks in place for all states with the CHECK_BM flag, namely all states >= C2. This patch was inspired by a similar patch written by Tero Kristo as part of a larger series to add INACTIVE state support. NOTE: This is a baby-step towards decoupling device idle (or system idle) from CPU idle. Eventually, CPUidle should only manage the CPU, and device/system idle should be managed elsewhere. Cc: Tero Kristo <tero.kristo@nokia.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Diffstat (limited to 'arch/arm/mach-omap2/pm34xx.c')
-rw-r--r--arch/arm/mach-omap2/pm34xx.c14
1 files changed, 1 insertions, 13 deletions
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 429268eaf8b3..bb2ba1e03d09 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -346,7 +346,6 @@ void omap_sram_idle(void)
346 int core_next_state = PWRDM_POWER_ON; 346 int core_next_state = PWRDM_POWER_ON;
347 int core_prev_state, per_prev_state; 347 int core_prev_state, per_prev_state;
348 u32 sdrc_pwr = 0; 348 u32 sdrc_pwr = 0;
349 int per_state_modified = 0;
350 349
351 if (!_omap_sram_idle) 350 if (!_omap_sram_idle)
352 return; 351 return;
@@ -391,19 +390,10 @@ void omap_sram_idle(void)
391 if (per_next_state < PWRDM_POWER_ON) { 390 if (per_next_state < PWRDM_POWER_ON) {
392 omap_uart_prepare_idle(2); 391 omap_uart_prepare_idle(2);
393 omap2_gpio_prepare_for_idle(per_next_state); 392 omap2_gpio_prepare_for_idle(per_next_state);
394 if (per_next_state == PWRDM_POWER_OFF) { 393 if (per_next_state == PWRDM_POWER_OFF)
395 if (core_next_state == PWRDM_POWER_ON) {
396 per_next_state = PWRDM_POWER_RET;
397 pwrdm_set_next_pwrst(per_pwrdm, per_next_state);
398 per_state_modified = 1;
399 } else
400 omap3_per_save_context(); 394 omap3_per_save_context();
401 }
402 } 395 }
403 396
404 if (pwrdm_read_pwrst(cam_pwrdm) == PWRDM_POWER_ON)
405 omap2_clkdm_deny_idle(mpu_pwrdm->pwrdm_clkdms[0]);
406
407 /* CORE */ 397 /* CORE */
408 if (core_next_state < PWRDM_POWER_ON) { 398 if (core_next_state < PWRDM_POWER_ON) {
409 omap_uart_prepare_idle(0); 399 omap_uart_prepare_idle(0);
@@ -470,8 +460,6 @@ void omap_sram_idle(void)
470 if (per_prev_state == PWRDM_POWER_OFF) 460 if (per_prev_state == PWRDM_POWER_OFF)
471 omap3_per_restore_context(); 461 omap3_per_restore_context();
472 omap_uart_resume_idle(2); 462 omap_uart_resume_idle(2);
473 if (per_state_modified)
474 pwrdm_set_next_pwrst(per_pwrdm, PWRDM_POWER_OFF);
475 } 463 }
476 464
477 /* Disable IO-PAD and IO-CHAIN wakeup */ 465 /* Disable IO-PAD and IO-CHAIN wakeup */