summaryrefslogtreecommitdiff
path: root/firmware/drivers/audio/wm8731.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/audio/wm8731.c')
-rw-r--r--firmware/drivers/audio/wm8731.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/firmware/drivers/audio/wm8731.c b/firmware/drivers/audio/wm8731.c
index 44aeefe791..66eb1e859a 100644
--- a/firmware/drivers/audio/wm8731.c
+++ b/firmware/drivers/audio/wm8731.c
@@ -238,6 +238,8 @@ void audiohw_enable_recording(bool source_mic)
238 codec_set_active(false); 238 codec_set_active(false);
239 239
240 wm8731_regs[PDCTRL] &= ~PDCTRL_ADCPD; 240 wm8731_regs[PDCTRL] &= ~PDCTRL_ADCPD;
241 /* NOTE: When switching to digital monitoring we will not want
242 * the DAC disabled. */
241 wm8731_regs[PDCTRL] |= PDCTRL_DACPD; 243 wm8731_regs[PDCTRL] |= PDCTRL_DACPD;
242 wm8731_regs[AAPCTRL] &= ~AAPCTRL_DACSEL; 244 wm8731_regs[AAPCTRL] &= ~AAPCTRL_DACSEL;
243 245
@@ -247,7 +249,7 @@ void audiohw_enable_recording(bool source_mic)
247 wm8731_regs[PDCTRL] &= ~PDCTRL_MICPD; 249 wm8731_regs[PDCTRL] &= ~PDCTRL_MICPD;
248 wm8731_regs[PDCTRL] |= PDCTRL_LINEINPD; 250 wm8731_regs[PDCTRL] |= PDCTRL_LINEINPD;
249 wm8731_regs[AAPCTRL] |= AAPCTRL_INSEL | AAPCTRL_SIDETONE; 251 wm8731_regs[AAPCTRL] |= AAPCTRL_INSEL | AAPCTRL_SIDETONE;
250 wm8731_regs[AAPCTRL] &= ~AAPCTRL_MUTEMIC; 252 wm8731_regs[AAPCTRL] &= ~(AAPCTRL_MUTEMIC | AAPCTRL_BYPASS);
251 } else { 253 } else {
252 wm8731_regs[PDCTRL] |= PDCTRL_MICPD; 254 wm8731_regs[PDCTRL] |= PDCTRL_MICPD;
253 wm8731_regs[PDCTRL] &= ~PDCTRL_LINEINPD; 255 wm8731_regs[PDCTRL] &= ~PDCTRL_LINEINPD;
@@ -259,9 +261,6 @@ void audiohw_enable_recording(bool source_mic)
259 wm8731_write(AAPCTRL, wm8731_regs[AAPCTRL]); 261 wm8731_write(AAPCTRL, wm8731_regs[AAPCTRL]);
260 262
261 if (!source_mic) { 263 if (!source_mic) {
262 wm8731_regs[AAPCTRL] |= AAPCTRL_INSEL | AAPCTRL_SIDETONE;
263 wm8731_regs[AAPCTRL] &= ~(AAPCTRL_MUTEMIC | AAPCTRL_BYPASS);
264 } else {
265 wm8731_write_and(LINVOL, ~LINVOL_LINMUTE); 264 wm8731_write_and(LINVOL, ~LINVOL_LINMUTE);
266 wm8731_write_and(RINVOL, ~RINVOL_RINMUTE); 265 wm8731_write_and(RINVOL, ~RINVOL_RINMUTE);
267 } 266 }
@@ -321,13 +320,11 @@ void audiohw_set_monitor(int enable)
321{ 320{
322 if(enable) 321 if(enable)
323 { 322 {
324 wm8731_regs[AAPCTRL] |= AAPCTRL_BYPASS; 323 wm8731_write_and(PDCTRL, ~PDCTRL_LINEINPD);
325 wm8731_regs[AAPCTRL] &=~ (AAPCTRL_DACSEL | AAPCTRL_SIDETONE); 324 wm8731_write_or(AAPCTRL, AAPCTRL_BYPASS);
326 wm8731_write(AAPCTRL, wm8731_regs[AAPCTRL]);
327 } 325 }
328 else { 326 else {
329 wm8731_regs[AAPCTRL] &=~ AAPCTRL_BYPASS; 327 wm8731_write_and(AAPCTRL, ~AAPCTRL_BYPASS);
330 wm8731_regs[AAPCTRL] |= AAPCTRL_DACSEL | AAPCTRL_SIDETONE; 328 wm8731_write_or(PDCTRL, PDCTRL_LINEINPD);
331 wm8731_write(AAPCTRL, wm8731_regs[AAPCTRL]);
332 } 329 }
333} 330}