summaryrefslogtreecommitdiff
path: root/firmware/drivers/uda1380.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/uda1380.c')
-rw-r--r--firmware/drivers/uda1380.c23
1 files changed, 21 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