summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/drivers/uda1380.c6
-rw-r--r--firmware/pcm_playback.c10
2 files changed, 9 insertions, 7 deletions
diff --git a/firmware/drivers/uda1380.c b/firmware/drivers/uda1380.c
index 8accdc46b3..c0ff0c7ceb 100644
--- a/firmware/drivers/uda1380.c
+++ b/firmware/drivers/uda1380.c
@@ -48,7 +48,7 @@ unsigned short uda1380_defaults[2*NUM_DEFAULT_REGS] =
48{ 48{
49 REG_0, EN_DAC | EN_INT | EN_DEC | SYSCLK_256FS | WSPLL_25_50, 49 REG_0, EN_DAC | EN_INT | EN_DEC | SYSCLK_256FS | WSPLL_25_50,
50 REG_I2S, I2S_IFMT_IIS, 50 REG_I2S, I2S_IFMT_IIS,
51 REG_PWR, PON_PLL | PON_DAC | PON_BIAS, /* PON_HP is enabled later */ 51 REG_PWR, PON_PLL | PON_BIAS, /* PON_HP & PON_DAC is enabled later */
52 REG_AMIX, AMIX_RIGHT(0x3f) | AMIX_LEFT(0x3f), /* 00=max, 3f=mute */ 52 REG_AMIX, AMIX_RIGHT(0x3f) | AMIX_LEFT(0x3f), /* 00=max, 3f=mute */
53 REG_MASTER_VOL, MASTER_VOL_LEFT(0x20) | MASTER_VOL_RIGHT(0x20), /* 00=max, ff=mute */ 53 REG_MASTER_VOL, MASTER_VOL_LEFT(0x20) | MASTER_VOL_RIGHT(0x20), /* 00=max, ff=mute */
54 REG_MIX_VOL, MIX_VOL_CH_1(0) | MIX_VOL_CH_2(0xff), /* 00=max, ff=mute */ 54 REG_MIX_VOL, MIX_VOL_CH_1(0) | MIX_VOL_CH_2(0xff), /* 00=max, ff=mute */
@@ -157,10 +157,10 @@ int uda1380_set_regs(void)
157void uda1380_enable_output(bool enable) 157void uda1380_enable_output(bool enable)
158{ 158{
159 if (enable) { 159 if (enable) {
160 uda1380_write_reg(REG_PWR, uda1380_regs[REG_PWR] | PON_HP); 160 uda1380_write_reg(REG_PWR, uda1380_regs[REG_PWR] | PON_DAC | PON_HP);
161 } else { 161 } else {
162 uda1380_write_reg(REG_MUTE, MUTE_MASTER); 162 uda1380_write_reg(REG_MUTE, MUTE_MASTER);
163 uda1380_write_reg(REG_PWR, uda1380_regs[REG_PWR] & ~PON_HP); 163 uda1380_write_reg(REG_PWR, uda1380_regs[REG_PWR] & ~PON_DAC);
164 } 164 }
165} 165}
166 166
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c
index 5e2ba07b18..f75ec69857 100644
--- a/firmware/pcm_playback.c
+++ b/firmware/pcm_playback.c
@@ -307,14 +307,16 @@ void pcm_init(void)
307 /* Initialize default register values. */ 307 /* Initialize default register values. */
308 uda1380_init(); 308 uda1380_init();
309 309
310 /* Turn on headphone power */ 310 /* Sleep a while so the power can stabilize (especially a long
311 uda1380_enable_output(true); 311 delay is needed for the line out connector). */
312 sleep(HZ);
312 313
313 /* Sleep a little so the power can stabilize. */ 314 /* Power on FSDAC and HP amp. */
314 sleep(HZ/4); 315 uda1380_enable_output(true);
315 316
316 /* Unmute the master channel (DAC should be at zero point now). */ 317 /* Unmute the master channel (DAC should be at zero point now). */
317 uda1380_mute(false); 318 uda1380_mute(false);
319
318#elif defined(HAVE_TLV320) 320#elif defined(HAVE_TLV320)
319 tlv320_init(); 321 tlv320_init();
320 tlv320_enable_output(true); 322 tlv320_enable_output(true);