summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-07-01 21:23:07 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-07-01 21:23:07 +0000
commit45d6fa916c87a0132f1248decc4863683fe82921 (patch)
tree7a9b117b3181c1e35b372a7b6a30f9f49373a1c5
parentcea09fa139e5a9794e1feb7ba8213e3b7179af59 (diff)
downloadrockbox-45d6fa916c87a0132f1248decc4863683fe82921.tar.gz
rockbox-45d6fa916c87a0132f1248decc4863683fe82921.zip
Fixed pops from headphone audio output.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6977 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/drivers/uda1380.c6
-rw-r--r--firmware/pcm_playback.c19
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
255void pcm_play_stop(void) 255void 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
700void pcm_crossfade_enable(bool on_off) 709void pcm_crossfade_enable(bool on_off)