summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2005-07-05 07:58:19 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2005-07-05 07:58:19 +0000
commit9b226fef0e7863d78fd740eb8acd3f3cbe369fed (patch)
tree9b906832319daff9cf9b4b5384831639f8b0b5ce
parentaa30f0483be326d44a6a50bd4d4eabcbe6b5ae8c (diff)
downloadrockbox-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
-rw-r--r--firmware/export/system.h2
-rw-r--r--firmware/system.c22
2 files changed, 23 insertions, 1 deletions
diff --git a/firmware/export/system.h b/firmware/export/system.h
index 56fee6b..f379b32 100644
--- a/firmware/export/system.h
+++ b/firmware/export/system.h
@@ -33,9 +33,11 @@ extern long cpu_frequency;
#define FREQ cpu_frequency
void set_cpu_frequency(long frequency);
void cpu_boost(bool on_off);
+void cpu_idle_mode(bool on_off);
#else
#define FREQ CPU_FREQ
#define cpu_boost(on_off)
+#define cpu_idle_mode(on_off)
#endif
#define BAUDRATE 9600
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