diff options
| author | Linus Nielsen Feltzing <linus@haxx.se> | 2005-07-05 07:58:19 +0000 |
|---|---|---|
| committer | Linus Nielsen Feltzing <linus@haxx.se> | 2005-07-05 07:58:19 +0000 |
| commit | 9b226fef0e7863d78fd740eb8acd3f3cbe369fed (patch) | |
| tree | 9b906832319daff9cf9b4b5384831639f8b0b5ce /firmware/system.c | |
| parent | aa30f0483be326d44a6a50bd4d4eabcbe6b5ae8c (diff) | |
| download | rockbox-9b226fef0e7863d78fd740eb8acd3f3cbe369fed.zip rockbox-9b226fef0e7863d78fd740eb8acd3f3cbe369fed.tar.gz rockbox-9b226fef0e7863d78fd740eb8acd3f3cbe369fed.tar.bz2 rockbox-9b226fef0e7863d78fd740eb8acd3f3cbe369fed.tar.xz | |
New power-conserving CPU idle mode
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7023 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/system.c')
| -rw-r--r-- | firmware/system.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/firmware/system.c b/firmware/system.c index 66bd90f..c01d127 100644 --- a/firmware/system.c +++ b/firmware/system.c @@ -30,6 +30,7 @@ long cpu_frequency = CPU_FREQ; #ifdef HAVE_ADJUSTABLE_CPU_FREQ int boost_counter = 0; +bool cpu_idle = false; void cpu_boost(bool on_off) { if(on_off) @@ -45,7 +46,10 @@ void cpu_boost(bool on_off) /* Lower the frequency if the counter reaches 0 */ if(--boost_counter == 0) { - set_cpu_frequency(CPUFREQ_NORMAL); + if(cpu_idle) + set_cpu_frequency(CPUFREQ_DEFAULT); + else + set_cpu_frequency(CPUFREQ_NORMAL); } /* Safety measure */ @@ -53,6 +57,22 @@ void cpu_boost(bool on_off) boost_counter = 0; } } + +void cpu_idle_mode(bool on_off) +{ + cpu_idle = on_off; + + /* We need to adjust the frequency immediately if the CPU + isn't boosted */ + if(boost_counter == 0) + { + if(cpu_idle) + set_cpu_frequency(CPUFREQ_DEFAULT); + else + set_cpu_frequency(CPUFREQ_NORMAL); + } +} + #endif #if CONFIG_CPU == TCC730 |