diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2006-03-28 20:38:05 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2006-03-28 20:38:05 +0000 |
commit | a7db6e302f90ea9c0d6ae809f06981b5956c8d68 (patch) | |
tree | be93aafcf819ee0b7bc787c5d5cbf2ff2ad89027 | |
parent | d1a93d8a0c508adce8cf12cec823b675260f2896 (diff) | |
download | rockbox-a7db6e302f90ea9c0d6ae809f06981b5956c8d68.tar.gz rockbox-a7db6e302f90ea9c0d6ae809f06981b5956c8d68.zip |
First quick'n'dirty volume control for the iAudio X5
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9327 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/sound.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/firmware/sound.c b/firmware/sound.c index 47a749f0a1..47271f384e 100644 --- a/firmware/sound.c +++ b/firmware/sound.c | |||
@@ -71,6 +71,10 @@ static const struct sound_settings_info sound_settings_table[] = { | |||
71 | [SOUND_VOLUME] = {"dB", 0, 1, -84, 0, -25, sound_set_volume}, | 71 | [SOUND_VOLUME] = {"dB", 0, 1, -84, 0, -25, sound_set_volume}, |
72 | [SOUND_BASS] = {"dB", 0, 2, 0, 24, 0, sound_set_bass}, | 72 | [SOUND_BASS] = {"dB", 0, 2, 0, 24, 0, sound_set_bass}, |
73 | [SOUND_TREBLE] = {"dB", 0, 2, 0, 6, 0, sound_set_treble}, | 73 | [SOUND_TREBLE] = {"dB", 0, 2, 0, 6, 0, sound_set_treble}, |
74 | #elif defined(HAVE_TLV320) | ||
75 | [SOUND_VOLUME] = {"dB", 0, 1, -73, 0, 6, sound_set_volume}, | ||
76 | [SOUND_BASS] = {"dB", 0, 2, 0, 24, 0, sound_set_bass}, | ||
77 | [SOUND_TREBLE] = {"dB", 0, 2, 0, 6, 0, sound_set_treble}, | ||
74 | #elif defined(HAVE_WM8975) | 78 | #elif defined(HAVE_WM8975) |
75 | [SOUND_VOLUME] = {"dB", 0, 1, -74, 6, -25, sound_set_volume}, | 79 | [SOUND_VOLUME] = {"dB", 0, 1, -74, 6, -25, sound_set_volume}, |
76 | [SOUND_BASS] = {"dB", 0, 1, -6, 9, 0, sound_set_bass}, | 80 | [SOUND_BASS] = {"dB", 0, 1, -6, 9, 0, sound_set_bass}, |
@@ -288,6 +292,26 @@ static int tenthdb2mixer(int db) | |||
288 | return -db * 2 / 5; | 292 | return -db * 2 / 5; |
289 | } | 293 | } |
290 | 294 | ||
295 | #elif defined(HAVE_TLV320) | ||
296 | #define VOLUME_MIN -730 | ||
297 | #define VOLUME_MAX 60 | ||
298 | |||
299 | /* convert tenth of dB volume (-840..0) to master volume register value */ | ||
300 | static int tenthdb2master(int db) | ||
301 | { | ||
302 | /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ | ||
303 | /* 1111111 == +6dB (0x7f) */ | ||
304 | /* 1111001 == 0dB (0x79) */ | ||
305 | /* 0110000 == -73dB (0x30 */ | ||
306 | /* 0101111 == mute (0x2f) */ | ||
307 | |||
308 | if (db < VOLUME_MIN) { | ||
309 | return 0x0; | ||
310 | } else { | ||
311 | return((db/10)+73+0x30); | ||
312 | } | ||
313 | } | ||
314 | |||
291 | #elif defined(HAVE_WM8975) | 315 | #elif defined(HAVE_WM8975) |
292 | /* volume/balance/treble/bass interdependency */ | 316 | /* volume/balance/treble/bass interdependency */ |
293 | #define VOLUME_MIN -730 | 317 | #define VOLUME_MIN -730 |
@@ -395,7 +419,8 @@ static int tenthdb2mixer(int db) | |||
395 | #endif | 419 | #endif |
396 | 420 | ||
397 | #if (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380 || \ | 421 | #if (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380 || \ |
398 | defined HAVE_WM8975 || defined HAVE_WM8758 || defined(HAVE_WM8731) | 422 | defined HAVE_WM8975 || defined HAVE_WM8758 || defined(HAVE_WM8731) || \ |
423 | defined(HAVE_TLV320) | ||
399 | /* volume/balance/treble/bass interdependency main part */ | 424 | /* volume/balance/treble/bass interdependency main part */ |
400 | #define VOLUME_RANGE (VOLUME_MAX - VOLUME_MIN) | 425 | #define VOLUME_RANGE (VOLUME_MAX - VOLUME_MIN) |
401 | 426 | ||
@@ -457,6 +482,8 @@ static void set_prescaled_volume(void) | |||
457 | wmcodec_set_lineout_vol(tenthdb2master(0), tenthdb2master(0)); | 482 | wmcodec_set_lineout_vol(tenthdb2master(0), tenthdb2master(0)); |
458 | #endif | 483 | #endif |
459 | 484 | ||
485 | #elif defined(HAVE_TLV320) | ||
486 | tlv320_set_headphone_vol(tenthdb2master(l), tenthdb2master(r)); | ||
460 | #endif | 487 | #endif |
461 | } | 488 | } |
462 | #endif /* (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380 */ | 489 | #endif /* (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380 */ |
@@ -563,7 +590,8 @@ void sound_set_volume(int value) | |||
563 | unsigned tmp = ((unsigned)(value + 115) & 0xff) << 8; | 590 | unsigned tmp = ((unsigned)(value + 115) & 0xff) << 8; |
564 | mas_codec_writereg(0x10, tmp); | 591 | mas_codec_writereg(0x10, tmp); |
565 | #elif (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380 || \ | 592 | #elif (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380 || \ |
566 | defined HAVE_WM8975 || defined HAVE_WM8758 || defined HAVE_WM8731 | 593 | defined HAVE_WM8975 || defined HAVE_WM8758 || defined HAVE_WM8731 || \ |
594 | defined(HAVE_TLV320) | ||
567 | current_volume = value * 10; /* tenth of dB */ | 595 | current_volume = value * 10; /* tenth of dB */ |
568 | set_prescaled_volume(); | 596 | set_prescaled_volume(); |
569 | #elif CONFIG_CPU == PNX0101 | 597 | #elif CONFIG_CPU == PNX0101 |