summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2009-01-02 11:21:58 +0000
committerNils Wallménius <nils@rockbox.org>2009-01-02 11:21:58 +0000
commit74e245b6b94d5961ccd43234f291ae5a0bfda88d (patch)
tree973ff1f37b79eaee517764493c9feea950eadcfa
parent7555f34cb3029cc2bb95f2fa0aa15b74ac4ce99f (diff)
downloadrockbox-74e245b6b94d5961ccd43234f291ae5a0bfda88d.tar.gz
rockbox-74e245b6b94d5961ccd43234f291ae5a0bfda88d.zip
Small binsize optimization and likely a tiny speedup too
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19641 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/export/audiohw.h1
-rw-r--r--firmware/sound.c122
2 files changed, 40 insertions, 83 deletions
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h
index 51aec65c4c..33361b460a 100644
--- a/firmware/export/audiohw.h
+++ b/firmware/export/audiohw.h
@@ -118,6 +118,7 @@ enum {
118#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) 118#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF)
119 SOUND_TREBLE_CUTOFF, 119 SOUND_TREBLE_CUTOFF,
120#endif 120#endif
121 SOUND_LAST_SETTING, /* Keep this last */
121}; 122};
122 123
123enum Channel { 124enum Channel {
diff --git a/firmware/sound.c b/firmware/sound.c
index 5125782308..c602a41467 100644
--- a/firmware/sound.c
+++ b/firmware/sound.c
@@ -24,6 +24,7 @@
24#include "config.h" 24#include "config.h"
25#include "sound.h" 25#include "sound.h"
26#include "logf.h" 26#include "logf.h"
27#include "system.h"
27#ifndef SIMULATOR 28#ifndef SIMULATOR
28#include "i2c.h" 29#include "i2c.h"
29#include "mas.h" 30#include "mas.h"
@@ -31,7 +32,6 @@
31#include "pnx0101.h" 32#include "pnx0101.h"
32#endif 33#endif
33#include "dac.h" 34#include "dac.h"
34#include "system.h"
35#if CONFIG_CODEC == SWCODEC 35#if CONFIG_CODEC == SWCODEC
36#include "pcm.h" 36#include "pcm.h"
37#endif 37#endif
@@ -124,83 +124,37 @@ int sound_default(int setting)
124 return audiohw_settings[setting].defaultval; 124 return audiohw_settings[setting].defaultval;
125} 125}
126 126
127sound_set_type* sound_get_fn(int setting) 127static sound_set_type *sound_set_fns[] =
128{ 128{
129 sound_set_type* result = NULL; 129 [0 ... SOUND_LAST_SETTING-1] = NULL,
130 130 [SOUND_VOLUME] = sound_set_volume,
131 switch (setting) { 131 [SOUND_BASS] = sound_set_bass,
132 case SOUND_VOLUME: 132 [SOUND_TREBLE] = sound_set_treble,
133 result = sound_set_volume; 133 [SOUND_BALANCE] = sound_set_balance,
134 break; 134 [SOUND_CHANNELS] = sound_set_channels,
135 135 [SOUND_STEREO_WIDTH] = sound_set_stereo_width,
136 case SOUND_BASS: 136#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
137 result = sound_set_bass; 137 [SOUND_LOUDNESS] = sound_set_loudness,
138 break; 138 [SOUND_AVC] = sound_set_avc,
139 139 [SOUND_MDB_STRENGTH] = sound_set_mdb_strength,
140 case SOUND_TREBLE: 140 [SOUND_MDB_HARMONICS] = sound_set_mdb_harmonics,
141 result = sound_set_treble; 141 [SOUND_MDB_CENTER] = sound_set_mdb_center,
142 break; 142 [SOUND_MDB_SHAPE] = sound_set_mdb_shape,
143 143 [SOUND_MDB_ENABLE] = sound_set_mdb_enable,
144 case SOUND_BALANCE: 144 [SOUND_SUPERBASS] = sound_set_superbass,
145 result = sound_set_balance; 145#endif
146 break;
147
148 case SOUND_CHANNELS:
149 result = sound_set_channels;
150 break;
151
152 case SOUND_STEREO_WIDTH:
153 result = sound_set_stereo_width;
154 break;
155
156#if defined(AUDIOHW_HAVE_BASS_CUTOFF) 146#if defined(AUDIOHW_HAVE_BASS_CUTOFF)
157 case SOUND_BASS_CUTOFF: 147 [SOUND_BASS_CUTOFF] = sound_set_bass_cutoff,
158 result = sound_set_bass_cutoff;
159 break;
160#endif 148#endif
161
162#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF) 149#if defined(AUDIOHW_HAVE_TREBLE_CUTOFF)
163 case SOUND_TREBLE_CUTOFF: 150 [SOUND_TREBLE_CUTOFF] = sound_set_treble_cutoff,
164 result = sound_set_treble_cutoff;
165 break;
166#endif 151#endif
152};
167 153
168#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) 154sound_set_type* sound_get_fn(int setting)
169 case SOUND_LOUDNESS: 155{
170 result = sound_set_loudness; 156 return ((unsigned)setting >= ARRAYLEN(sound_set_fns)?
171 break; 157 NULL : sound_set_fns[setting]);
172
173 case SOUND_AVC:
174 result = sound_set_avc;
175 break;
176
177 case SOUND_MDB_STRENGTH:
178 result = sound_set_mdb_strength;
179 break;
180
181 case SOUND_MDB_HARMONICS:
182 result = sound_set_mdb_harmonics;
183 break;
184
185 case SOUND_MDB_CENTER:
186 result = sound_set_mdb_center;
187 break;
188
189 case SOUND_MDB_SHAPE:
190 result = sound_set_mdb_shape;
191 break;
192
193 case SOUND_MDB_ENABLE:
194 result = sound_set_mdb_enable;
195 break;
196
197 case SOUND_SUPERBASS:
198 result = sound_set_superbass;
199 break;
200#endif
201 }
202
203 return result;
204} 158}
205 159
206#if CONFIG_CODEC == SWCODEC 160#if CONFIG_CODEC == SWCODEC
@@ -459,18 +413,20 @@ void sound_set_avc(int value)
459 if(!audio_is_initialized) 413 if(!audio_is_initialized)
460 return; 414 return;
461 int tmp; 415 int tmp;
416
417 static const uint16_t avc_vals[] =
418 {
419 (0x1 << 8) | (0x8 << 12), /* 20ms */
420 (0x2 << 8) | (0x8 << 12), /* 2s */
421 (0x4 << 8) | (0x8 << 12), /* 4s */
422 (0x8 << 8) | (0x8 << 12), /* 8s */
423 };
462 switch (value) { 424 switch (value) {
463 case 1: /* 20ms */ 425 case 1:
464 tmp = (0x1 << 8) | (0x8 << 12); 426 case 2:
465 break; 427 case 3:
466 case 2: /* 2s */ 428 case 4:
467 tmp = (0x2 << 8) | (0x8 << 12); 429 tmp = avc_vals[value -1];
468 break;
469 case 3: /* 4s */
470 tmp = (0x4 << 8) | (0x8 << 12);
471 break;
472 case 4: /* 8s */
473 tmp = (0x8 << 8) | (0x8 << 12);
474 break; 430 break;
475 case -1: /* turn off and then turn on again to decay quickly */ 431 case -1: /* turn off and then turn on again to decay quickly */
476 tmp = mas_codec_readreg(MAS_REG_KAVC); 432 tmp = mas_codec_readreg(MAS_REG_KAVC);