summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/drivers/uda1380.c4
-rw-r--r--firmware/pcm_playback.c15
2 files changed, 9 insertions, 10 deletions
diff --git a/firmware/drivers/uda1380.c b/firmware/drivers/uda1380.c
index 07e92e7bba..1636f13365 100644
--- a/firmware/drivers/uda1380.c
+++ b/firmware/drivers/uda1380.c
@@ -53,7 +53,7 @@ unsigned short uda1380_defaults[2*NUM_DEFAULT_REGS] =
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 */
55 REG_EQ, EQ_MODE_MAX, /* Bass and tremble = 0 dB */ 55 REG_EQ, EQ_MODE_MAX, /* Bass and tremble = 0 dB */
56 REG_MUTE, MUTE_MASTER, /* Mute everything to start with */ 56 REG_MUTE, MUTE_MASTER | MUTE_CH2, /* Mute everything to start with */
57 REG_MIX_CTL, MIX_CTL_MIX, /* Enable mixer */ 57 REG_MIX_CTL, MIX_CTL_MIX, /* Enable mixer */
58 REG_DEC_VOL, 0, 58 REG_DEC_VOL, 0,
59 REG_PGA, MUTE_ADC, 59 REG_PGA, MUTE_ADC,
@@ -158,8 +158,6 @@ void 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_HP);
161 /* Don't unmute audio output here */
162 // uda1380_write_reg(REG_MUTE, MUTE_CH2);
163 } else { 161 } else {
164 uda1380_write_reg(REG_MUTE, MUTE_MASTER); 162 uda1380_write_reg(REG_MUTE, MUTE_MASTER);
165 uda1380_write_reg(REG_PWR, uda1380_regs[REG_PWR] & ~PON_HP); 163 uda1380_write_reg(REG_PWR, uda1380_regs[REG_PWR] & ~PON_HP);
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c
index 03afdace0a..6f395a58e2 100644
--- a/firmware/pcm_playback.c
+++ b/firmware/pcm_playback.c
@@ -248,7 +248,7 @@ void pcm_play_data(const unsigned char* start, int size,
248 dma_start(start, size); 248 dma_start(start, size);
249 249
250 /* Sleep a while, then unmute audio output */ 250 /* Sleep a while, then unmute audio output */
251 sleep(1); 251 sleep(HZ/8);
252 uda1380_mute(false); 252 uda1380_mute(false);
253} 253}
254 254
@@ -353,8 +353,14 @@ void pcm_init(void)
353 ICR4 = (ICR4 & 0xffff00ff) | 0x00001c00; 353 ICR4 = (ICR4 & 0xffff00ff) | 0x00001c00;
354 IMR &= ~(1<<14); /* bit 14 is DMA0 */ 354 IMR &= ~(1<<14); /* bit 14 is DMA0 */
355 355
356 pcm_play_init();
357 pcm_set_frequency(44100); 356 pcm_set_frequency(44100);
357
358 /* Turn on headphone power with audio output muted. */
359 uda1380_mute(true);
360 sleep(HZ/4);
361 uda1380_enable_output(true);
362
363 pcm_play_init();
358} 364}
359 365
360void pcm_play_set_watermark(int numbytes, void (*callback)(int bytes_left)) 366void pcm_play_set_watermark(int numbytes, void (*callback)(int bytes_left))
@@ -699,11 +705,6 @@ void pcm_play_init(void)
699 crossfade_active = false; 705 crossfade_active = false;
700 crossfade_init = false; 706 crossfade_init = false;
701 pcm_event_handler = NULL; 707 pcm_event_handler = NULL;
702
703 /* Turn on headphone power with audio output muted. */
704 uda1380_mute(true);
705 sleep(HZ/4);
706 uda1380_enable_output(true);
707} 708}
708 709
709void pcm_crossfade_enable(bool on_off) 710void pcm_crossfade_enable(bool on_off)