diff options
Diffstat (limited to 'firmware/drivers/uda1380.c')
-rw-r--r-- | firmware/drivers/uda1380.c | 23 |
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 | ||
39 | int uda1380_write_reg(unsigned char reg, unsigned short value); | 39 | int uda1380_write_reg(unsigned char reg, unsigned short value); |
40 | unsigned short uda1380_regs[0x30]; | 40 | unsigned short uda1380_regs[0x30]; |
41 | short uda1380_balance; | ||
42 | short 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 | */ |
91 | int uda1380_setvol(int vol) | 93 | int 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 | */ | ||
108 | void 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 | ||