From 144d323485b7957bdc32998d07de9d65cf72dac4 Mon Sep 17 00:00:00 2001 From: jethead71 Date: Thu, 26 Jul 2007 10:46:17 +0000 Subject: [PATCH] Reenable scaling on Sansa since a reasonable solution to clicks has been found. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13995 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/config-e200.h | 2 +- firmware/export/i2s.h | 1 + firmware/target/arm/i2s-pp.c | 31 +++++++++++++++++++++++++++++++ firmware/target/arm/pcm-pp.c | 4 ++-- firmware/target/arm/system-pp502x.c | 9 +++++++++ 5 files changed, 44 insertions(+), 3 deletions(-) diff --git a/firmware/export/config-e200.h b/firmware/export/config-e200.h index c7f058e95..acb23cb4d 100644 --- a/firmware/export/config-e200.h +++ b/firmware/export/config-e200.h @@ -160,7 +160,7 @@ #define CONFIG_LED LED_VIRTUAL /* Define this if you have adjustable CPU frequency */ -/*#define HAVE_ADJUSTABLE_CPU_FREQ*/ +#define HAVE_ADJUSTABLE_CPU_FREQ #define MI4_FORMAT #define BOOTFILE_EXT "mi4" diff --git a/firmware/export/i2s.h b/firmware/export/i2s.h index 13dba6839..3b4dbb4c1 100644 --- a/firmware/export/i2s.h +++ b/firmware/export/i2s.h @@ -18,3 +18,4 @@ ****************************************************************************/ void i2s_reset(void); +void i2s_scale_attn_level(long frequency); diff --git a/firmware/target/arm/i2s-pp.c b/firmware/target/arm/i2s-pp.c index c63287b72..b9e32b878 100644 --- a/firmware/target/arm/i2s-pp.c +++ b/firmware/target/arm/i2s-pp.c @@ -25,6 +25,7 @@ ****************************************************************************/ #include "system.h" +#include "cpu.h" /* TODO: Add in PP5002 defs */ #if CONFIG_CPU == PP5002 @@ -140,4 +141,34 @@ void i2s_reset(void) /* Rx.CLR = 1, TX.CLR = 1 */ IISFIFO_CFG |= 0x1100; } + +#ifdef SANSA_E200 +void i2s_scale_attn_level(long frequency) +{ + unsigned int iisfifo_cfg = IISFIFO_CFG & ~0xff; + + /* TODO: set this more appropriately for frequency */ + if (frequency <= CPUFREQ_DEFAULT) + { + /* when 4 slots full */ + /* when 4 slots empty */ + iisfifo_cfg |= 0x11; + } + else if (frequency < CPUFREQ_MAX) + { + /* when 8 slots full */ + /* when 8 slots empty */ + iisfifo_cfg |= 0x22; + } + else + { + /* when 12 slots full */ + /* when 12 slots empty */ + iisfifo_cfg |= 0x33; + } + + IISFIFO_CFG = iisfifo_cfg; +} +#endif /* SANSA_E200 */ + #endif diff --git a/firmware/target/arm/pcm-pp.c b/firmware/target/arm/pcm-pp.c index 29e527574..5ac15fe00 100644 --- a/firmware/target/arm/pcm-pp.c +++ b/firmware/target/arm/pcm-pp.c @@ -378,7 +378,7 @@ void fiq_record(void) if (audio_channels == 2) { /* RX is stereo */ while (p_size > 0) { - if (FIFO_FREE_COUNT < 8) { + if (FIFO_FREE_COUNT < 2) { /* enable interrupt */ IISCONFIG |= (1 << 0); goto fiq_record_exit; @@ -402,7 +402,7 @@ void fiq_record(void) else { /* RX is left channel mono */ while (p_size > 0) { - if (FIFO_FREE_COUNT < 8) { + if (FIFO_FREE_COUNT < 2) { /* enable interrupt */ IISCONFIG |= (1 << 0); goto fiq_record_exit; diff --git a/firmware/target/arm/system-pp502x.c b/firmware/target/arm/system-pp502x.c index 3011162e4..748e10668 100644 --- a/firmware/target/arm/system-pp502x.c +++ b/firmware/target/arm/system-pp502x.c @@ -18,6 +18,7 @@ ****************************************************************************/ #include "system.h" #include "thread.h" +#include "i2s.h" #if NUM_CORES > 1 struct mutex boostctrl_mtx NOCACHEBSS_ATTR; @@ -165,6 +166,10 @@ void set_cpu_frequency(long frequency) postmult = CPUFREQ_DEFAULT_MULT; cpu_frequency = frequency; +#ifdef SANSA_E200 + i2s_scale_attn_level(CPUFREQ_DEFAULT); +#endif + unknown2 = inl(0x600060a0); outl(inl(0x70000020) | (1<<30), 0x70000020); /* Enable PLL power */ @@ -197,6 +202,10 @@ void set_cpu_frequency(long frequency) inl(0x600060a0); /* sync pipeline (?) */ outl(unknown2, 0x600060a0); +#ifdef SANSA_E200 + i2s_scale_attn_level(frequency); +#endif + # if NUM_CORES > 1 boostctrl_mtx.locked = 0; # endif -- 2.11.4.GIT