diff options
author | Nils Wallménius <nils@rockbox.org> | 2009-01-02 11:21:58 +0000 |
---|---|---|
committer | Nils Wallménius <nils@rockbox.org> | 2009-01-02 11:21:58 +0000 |
commit | 74e245b6b94d5961ccd43234f291ae5a0bfda88d (patch) | |
tree | 973ff1f37b79eaee517764493c9feea950eadcfa /firmware/sound.c | |
parent | 7555f34cb3029cc2bb95f2fa0aa15b74ac4ce99f (diff) | |
download | rockbox-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
Diffstat (limited to 'firmware/sound.c')
-rw-r--r-- | firmware/sound.c | 122 |
1 files changed, 39 insertions, 83 deletions
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 | ||
127 | sound_set_type* sound_get_fn(int setting) | 127 | static 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) | 154 | sound_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); |