summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorThom Johansen <thomj@rockbox.org>2005-06-16 20:16:58 +0000
committerThom Johansen <thomj@rockbox.org>2005-06-16 20:16:58 +0000
commit3828c7d98202edf885faa978e928760576666a6a (patch)
tree3b72c1b62950c49d3d7ffc47b13d542349f55c65 /firmware
parent3de5e74abad0f7a0782a16a3d7b41e6f07c475d5 (diff)
downloadrockbox-3828c7d98202edf885faa978e928760576666a6a.tar.gz
rockbox-3828c7d98202edf885faa978e928760576666a6a.zip
Balance support for UDA1380 based players.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6730 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/uda1380.c23
-rw-r--r--firmware/export/uda1380.h1
-rw-r--r--firmware/sound.c2
3 files changed, 24 insertions, 2 deletions
diff --git a/firmware/drivers/uda1380.c b/firmware/drivers/uda1380.c
index 4eb04d1ba3..bcc94474fa 100644
--- a/firmware/drivers/uda1380.c
+++ b/firmware/drivers/uda1380.c
@@ -38,6 +38,8 @@
38 38
39int uda1380_write_reg(unsigned char reg, unsigned short value); 39int uda1380_write_reg(unsigned char reg, unsigned short value);
40unsigned short uda1380_regs[0x30]; 40unsigned short uda1380_regs[0x30];
41short uda1380_balance;
42short uda1380_volume;
41 43
42/* Definition of a playback configuration to start with */ 44/* Definition of a playback configuration to start with */
43 45
@@ -90,8 +92,23 @@ int uda1380_write_reg(unsigned char reg, unsigned short value)
90 */ 92 */
91int uda1380_setvol(int vol) 93int uda1380_setvol(int vol)
92{ 94{
95 int vol_l, vol_r;
96
97 uda1380_volume = vol;
98 /* Simple linear volume crossfade curves */
99 vol_l = MAX(uda1380_balance*0xff/100, 0);
100 vol_r = MAX(-uda1380_balance*0xff/100, 0);
93 return uda1380_write_reg(REG_MASTER_VOL, 101 return uda1380_write_reg(REG_MASTER_VOL,
94 MASTER_VOL_LEFT(vol) | MASTER_VOL_RIGHT(vol)); 102 MASTER_VOL_LEFT(vol_l) | MASTER_VOL_RIGHT(vol_r));
103}
104
105/**
106 * Sets stereo balance
107 */
108void uda1380_set_balance(int bal)
109{
110 uda1380_balance = bal;
111 uda1380_setvol(uda1380_volume);
95} 112}
96 113
97/** 114/**
@@ -165,7 +182,9 @@ int uda1380_init(void)
165{ 182{
166 if (uda1380_set_regs() == -1) 183 if (uda1380_set_regs() == -1)
167 return -1; 184 return -1;
168 185 uda1380_balance = 0;
186 uda1380_volume = 0x20; /* Taken from uda1380_defaults */
187
169 return 0; 188 return 0;
170} 189}
171 190
diff --git a/firmware/export/uda1380.h b/firmware/export/uda1380.h
index f7e97e13c7..b09d271808 100644
--- a/firmware/export/uda1380.h
+++ b/firmware/export/uda1380.h
@@ -23,6 +23,7 @@
23extern int uda1380_init(void); 23extern int uda1380_init(void);
24extern void uda1380_enable_output(bool enable); 24extern void uda1380_enable_output(bool enable);
25extern int uda1380_setvol(int vol); 25extern int uda1380_setvol(int vol);
26extern void uda1380_set_balance(int bal);
26extern void uda1380_set_bass(int value); 27extern void uda1380_set_bass(int value);
27extern void uda1380_set_treble(int value); 28extern void uda1380_set_treble(int value);
28extern int uda1380_mute(int mute); 29extern int uda1380_mute(int mute);
diff --git a/firmware/sound.c b/firmware/sound.c
index 7558a3349b..7dd1fbf98e 100644
--- a/firmware/sound.c
+++ b/firmware/sound.c
@@ -491,6 +491,8 @@ void sound_set(int setting, int value)
491#elif CONFIG_HWCODEC == MAS3507D 491#elif CONFIG_HWCODEC == MAS3507D
492 current_balance = value * 960 / 100; /* tenth of dB */ 492 current_balance = value * 960 / 100; /* tenth of dB */
493 set_prescaled_volume(); 493 set_prescaled_volume();
494#elif defined(HAVE_UDA1380)
495 uda1380_set_balance(value);
494#endif 496#endif
495 break; 497 break;
496 498