summaryrefslogtreecommitdiff
path: root/firmware/drivers/audio/as3514.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/audio/as3514.c')
-rw-r--r--firmware/drivers/audio/as3514.c42
1 files changed, 8 insertions, 34 deletions
diff --git a/firmware/drivers/audio/as3514.c b/firmware/drivers/audio/as3514.c
index 5f18bc6ec1..b9118f9fcf 100644
--- a/firmware/drivers/audio/as3514.c
+++ b/firmware/drivers/audio/as3514.c
@@ -63,21 +63,6 @@
63 63
64#endif 64#endif
65 65
66const struct sound_settings_info audiohw_settings[] = {
67 [SOUND_VOLUME] = {"dB", 0, 1, VOLUME_MIN/10, 6, -25},
68 /* HAVE_SW_TONE_CONTROLS */
69 [SOUND_BASS] = {"dB", 0, 1, -24, 24, 0},
70 [SOUND_TREBLE] = {"dB", 0, 1, -24, 24, 0},
71 [SOUND_BALANCE] = {"%", 0, 1,-100, 100, 0},
72 [SOUND_CHANNELS] = {"", 0, 1, 0, 5, 0},
73 [SOUND_STEREO_WIDTH] = {"%", 0, 5, 0, 250, 100},
74#ifdef HAVE_RECORDING
75 [SOUND_MIC_GAIN] = {"dB", 1, 1, 0, 39, 23},
76 [SOUND_LEFT_GAIN] = {"dB", 1, 1, 0, 31, 23},
77 [SOUND_RIGHT_GAIN] = {"dB", 1, 1, 0, 31, 23},
78#endif
79};
80
81/* Shadow registers */ 66/* Shadow registers */
82static uint8_t as3514_regs[AS3514_NUM_AUDIO_REGS]; /* 8-bit registers */ 67static uint8_t as3514_regs[AS3514_NUM_AUDIO_REGS]; /* 8-bit registers */
83 68
@@ -112,7 +97,7 @@ static void as3514_write_masked(unsigned int reg, unsigned int bits,
112} 97}
113 98
114/* convert tenth of dB volume to master volume register value */ 99/* convert tenth of dB volume to master volume register value */
115int tenthdb2master(int db) 100static int vol_tenthdb2hw(int db)
116{ 101{
117 /* +6 to -73.5dB (or -81.0 dB) in 1.5dB steps == 53 (or 58) levels */ 102 /* +6 to -73.5dB (or -81.0 dB) in 1.5dB steps == 53 (or 58) levels */
118 if (db < VOLUME_MIN) { 103 if (db < VOLUME_MIN) {
@@ -124,22 +109,6 @@ int tenthdb2master(int db)
124 } 109 }
125} 110}
126 111
127int sound_val2phys(int setting, int value)
128{
129 switch(setting)
130 {
131#if defined(HAVE_RECORDING)
132 case SOUND_LEFT_GAIN:
133 case SOUND_RIGHT_GAIN:
134 case SOUND_MIC_GAIN:
135 return (value - 23) * 15;
136#endif
137
138 default:
139 return value;
140 }
141}
142
143/* 112/*
144 * Initialise the PP I2C and I2S. 113 * Initialise the PP I2C and I2S.
145 */ 114 */
@@ -276,6 +245,9 @@ void audiohw_set_master_vol(int vol_l, int vol_r)
276 unsigned int hph_r, hph_l; 245 unsigned int hph_r, hph_l;
277 unsigned int mix_l, mix_r; 246 unsigned int mix_l, mix_r;
278 247
248 vol_l = vol_tenthdb2hw(vol_l);
249 vol_r = vol_tenthdb2hw(vol_r);
250
279 if (vol_l == 0 && vol_r == 0) { 251 if (vol_l == 0 && vol_r == 0) {
280 audiohw_mute(true); 252 audiohw_mute(true);
281 return; 253 return;
@@ -322,12 +294,14 @@ void audiohw_set_master_vol(int vol_l, int vol_r)
322} 294}
323 295
324#if 0 /* unused */ 296#if 0 /* unused */
325void audiohw_set_lineout_vol(int vol_l, int vol_r) 297void audiohw_set_lineout_volume(int vol_l, int vol_r)
326{ 298{
327#ifdef HAVE_AS3543 299#ifdef HAVE_AS3543
328 /* line out volume is set in the same registers */ 300 /* line out volume is set in the same registers */
329 audiohw_set_master_vol(vol_l, vol_r); 301 audiohw_set_master_volume(vol_l, vol_r);
330#else 302#else
303 vol_l = vol_tenthdb2hw(vol_l);
304 vol_r = vol_tenthdb2hw(vol_r);
331 as3514_write_masked(AS3514_LINE_OUT_R, vol_r, AS3514_VOL_MASK); 305 as3514_write_masked(AS3514_LINE_OUT_R, vol_r, AS3514_VOL_MASK);
332 as3514_write_masked(AS3514_LINE_OUT_L, vol_l, AS3514_VOL_MASK); 306 as3514_write_masked(AS3514_LINE_OUT_L, vol_l, AS3514_VOL_MASK);
333#endif 307#endif