diff options
-rw-r--r-- | firmware/drivers/uda1380.c | 6 | ||||
-rw-r--r-- | firmware/pcm_playback.c | 19 |
2 files changed, 16 insertions, 9 deletions
diff --git a/firmware/drivers/uda1380.c b/firmware/drivers/uda1380.c index 15d58e697f..07e92e7bba 100644 --- a/firmware/drivers/uda1380.c +++ b/firmware/drivers/uda1380.c | |||
@@ -158,10 +158,8 @@ 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 | 161 | /* Don't unmute audio output here */ | |
162 | /* Sleep a while, then disable the master mute */ | 162 | // uda1380_write_reg(REG_MUTE, MUTE_CH2); |
163 | sleep(HZ/8); | ||
164 | uda1380_write_reg(REG_MUTE, MUTE_CH2); | ||
165 | } else { | 163 | } else { |
166 | uda1380_write_reg(REG_MUTE, MUTE_MASTER); | 164 | uda1380_write_reg(REG_MUTE, MUTE_MASTER); |
167 | uda1380_write_reg(REG_PWR, uda1380_regs[REG_PWR] & ~PON_HP); | 165 | uda1380_write_reg(REG_PWR, uda1380_regs[REG_PWR] & ~PON_HP); |
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index 894df6ba0d..03afdace0a 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c | |||
@@ -247,9 +247,9 @@ void pcm_play_data(const unsigned char* start, int size, | |||
247 | get_more(&next_start, &next_size); | 247 | get_more(&next_start, &next_size); |
248 | dma_start(start, size); | 248 | dma_start(start, size); |
249 | 249 | ||
250 | /* Sleep a while, then power on audio output */ | 250 | /* Sleep a while, then unmute audio output */ |
251 | sleep(HZ/16); | 251 | sleep(1); |
252 | uda1380_enable_output(true); | 252 | uda1380_mute(false); |
253 | } | 253 | } |
254 | 254 | ||
255 | void pcm_play_stop(void) | 255 | void pcm_play_stop(void) |
@@ -257,9 +257,9 @@ void pcm_play_stop(void) | |||
257 | crossfade_active = false; | 257 | crossfade_active = false; |
258 | pcm_set_boost_mode(false); | 258 | pcm_set_boost_mode(false); |
259 | if (pcm_playing) { | 259 | if (pcm_playing) { |
260 | uda1380_enable_output(false); | 260 | uda1380_mute(true); |
261 | pcm_boost(false); | 261 | pcm_boost(false); |
262 | sleep(HZ/16); | 262 | sleep(1); |
263 | dma_stop(); | 263 | dma_stop(); |
264 | } | 264 | } |
265 | } | 265 | } |
@@ -277,10 +277,14 @@ void pcm_play_pause(bool play) | |||
277 | IIS2CONFIG = (pcm_freq << 12) | 0x300 | 4 << 2; | 277 | IIS2CONFIG = (pcm_freq << 12) | 0x300 | 4 << 2; |
278 | EBU1CONFIG = 7 << 12 | 3 << 8 | 5 << 2; | 278 | EBU1CONFIG = 7 << 12 | 3 << 8 | 5 << 2; |
279 | DCR0 |= DMA_EEXT | DMA_START; | 279 | DCR0 |= DMA_EEXT | DMA_START; |
280 | sleep(1); | ||
281 | uda1380_mute(false); | ||
280 | } | 282 | } |
281 | else if(!pcm_paused && !play) | 283 | else if(!pcm_paused && !play) |
282 | { | 284 | { |
283 | logf("pause"); | 285 | logf("pause"); |
286 | uda1380_mute(true); | ||
287 | |||
284 | /* Disable DMA peripheral request. */ | 288 | /* Disable DMA peripheral request. */ |
285 | DCR0 &= ~DMA_EEXT; | 289 | DCR0 &= ~DMA_EEXT; |
286 | IIS2CONFIG = 0x800; | 290 | IIS2CONFIG = 0x800; |
@@ -695,6 +699,11 @@ void pcm_play_init(void) | |||
695 | crossfade_active = false; | 699 | crossfade_active = false; |
696 | crossfade_init = false; | 700 | crossfade_init = false; |
697 | pcm_event_handler = NULL; | 701 | 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); | ||
698 | } | 707 | } |
699 | 708 | ||
700 | void pcm_crossfade_enable(bool on_off) | 709 | void pcm_crossfade_enable(bool on_off) |