summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c')
-rw-r--r--firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c b/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
index 486a235614..30db29c42c 100644
--- a/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
+++ b/firmware/target/arm/s3c2440/mini2440/pcm-mini2440.c
@@ -254,35 +254,27 @@ void pcm_play_dma_pause(bool pause)
254 254
255void fiq_handler(void) 255void fiq_handler(void)
256{ 256{
257 static unsigned char *start; 257 static void *start;
258 static size_t size; 258 static size_t size;
259 register pcm_more_callback_type get_more; /* No stack for this */
260 259
261 /* clear any pending interrupt */ 260 /* clear any pending interrupt */
262 SRCPND = DMA2_MASK; 261 SRCPND = DMA2_MASK;
263 262
264 /* Buffer empty. Try to get more. */ 263 /* Buffer empty. Try to get more. */
265 get_more = pcm_callback_for_more; 264 pcm_play_get_more_callback(&start, &size);
266 size = 0;
267 265
268 if (get_more == NULL || (get_more(&start, &size), size == 0)) 266 if (size == 0)
269 { 267 return;
270 /* Callback missing or no more DMA to do */
271 pcm_play_dma_stop();
272 pcm_play_dma_stopped_callback();
273 }
274 else
275 {
276 /* Flush any pending cache writes */
277 clean_dcache_range(start, size);
278 268
279 /* set the new DMA values */ 269 /* Flush any pending cache writes */
280 DCON2 = DMA_CONTROL_SETUP | (size >> 1); 270 clean_dcache_range(start, size);
281 DISRC2 = (unsigned int)start + 0x30000000;
282 271
283 /* Re-Activate the channel */ 272 /* set the new DMA values */
284 DMASKTRIG2 = 0x2; 273 DCON2 = DMA_CONTROL_SETUP | (size >> 1);
285 } 274 DISRC2 = (unsigned int)start + 0x30000000;
275
276 /* Re-Activate the channel */
277 DMASKTRIG2 = 0x2;
286} 278}
287 279
288size_t pcm_get_bytes_waiting(void) 280size_t pcm_get_bytes_waiting(void)