diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2006-01-21 22:35:42 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2006-01-21 22:35:42 +0000 |
commit | 3458be2d9da84c159c3957316839271ea01193ba (patch) | |
tree | 6e7d2da058f818b83ac75a4e15a54026f9142564 /firmware | |
parent | 132599a8582ea74b0402e318b6a84c01bbb7fb58 (diff) | |
download | rockbox-3458be2d9da84c159c3957316839271ea01193ba.tar.gz rockbox-3458be2d9da84c159c3957316839271ea01193ba.zip |
Prevent a very tiny pop from happening when starting/stopping pcm
playback.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8406 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/pcm_playback.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index 36c6ab6a75..6a190e4d23 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c | |||
@@ -75,6 +75,11 @@ static void dma_start(const void *addr, long size) | |||
75 | EBU1CONFIG = IIS_RESET | EBU_DEFPARM; | 75 | EBU1CONFIG = IIS_RESET | EBU_DEFPARM; |
76 | #endif | 76 | #endif |
77 | 77 | ||
78 | /** Prevent a very tiny pop from happening by muting audio | ||
79 | * until dma has been initialized. */ | ||
80 | uda1380_mute(true); | ||
81 | sleep(HZ/16); | ||
82 | |||
78 | /* Set up DMA transfer */ | 83 | /* Set up DMA transfer */ |
79 | SAR0 = ((unsigned long)addr); /* Source address */ | 84 | SAR0 = ((unsigned long)addr); /* Source address */ |
80 | DAR0 = (unsigned long)&PDOR3; /* Destination address */ | 85 | DAR0 = (unsigned long)&PDOR3; /* Destination address */ |
@@ -87,6 +92,9 @@ static void dma_start(const void *addr, long size) | |||
87 | EBU1CONFIG = EBU_DEFPARM; | 92 | EBU1CONFIG = EBU_DEFPARM; |
88 | #endif | 93 | #endif |
89 | DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START; | 94 | DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START; |
95 | |||
96 | /* Now unmute the audio. */ | ||
97 | uda1380_mute(false); | ||
90 | } | 98 | } |
91 | 99 | ||
92 | /* Stops the DMA transfer and interrupt */ | 100 | /* Stops the DMA transfer and interrupt */ |
@@ -215,7 +223,11 @@ long pcm_get_bytes_waiting(void) | |||
215 | void pcm_play_stop(void) | 223 | void pcm_play_stop(void) |
216 | { | 224 | { |
217 | if (pcm_playing) { | 225 | if (pcm_playing) { |
226 | /* Same muting trick here to prevent a tiny pop. */ | ||
227 | uda1380_mute(true); | ||
228 | sleep(HZ/16); | ||
218 | dma_stop(); | 229 | dma_stop(); |
230 | uda1380_mute(false); | ||
219 | } | 231 | } |
220 | } | 232 | } |
221 | 233 | ||
@@ -274,7 +286,7 @@ void DMA0(void) | |||
274 | /* Stop on error */ | 286 | /* Stop on error */ |
275 | if(res & 0x70) | 287 | if(res & 0x70) |
276 | { | 288 | { |
277 | pcm_play_stop(); | 289 | dma_stop(); |
278 | logf("DMA Error:0x%04x", res); | 290 | logf("DMA Error:0x%04x", res); |
279 | } | 291 | } |
280 | else | 292 | else |
@@ -290,7 +302,7 @@ void DMA0(void) | |||
290 | else | 302 | else |
291 | { | 303 | { |
292 | /* Finished playing */ | 304 | /* Finished playing */ |
293 | pcm_play_stop(); | 305 | dma_stop(); |
294 | logf("DMA No Data:0x%04x", res); | 306 | logf("DMA No Data:0x%04x", res); |
295 | } | 307 | } |
296 | } | 308 | } |
@@ -340,7 +352,6 @@ void pcm_init(void) | |||
340 | sleep(HZ/4); | 352 | sleep(HZ/4); |
341 | tlv320_mute(false); | 353 | tlv320_mute(false); |
342 | #endif | 354 | #endif |
343 | |||
344 | 355 | ||
345 | /* Call dma_stop to initialize everything. */ | 356 | /* Call dma_stop to initialize everything. */ |
346 | dma_stop(); | 357 | dma_stop(); |