summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/system-as3525.c
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2008-11-26 16:46:12 +0000
committerRafaël Carré <rafael.carre@gmail.com>2008-11-26 16:46:12 +0000
commit97e907538ad8c51bf5467644ed12c695f7ce56f5 (patch)
tree9db1b335e973fe0ddab1ed0b2934e63b6efff570 /firmware/target/arm/as3525/system-as3525.c
parenta39e4e9962109e77482d85609fbc452bd163e620 (diff)
downloadrockbox-97e907538ad8c51bf5467644ed12c695f7ce56f5.tar.gz
rockbox-97e907538ad8c51bf5467644ed12c695f7ce56f5.zip
Sansa AMS: implement set_cpu_frequency()
Use a 24MHz peripheral clock instead of 64MHz for battery life git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19234 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/as3525/system-as3525.c')
-rw-r--r--firmware/target/arm/as3525/system-as3525.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/firmware/target/arm/as3525/system-as3525.c b/firmware/target/arm/as3525/system-as3525.c
index 10338ee148..bc3911afdf 100644
--- a/firmware/target/arm/as3525/system-as3525.c
+++ b/firmware/target/arm/as3525/system-as3525.c
@@ -219,6 +219,11 @@ void system_init(void)
219 while(!(CGU_INTCTRL & (1<<0))); /* wait until PLLA is locked */ 219 while(!(CGU_INTCTRL & (1<<0))); /* wait until PLLA is locked */
220 220
221 CGU_PROC = (3<<2)|0x01; /* fclk = PLLA*5/8 = 240 MHz */ 221 CGU_PROC = (3<<2)|0x01; /* fclk = PLLA*5/8 = 240 MHz */
222#ifndef BOOTLOADER
223#ifdef HAVE_ADJUSTABLE_CPU_FREQ
224 set_cpu_frequency(CPUFREQ_DEFAULT);
225#endif
226#endif
222 227
223 asm volatile( 228 asm volatile(
224 "mov r0, #0 \n" 229 "mov r0, #0 \n"
@@ -231,8 +236,6 @@ void system_init(void)
231 236
232 sdram_init(); 237 sdram_init();
233 238
234 CGU_PERI |= (5<<2)|0x01; /* pclk = PLLA / 6 = 64 MHz */
235
236 /* enable timer interface for TIMER1 & TIMER2 */ 239 /* enable timer interface for TIMER1 & TIMER2 */
237 CGU_PERI |= CGU_TIMERIF_CLOCK_ENABLE; 240 CGU_PERI |= CGU_TIMERIF_CLOCK_ENABLE;
238 241
@@ -264,11 +267,19 @@ int system_memory_guard(int newmode)
264} 267}
265 268
266#ifndef BOOTLOADER 269#ifndef BOOTLOADER
267
268#ifdef HAVE_ADJUSTABLE_CPU_FREQ 270#ifdef HAVE_ADJUSTABLE_CPU_FREQ
269void set_cpu_frequency(long frequency) 271void set_cpu_frequency(long frequency)
270{ 272{
271 /* TODO */ 273 int divider = CPUFREQ_MAX / frequency;
274
275 if(divider > 16)
276 divider = 16;
277 else if(divider < 1)
278 divider = 1;
279
280 cpu_frequency = CPUFREQ_MAX / divider;
281
282 CGU_PROC &= ~(0xf << 4) /* clear divider bits */ ^ ((divider-1) << 4);
272} 283}
273#endif /* HAVE_ADJUSTABLE_CPU_FREQ */ 284#endif /* HAVE_ADJUSTABLE_CPU_FREQ */
274#endif /* BOOTLOADER */ 285#endif /* BOOTLOADER */