diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-08-22 12:27:05 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-08-22 12:27:05 +0000 |
commit | f1a9a5520ad6013bc76b7c220845009fcbc67b6b (patch) | |
tree | c4f2d9a461e38cab54ad5261525edb603da18e15 /nuttx/configs/stm3210e-eval/src/up_idle.c | |
parent | 58a7ace0aba39add28e5b565657b1f4788ccbd57 (diff) | |
download | px4-nuttx-f1a9a5520ad6013bc76b7c220845009fcbc67b6b.tar.gz px4-nuttx-f1a9a5520ad6013bc76b7c220845009fcbc67b6b.tar.bz2 px4-nuttx-f1a9a5520ad6013bc76b7c220845009fcbc67b6b.zip |
PM update
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5045 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/configs/stm3210e-eval/src/up_idle.c')
-rw-r--r-- | nuttx/configs/stm3210e-eval/src/up_idle.c | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/nuttx/configs/stm3210e-eval/src/up_idle.c b/nuttx/configs/stm3210e-eval/src/up_idle.c index 5b9f3c9fa..910d0a9d6 100644 --- a/nuttx/configs/stm3210e-eval/src/up_idle.c +++ b/nuttx/configs/stm3210e-eval/src/up_idle.c @@ -252,15 +252,47 @@ static void up_idlepm(void) enum pm_state_e newstate; int ret; - /* Decide, which power saving level can be obtained */ + /* The following is logic that is done after the wake-up from PM_STANDBY + * state. It decides whether to go back to the PM_NORMAL or to the deeper + * power-saving mode PM_SLEEP: If the alarm expired with no "normal" + * wake-up event, then PM_SLEEP is entered. + * + * Logically, this code belongs at the end of the PM_STANDBY case below, + * does not work in the position for some unkown reason. + */ + + if (oldstate == PM_STANDBY) + { + /* Were we awakened by the alarm? */ + +#ifdef CONFIG_RTC_ALARM + if (g_alarmwakeup) + { + /* Yes.. Go to SLEEP mode */ + + newstate = PM_SLEEP; + } + else +#endif + { + /* Resume normal operation */ + + newstate = PM_NORMAL: + } + } + else +#endif + { + /* Let the PM system decide, which power saving level can be obtained */ - newstate = pm_checkstate(); + newstate = pm_checkstate(); + } /* Check for state changes */ if (newstate != oldstate) { - lldbg("newstate= %d oldstate=%d\n", newstate, oldstate); + llvdbg("newstate= %d oldstate=%d\n", newstate, oldstate); sched_lock(); @@ -338,22 +370,11 @@ static void up_idlepm(void) { lldbg("Warning: Cancel alarm failed\n"); } - - /* Were we awakened by the alarm? */ - - if (g_alarmwakeup) - { - /* Yes.. Go to SLEEP mode */ - - pm_changestate(PM_SLEEP); - } - else #endif - { - /* Resume normal operation */ - - pm_changestate(PM_NORMAL); - } + /* Note: See the additional PM_STANDBY related logic at the + * beginning of this function. That logic is executed after + * this point. + */ } break; |