summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/export/pcm_playback.h1
-rw-r--r--firmware/pcm_playback.c24
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);
29long pcm_get_bytes_waiting(void); 29long pcm_get_bytes_waiting(void);
30 30
31void pcm_play_stop(void); 31void pcm_play_stop(void);
32void pcm_mute(bool mute);
32void pcm_play_pause(bool play); 33void pcm_play_pause(bool play);
33bool pcm_is_paused(void); 34bool pcm_is_paused(void);
34bool pcm_is_playing(void); 35bool 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
215void pcm_mute(bool mute)
216{
217 uda1380_mute(mute);
218 if (mute)
219 sleep(HZ/16);
220}
221
223void pcm_play_stop(void) 222void 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
463void pcm_mute(bool mute)
464{
465 (void)mute;
466}
467
468void pcm_play_pause(bool play) 468void pcm_play_pause(bool play)
469{ 469{
470 if(pcm_paused && play && next_size) 470 if(pcm_paused && play && next_size)