summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/drivers/audio/ak4537.c4
-rw-r--r--firmware/drivers/audio/as3514.c20
-rw-r--r--firmware/drivers/audio/tlv320.c48
-rw-r--r--firmware/drivers/audio/tsc2100.c22
-rw-r--r--firmware/drivers/audio/uda1341.c4
-rw-r--r--firmware/drivers/audio/uda1380.c2
-rw-r--r--firmware/drivers/audio/wm8731.c2
-rw-r--r--firmware/drivers/audio/wm8751.c14
-rw-r--r--firmware/drivers/audio/wm8758.c2
-rw-r--r--firmware/drivers/audio/wm8975.c2
-rw-r--r--firmware/drivers/audio/wm8978.c38
-rw-r--r--firmware/drivers/audio/wm8985.c24
-rw-r--r--firmware/export/audiohw.h6
-rw-r--r--firmware/export/pcm.h1
-rw-r--r--firmware/pcm.c10
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c5
-rw-r--r--firmware/target/mips/ingenic_jz47xx/codec-jz4740.c2
17 files changed, 92 insertions, 114 deletions
diff --git a/firmware/drivers/audio/ak4537.c b/firmware/drivers/audio/ak4537.c
index 034fd4f313..c3ce02a3af 100644
--- a/firmware/drivers/audio/ak4537.c
+++ b/firmware/drivers/audio/ak4537.c
@@ -113,7 +113,7 @@ int sound_val2phys(int setting, int value)
113 return result; 113 return result;
114} 114}
115 115
116void audiohw_mute(bool mute) 116/*static void audiohw_mute(bool mute)
117{ 117{
118 if (mute) 118 if (mute)
119 { 119 {
@@ -125,7 +125,7 @@ void audiohw_mute(bool mute)
125 udelay(200000); 125 udelay(200000);
126 akc_clear(AK4537_DAC, SMUTE); 126 akc_clear(AK4537_DAC, SMUTE);
127 } 127 }
128} 128}*/
129 129
130void audiohw_preinit(void) 130void audiohw_preinit(void)
131{ 131{
diff --git a/firmware/drivers/audio/as3514.c b/firmware/drivers/audio/as3514.c
index 5817ff8f8c..a3be9e9246 100644
--- a/firmware/drivers/audio/as3514.c
+++ b/firmware/drivers/audio/as3514.c
@@ -229,6 +229,16 @@ void audiohw_preinit(void)
229#endif 229#endif
230} 230}
231 231
232static void audiohw_mute(bool mute)
233{
234 if (mute) {
235 as3514_set(AS3514_HPH_OUT_L, HPH_OUT_L_HP_MUTE);
236
237 } else {
238 as3514_clear(AS3514_HPH_OUT_L, HPH_OUT_L_HP_MUTE);
239 }
240}
241
232void audiohw_postinit(void) 242void audiohw_postinit(void)
233{ 243{
234 /* wait until outputs have stabilized */ 244 /* wait until outputs have stabilized */
@@ -280,16 +290,6 @@ void audiohw_set_lineout_vol(int vol_l, int vol_r)
280 as3514_write_masked(AS3514_LINE_OUT_L, vol_l, AS3514_VOL_MASK); 290 as3514_write_masked(AS3514_LINE_OUT_L, vol_l, AS3514_VOL_MASK);
281} 291}
282 292
283void audiohw_mute(bool mute)
284{
285 if (mute) {
286 as3514_set(AS3514_HPH_OUT_L, HPH_OUT_L_HP_MUTE);
287
288 } else {
289 as3514_clear(AS3514_HPH_OUT_L, HPH_OUT_L_HP_MUTE);
290 }
291}
292
293/* Nice shutdown of AS3514 audio codec */ 293/* Nice shutdown of AS3514 audio codec */
294void audiohw_close(void) 294void audiohw_close(void)
295{ 295{
diff --git a/firmware/drivers/audio/tlv320.c b/firmware/drivers/audio/tlv320.c
index 753a2453c3..b537fd5773 100644
--- a/firmware/drivers/audio/tlv320.c
+++ b/firmware/drivers/audio/tlv320.c
@@ -101,6 +101,30 @@ static void tlv320_write_reg(unsigned reg, unsigned value)
101 tlv320_regs[reg] = value; 101 tlv320_regs[reg] = value;
102} 102}
103 103
104static void audiohw_mute(bool mute)
105{
106 unsigned value_dap = tlv320_regs[REG_DAP];
107 unsigned value_l, value_r;
108
109 if (mute)
110 {
111 value_l = LHV_LHV(HEADPHONE_MUTE);
112 value_r = RHV_RHV(HEADPHONE_MUTE);
113 value_dap |= DAP_DACM;
114 }
115 else
116 {
117 value_l = LHV_LHV(tlv320.vol_l);
118 value_r = RHV_RHV(tlv320.vol_r);
119 if (value_l > HEADPHONE_MUTE || value_r > HEADPHONE_MUTE)
120 value_dap &= ~DAP_DACM;
121 }
122
123 tlv320_write_reg(REG_LHV, LHV_LZC | value_l);
124 tlv320_write_reg(REG_RHV, RHV_RZC | value_r);
125 tlv320_write_reg(REG_DAP, value_dap);
126}
127
104/* public functions */ 128/* public functions */
105 129
106/** 130/**
@@ -238,30 +262,6 @@ void audiohw_set_recvol(int left, int right, int type)
238} 262}
239#endif 263#endif
240 264
241void audiohw_mute(bool mute)
242{
243 unsigned value_dap = tlv320_regs[REG_DAP];
244 unsigned value_l, value_r;
245
246 if (mute)
247 {
248 value_l = LHV_LHV(HEADPHONE_MUTE);
249 value_r = RHV_RHV(HEADPHONE_MUTE);
250 value_dap |= DAP_DACM;
251 }
252 else
253 {
254 value_l = LHV_LHV(tlv320.vol_l);
255 value_r = RHV_RHV(tlv320.vol_r);
256 if (value_l > HEADPHONE_MUTE || value_r > HEADPHONE_MUTE)
257 value_dap &= ~DAP_DACM;
258 }
259
260 tlv320_write_reg(REG_LHV, LHV_LZC | value_l);
261 tlv320_write_reg(REG_RHV, RHV_RZC | value_r);
262 tlv320_write_reg(REG_DAP, value_dap);
263}
264
265/* Nice shutdown of TLV320 codec */ 265/* Nice shutdown of TLV320 codec */
266void audiohw_close(void) 266void audiohw_close(void)
267{ 267{
diff --git a/firmware/drivers/audio/tsc2100.c b/firmware/drivers/audio/tsc2100.c
index af41f0be52..cc6a7eed7d 100644
--- a/firmware/drivers/audio/tsc2100.c
+++ b/firmware/drivers/audio/tsc2100.c
@@ -81,17 +81,7 @@ void audiohw_init(void)
81 tsc2100_writereg(TSAC4_PAGE, TSAC4_ADDRESS, val); 81 tsc2100_writereg(TSAC4_PAGE, TSAC4_ADDRESS, val);
82} 82}
83 83
84void audiohw_postinit(void) 84static void audiohw_mute(bool mute)
85{
86 audiohw_mute(false);
87}
88
89void audiohw_set_master_vol(int vol_l, int vol_r)
90{
91 tsc2100_writereg(TSDACGAIN_PAGE, TSDACGAIN_ADDRESS, (short)((vol_l<<8) | vol_r) );
92}
93
94void audiohw_mute(bool mute)
95{ 85{
96 short vol = tsc2100_readreg(TSDACGAIN_PAGE, TSDACGAIN_ADDRESS); 86 short vol = tsc2100_readreg(TSDACGAIN_PAGE, TSDACGAIN_ADDRESS);
97 /* left mute bit == 1<<15 87 /* left mute bit == 1<<15
@@ -108,6 +98,16 @@ void audiohw_mute(bool mute)
108 tsc2100_writereg(TSDACGAIN_PAGE, TSDACGAIN_ADDRESS, vol); 98 tsc2100_writereg(TSDACGAIN_PAGE, TSDACGAIN_ADDRESS, vol);
109} 99}
110 100
101void audiohw_postinit(void)
102{
103 audiohw_mute(false);
104}
105
106void audiohw_set_master_vol(int vol_l, int vol_r)
107{
108 tsc2100_writereg(TSDACGAIN_PAGE, TSDACGAIN_ADDRESS, (short)((vol_l<<8) | vol_r) );
109}
110
111void audiohw_close(void) 111void audiohw_close(void)
112{ 112{
113 /* mute headphones */ 113 /* mute headphones */
diff --git a/firmware/drivers/audio/uda1341.c b/firmware/drivers/audio/uda1341.c
index 17d0475f2b..e26525b77a 100644
--- a/firmware/drivers/audio/uda1341.c
+++ b/firmware/drivers/audio/uda1341.c
@@ -210,14 +210,14 @@ void audiohw_set_treble(int value)
210 udacodec_write (UDA_REG_DATA0, UDA_DATA_CTRL1 | uda_regs [UDA_REG_ID_CTRL1] ); 210 udacodec_write (UDA_REG_DATA0, UDA_DATA_CTRL1 | uda_regs [UDA_REG_ID_CTRL1] );
211} 211}
212 212
213void audiohw_mute(bool mute) 213/*static void audiohw_mute(bool mute)
214{ 214{
215 if (mute) 215 if (mute)
216 uda_regs [UDA_REG_ID_CTRL2] |= UDA_MUTE_ON; 216 uda_regs [UDA_REG_ID_CTRL2] |= UDA_MUTE_ON;
217 else 217 else
218 uda_regs [UDA_REG_ID_CTRL2] &= ~UDA_MUTE_ON; 218 uda_regs [UDA_REG_ID_CTRL2] &= ~UDA_MUTE_ON;
219 219
220 udacodec_write (UDA_REG_DATA0, UDA_DATA_CTRL2 | uda_regs [UDA_REG_ID_CTRL2] ); 220 udacodec_write (UDA_REG_DATA0, UDA_DATA_CTRL2 | uda_regs [UDA_REG_ID_CTRL2] );*/
221} 221}
222 222
223void audiohw_set_prescaler(int val) 223void audiohw_set_prescaler(int val)
diff --git a/firmware/drivers/audio/uda1380.c b/firmware/drivers/audio/uda1380.c
index 0add100393..c9fef1d9ab 100644
--- a/firmware/drivers/audio/uda1380.c
+++ b/firmware/drivers/audio/uda1380.c
@@ -171,7 +171,7 @@ void audiohw_set_treble(int value)
171 | TREBLEL(value) | TREBLER(value)); 171 | TREBLEL(value) | TREBLER(value));
172} 172}
173 173
174void audiohw_mute(bool mute) 174static void audiohw_mute(bool mute)
175{ 175{
176 unsigned int value = uda1380_regs[REG_MUTE]; 176 unsigned int value = uda1380_regs[REG_MUTE];
177 177
diff --git a/firmware/drivers/audio/wm8731.c b/firmware/drivers/audio/wm8731.c
index 0499c4e7d2..e50079a18d 100644
--- a/firmware/drivers/audio/wm8731.c
+++ b/firmware/drivers/audio/wm8731.c
@@ -149,7 +149,7 @@ int sound_val2phys(int setting, int value)
149 return result; 149 return result;
150} 150}
151 151
152void audiohw_mute(bool mute) 152static void audiohw_mute(bool mute)
153{ 153{
154 if (mute) { 154 if (mute) {
155 /* Set DACMU = 1 to soft-mute the audio DACs. */ 155 /* Set DACMU = 1 to soft-mute the audio DACs. */
diff --git a/firmware/drivers/audio/wm8751.c b/firmware/drivers/audio/wm8751.c
index cdc64fd69b..ffe7f20bba 100644
--- a/firmware/drivers/audio/wm8751.c
+++ b/firmware/drivers/audio/wm8751.c
@@ -99,6 +99,13 @@ static int adaptivebass2hw(int value)
99} 99}
100#endif 100#endif
101 101
102static void audiohw_mute(bool mute)
103{
104 /* Mute: Set DACMU = 1 to soft-mute the audio DACs. */
105 /* Unmute: Set DACMU = 0 to soft-un-mute the audio DACs. */
106 wmcodec_write(DACCTRL, mute ? DACCTRL_DACMU : 0);
107}
108
102/* Reset and power up the WM8751 */ 109/* Reset and power up the WM8751 */
103void audiohw_preinit(void) 110void audiohw_preinit(void)
104{ 111{
@@ -230,13 +237,6 @@ void audiohw_set_treble(int value)
230 TREBCTRL_TREB(tone_tenthdb2hw(value))); 237 TREBCTRL_TREB(tone_tenthdb2hw(value)));
231} 238}
232 239
233void audiohw_mute(bool mute)
234{
235 /* Mute: Set DACMU = 1 to soft-mute the audio DACs. */
236 /* Unmute: Set DACMU = 0 to soft-un-mute the audio DACs. */
237 wmcodec_write(DACCTRL, mute ? DACCTRL_DACMU : 0);
238}
239
240/* Nice shutdown of WM8751 codec */ 240/* Nice shutdown of WM8751 codec */
241void audiohw_close(void) 241void audiohw_close(void)
242{ 242{
diff --git a/firmware/drivers/audio/wm8758.c b/firmware/drivers/audio/wm8758.c
index 12ca987bd7..5abc8c9fcd 100644
--- a/firmware/drivers/audio/wm8758.c
+++ b/firmware/drivers/audio/wm8758.c
@@ -116,7 +116,7 @@ int sound_val2phys(int setting, int value)
116 return result; 116 return result;
117} 117}
118 118
119void audiohw_mute(bool mute) 119static void audiohw_mute(bool mute)
120{ 120{
121 if (mute) { 121 if (mute) {
122 wmcodec_write(DACCTRL, DACCTRL_SOFTMUTE); 122 wmcodec_write(DACCTRL, DACCTRL_SOFTMUTE);
diff --git a/firmware/drivers/audio/wm8975.c b/firmware/drivers/audio/wm8975.c
index 97e4bf9255..dbe39d8b62 100644
--- a/firmware/drivers/audio/wm8975.c
+++ b/firmware/drivers/audio/wm8975.c
@@ -113,7 +113,7 @@ int sound_val2phys(int setting, int value)
113 return result; 113 return result;
114} 114}
115 115
116void audiohw_mute(bool mute) 116static void audiohw_mute(bool mute)
117{ 117{
118 if (mute) { 118 if (mute) {
119 /* Set DACMU = 1 to soft-mute the audio DACs. */ 119 /* Set DACMU = 1 to soft-mute the audio DACs. */
diff --git a/firmware/drivers/audio/wm8978.c b/firmware/drivers/audio/wm8978.c
index eb2e28aa69..e93c33b5ec 100644
--- a/firmware/drivers/audio/wm8978.c
+++ b/firmware/drivers/audio/wm8978.c
@@ -346,25 +346,7 @@ void audiohw_set_headphone_vol(int vol_l, int vol_r)
346 } 346 }
347} 347}
348 348
349void audiohw_close(void) 349static void audiohw_mute(bool mute)
350{
351 /* 1. Mute all analogue outputs */
352 audiohw_mute(true);
353 audiohw_enable_headphone_jack(false);
354
355 /* 2. Disable power management register 1. R1 = 00 */
356 wmc_write(WMC_POWER_MANAGEMENT1, 0x000);
357
358 /* 3. Disable power management register 2. R2 = 00 */
359 wmc_write(WMC_POWER_MANAGEMENT2, 0x000);
360
361 /* 4. Disable power management register 3. R3 = 00 */
362 wmc_write(WMC_POWER_MANAGEMENT3, 0x000);
363
364 /* 5. Remove external power supplies. */
365}
366
367void audiohw_mute(bool mute)
368{ 350{
369 wmc_vol.ahw_mute = mute; 351 wmc_vol.ahw_mute = mute;
370 352
@@ -385,6 +367,24 @@ void audiohw_mute(bool mute)
385 } 367 }
386} 368}
387 369
370void audiohw_close(void)
371{
372 /* 1. Mute all analogue outputs */
373 audiohw_mute(true);
374 audiohw_enable_headphone_jack(false);
375
376 /* 2. Disable power management register 1. R1 = 00 */
377 wmc_write(WMC_POWER_MANAGEMENT1, 0x000);
378
379 /* 3. Disable power management register 2. R2 = 00 */
380 wmc_write(WMC_POWER_MANAGEMENT2, 0x000);
381
382 /* 4. Disable power management register 3. R3 = 00 */
383 wmc_write(WMC_POWER_MANAGEMENT3, 0x000);
384
385 /* 5. Remove external power supplies. */
386}
387
388void audiohw_set_frequency(int fsel) 388void audiohw_set_frequency(int fsel)
389{ 389{
390 /* For 16.9344MHz MCLK, codec as master. */ 390 /* For 16.9344MHz MCLK, codec as master. */
diff --git a/firmware/drivers/audio/wm8985.c b/firmware/drivers/audio/wm8985.c
index d59d2d3230..18fd7c590b 100644
--- a/firmware/drivers/audio/wm8985.c
+++ b/firmware/drivers/audio/wm8985.c
@@ -165,6 +165,18 @@ void audiohw_preinit(void)
165 wmcodec_write(OUT4ADC, 0x0); /* POBCTRL = 0 */ 165 wmcodec_write(OUT4ADC, 0x0); /* POBCTRL = 0 */
166} 166}
167 167
168static void audiohw_mute(bool mute)
169{
170 if (mute)
171 {
172 /* Set DACMU = 1 to soft-mute the audio DACs. */
173 wmcodec_write(DACCTRL, 0x4c);
174 } else {
175 /* Set DACMU = 0 to soft-un-mute the audio DACs. */
176 wmcodec_write(DACCTRL, 0xc);
177 }
178}
179
168void audiohw_postinit(void) 180void audiohw_postinit(void)
169{ 181{
170 sleep(HZ/2); 182 sleep(HZ/2);
@@ -217,18 +229,6 @@ void audiohw_set_treble_cutoff(int value)
217 wmcodec_write(EQ5, eq5_reg); 229 wmcodec_write(EQ5, eq5_reg);
218} 230}
219 231
220void audiohw_mute(bool mute)
221{
222 if (mute)
223 {
224 /* Set DACMU = 1 to soft-mute the audio DACs. */
225 wmcodec_write(DACCTRL, 0x4c);
226 } else {
227 /* Set DACMU = 0 to soft-un-mute the audio DACs. */
228 wmcodec_write(DACCTRL, 0xc);
229 }
230}
231
232/* Nice shutdown of WM8985 codec */ 232/* Nice shutdown of WM8985 codec */
233void audiohw_close(void) 233void audiohw_close(void)
234{ 234{
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h
index c00b673a4a..22f6e68562 100644
--- a/firmware/export/audiohw.h
+++ b/firmware/export/audiohw.h
@@ -222,12 +222,6 @@ void audiohw_set_prescaler(int val);
222void audiohw_set_balance(int val); 222void audiohw_set_balance(int val);
223#endif 223#endif
224 224
225/**
226 * Mute or enable sound.
227 * @param mute true or false.
228 */
229void audiohw_mute(bool mute);
230
231#ifdef AUDIOHW_HAVE_TREBLE 225#ifdef AUDIOHW_HAVE_TREBLE
232/** 226/**
233 * Set new treble value. 227 * Set new treble value.
diff --git a/firmware/export/pcm.h b/firmware/export/pcm.h
index b9ad913100..e67d459693 100644
--- a/firmware/export/pcm.h
+++ b/firmware/export/pcm.h
@@ -79,7 +79,6 @@ const void* pcm_get_peak_buffer(int* count);
79size_t pcm_get_bytes_waiting(void); 79size_t pcm_get_bytes_waiting(void);
80 80
81void pcm_play_stop(void); 81void pcm_play_stop(void);
82void pcm_mute(bool mute);
83void pcm_play_pause(bool play); 82void pcm_play_pause(bool play);
84bool pcm_is_paused(void); 83bool pcm_is_paused(void);
85bool pcm_is_playing(void); 84bool pcm_is_playing(void);
diff --git a/firmware/pcm.c b/firmware/pcm.c
index 0e89cb90c9..edd4113677 100644
--- a/firmware/pcm.c
+++ b/firmware/pcm.c
@@ -355,16 +355,6 @@ bool pcm_is_paused(void)
355 return pcm_paused; 355 return pcm_paused;
356} 356}
357 357
358void pcm_mute(bool mute)
359{
360#ifndef SIMULATOR
361 audiohw_mute(mute);
362#endif
363
364 if (mute)
365 sleep(HZ/16);
366}
367
368#ifdef HAVE_RECORDING 358#ifdef HAVE_RECORDING
369/** Low level pcm recording apis **/ 359/** Low level pcm recording apis **/
370 360
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c
index 41f6369bac..16d388f0b9 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c
@@ -39,8 +39,3 @@ void audiohw_init(void)
39void audiohw_close(void) 39void audiohw_close(void)
40{ 40{
41} 41}
42
43void audiohw_mute(bool mute)
44{
45 (void) mute;
46}
diff --git a/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c b/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c
index ac78be522b..ce6d889885 100644
--- a/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c
@@ -266,7 +266,7 @@ static void HP_turn_off(void)
266} 266}
267#endif 267#endif
268 268
269void audiohw_mute(bool mute) 269static void audiohw_mute(bool mute)
270{ 270{
271 if(mute) 271 if(mute)
272 REG_ICDC_CDCCR1 |= ICDC_CDCCR1_HPMUTE; 272 REG_ICDC_CDCCR1 |= ICDC_CDCCR1_HPMUTE;