summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2006-03-28 20:38:05 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2006-03-28 20:38:05 +0000
commita7db6e302f90ea9c0d6ae809f06981b5956c8d68 (patch)
treebe93aafcf819ee0b7bc787c5d5cbf2ff2ad89027
parentd1a93d8a0c508adce8cf12cec823b675260f2896 (diff)
downloadrockbox-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.c32
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 */
300static 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