diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/export/pcm_playback.h | 1 | ||||
-rw-r--r-- | firmware/pcm_playback.c | 24 |
2 files changed, 13 insertions, 12 deletions
diff --git a/firmware/export/pcm_playback.h b/firmware/export/pcm_playback.h index 3972e45768..5b61beb34d 100644 --- a/firmware/export/pcm_playback.h +++ b/firmware/export/pcm_playback.h | |||
@@ -29,6 +29,7 @@ void pcm_calculate_peaks(int *left, int *right); | |||
29 | long pcm_get_bytes_waiting(void); | 29 | long pcm_get_bytes_waiting(void); |
30 | 30 | ||
31 | void pcm_play_stop(void); | 31 | void pcm_play_stop(void); |
32 | void pcm_mute(bool mute); | ||
32 | void pcm_play_pause(bool play); | 33 | void pcm_play_pause(bool play); |
33 | bool pcm_is_paused(void); | 34 | bool pcm_is_paused(void); |
34 | bool pcm_is_playing(void); | 35 | bool pcm_is_playing(void); |
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index 6a190e4d23..ccac7843ad 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c | |||
@@ -75,11 +75,6 @@ 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 | |||
83 | /* Set up DMA transfer */ | 78 | /* Set up DMA transfer */ |
84 | SAR0 = ((unsigned long)addr); /* Source address */ | 79 | SAR0 = ((unsigned long)addr); /* Source address */ |
85 | DAR0 = (unsigned long)&PDOR3; /* Destination address */ | 80 | DAR0 = (unsigned long)&PDOR3; /* Destination address */ |
@@ -92,9 +87,6 @@ static void dma_start(const void *addr, long size) | |||
92 | EBU1CONFIG = EBU_DEFPARM; | 87 | EBU1CONFIG = EBU_DEFPARM; |
93 | #endif | 88 | #endif |
94 | DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START; | 89 | DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START; |
95 | |||
96 | /* Now unmute the audio. */ | ||
97 | uda1380_mute(false); | ||
98 | } | 90 | } |
99 | 91 | ||
100 | /* Stops the DMA transfer and interrupt */ | 92 | /* Stops the DMA transfer and interrupt */ |
@@ -220,14 +212,17 @@ long pcm_get_bytes_waiting(void) | |||
220 | return next_size + (BCR0 & 0xffffff); | 212 | return next_size + (BCR0 & 0xffffff); |
221 | } | 213 | } |
222 | 214 | ||
215 | void pcm_mute(bool mute) | ||
216 | { | ||
217 | uda1380_mute(mute); | ||
218 | if (mute) | ||
219 | sleep(HZ/16); | ||
220 | } | ||
221 | |||
223 | void pcm_play_stop(void) | 222 | void pcm_play_stop(void) |
224 | { | 223 | { |
225 | if (pcm_playing) { | 224 | if (pcm_playing) { |
226 | /* Same muting trick here to prevent a tiny pop. */ | ||
227 | uda1380_mute(true); | ||
228 | sleep(HZ/16); | ||
229 | dma_stop(); | 225 | dma_stop(); |
230 | uda1380_mute(false); | ||
231 | } | 226 | } |
232 | } | 227 | } |
233 | 228 | ||
@@ -465,6 +460,11 @@ void pcm_play_stop(void) | |||
465 | } | 460 | } |
466 | } | 461 | } |
467 | 462 | ||
463 | void pcm_mute(bool mute) | ||
464 | { | ||
465 | (void)mute; | ||
466 | } | ||
467 | |||
468 | void pcm_play_pause(bool play) | 468 | void pcm_play_pause(bool play) |
469 | { | 469 | { |
470 | if(pcm_paused && play && next_size) | 470 | if(pcm_paused && play && next_size) |