diff options
Diffstat (limited to 'firmware/drivers/audio/wm8731.c')
-rw-r--r-- | firmware/drivers/audio/wm8731.c | 55 |
1 files changed, 18 insertions, 37 deletions
diff --git a/firmware/drivers/audio/wm8731.c b/firmware/drivers/audio/wm8731.c index 71050454f3..3689a28f31 100644 --- a/firmware/drivers/audio/wm8731.c +++ b/firmware/drivers/audio/wm8731.c | |||
@@ -37,22 +37,6 @@ | |||
37 | #include "wmcodec.h" | 37 | #include "wmcodec.h" |
38 | #include "sound.h" | 38 | #include "sound.h" |
39 | 39 | ||
40 | |||
41 | const struct sound_settings_info audiohw_settings[] = { | ||
42 | [SOUND_VOLUME] = {"dB", 0, 1, -74, 6, -25}, | ||
43 | /* HAVE_SW_TONE_CONTROLS */ | ||
44 | [SOUND_BASS] = {"dB", 0, 1, -24, 24, 0}, | ||
45 | [SOUND_TREBLE] = {"dB", 0, 1, -24, 24, 0}, | ||
46 | [SOUND_BALANCE] = {"%", 0, 1,-100, 100, 0}, | ||
47 | [SOUND_CHANNELS] = {"", 0, 1, 0, 5, 0}, | ||
48 | [SOUND_STEREO_WIDTH] = {"%", 0, 5, 0, 250, 100}, | ||
49 | #if defined(HAVE_WM8731) && defined(HAVE_RECORDING) | ||
50 | [SOUND_LEFT_GAIN] = {"dB", 1, 1, 0, 31, 23}, | ||
51 | [SOUND_RIGHT_GAIN] = {"dB", 1, 1, 0, 31, 23}, | ||
52 | [SOUND_MIC_GAIN] = {"dB", 1, 1, 0, 1, 0}, | ||
53 | #endif | ||
54 | }; | ||
55 | |||
56 | /* Init values/shadows | 40 | /* Init values/shadows |
57 | * Ignore bit 8 since that only specifies "both" for updating | 41 | * Ignore bit 8 since that only specifies "both" for updating |
58 | * gains - "RESET" (15h) not included */ | 42 | * gains - "RESET" (15h) not included */ |
@@ -109,22 +93,6 @@ static void wmc_write_masked(int reg, unsigned bits, unsigned mask) | |||
109 | wmc_write(reg, (wmc_regs[reg] & ~mask) | (bits & mask)); | 93 | wmc_write(reg, (wmc_regs[reg] & ~mask) | (bits & mask)); |
110 | } | 94 | } |
111 | 95 | ||
112 | /* convert tenth of dB volume (-730..60) to master volume register value */ | ||
113 | int tenthdb2master(int db) | ||
114 | { | ||
115 | /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ | ||
116 | /* 1111111 == +6dB (0x7f) */ | ||
117 | /* 1111001 == 0dB (0x79) */ | ||
118 | /* 0110000 == -73dB (0x30 */ | ||
119 | /* 0101111 == mute (0x2f) */ | ||
120 | |||
121 | if (db < VOLUME_MIN) { | ||
122 | return 0x2f; | ||
123 | } else { | ||
124 | return((db/10)+0x30+73); | ||
125 | } | ||
126 | } | ||
127 | |||
128 | int sound_val2phys(int setting, int value) | 96 | int sound_val2phys(int setting, int value) |
129 | { | 97 | { |
130 | int result; | 98 | int result; |
@@ -148,6 +116,21 @@ int sound_val2phys(int setting, int value) | |||
148 | return result; | 116 | return result; |
149 | } | 117 | } |
150 | 118 | ||
119 | /* convert tenth of dB volume (-730..60) to master volume register value */ | ||
120 | static int vol_tenthdb2hw(int db) | ||
121 | { | ||
122 | /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ | ||
123 | /* 1111111 == +6dB (0x7f) */ | ||
124 | /* 1111001 == 0dB (0x79) */ | ||
125 | /* 0110000 == -73dB (0x30) */ | ||
126 | /* 0101111 == mute (0x2f) */ | ||
127 | if (db < VOLUME_MIN) { | ||
128 | return 0x2f; | ||
129 | } else { | ||
130 | return((db/10)+0x30+73); | ||
131 | } | ||
132 | } | ||
133 | |||
151 | static void audiohw_mute(bool mute) | 134 | static void audiohw_mute(bool mute) |
152 | { | 135 | { |
153 | if (mute) { | 136 | if (mute) { |
@@ -207,13 +190,11 @@ void audiohw_postinit(void) | |||
207 | #endif | 190 | #endif |
208 | } | 191 | } |
209 | 192 | ||
210 | void audiohw_set_master_vol(int vol_l, int vol_r) | 193 | void audiohw_set_volume(int vol_l, int vol_r) |
211 | { | 194 | { |
212 | /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ | 195 | /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ |
213 | /* 1111111 == +6dB */ | 196 | vol_l = vol_tenthdb2hw(vol_l); |
214 | /* 1111001 == 0dB */ | 197 | vol_r = vol_tenthdb2hw(vol_r); |
215 | /* 0110000 == -73dB */ | ||
216 | /* 0101111 == mute (0x2f) */ | ||
217 | wmc_write_masked(LOUTVOL, vol_l, WMC_OUT_VOL_MASK); | 198 | wmc_write_masked(LOUTVOL, vol_l, WMC_OUT_VOL_MASK); |
218 | wmc_write_masked(ROUTVOL, vol_r, WMC_OUT_VOL_MASK); | 199 | wmc_write_masked(ROUTVOL, vol_r, WMC_OUT_VOL_MASK); |
219 | } | 200 | } |