diff options
-rw-r--r-- | firmware/export/config/gigabeats.h | 1 | ||||
-rw-r--r-- | firmware/export/pcm.h | 4 | ||||
-rw-r--r-- | firmware/pcm.c | 62 | ||||
-rw-r--r-- | firmware/target/arm/as3525/pcm-as3525.c | 13 | ||||
-rw-r--r-- | firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c | 27 | ||||
-rw-r--r-- | firmware/target/arm/pcm-pp.c | 22 | ||||
-rw-r--r-- | firmware/target/arm/pcm-telechips.c | 7 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/pcm-s5l8700.c | 6 | ||||
-rw-r--r-- | firmware/target/coldfire/pcm-coldfire.c | 34 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c | 5 |
10 files changed, 78 insertions, 103 deletions
diff --git a/firmware/export/config/gigabeats.h b/firmware/export/config/gigabeats.h index 2e489239b9..19a8fa4bf8 100644 --- a/firmware/export/config/gigabeats.h +++ b/firmware/export/config/gigabeats.h | |||
@@ -220,6 +220,7 @@ | |||
220 | /* #define HAVE_ADJUSTABLE_CPU_FREQ */ | 220 | /* #define HAVE_ADJUSTABLE_CPU_FREQ */ |
221 | 221 | ||
222 | #define HAVE_PCM_DMA_ADDRESS | 222 | #define HAVE_PCM_DMA_ADDRESS |
223 | #define HAVE_PCM_REC_DMA_ADDRESS | ||
223 | 224 | ||
224 | #define BOOTFILE_EXT "gigabeat" | 225 | #define BOOTFILE_EXT "gigabeat" |
225 | #define BOOTFILE "rockbox." BOOTFILE_EXT | 226 | #define BOOTFILE "rockbox." BOOTFILE_EXT |
diff --git a/firmware/export/pcm.h b/firmware/export/pcm.h index 0f8222f90d..0e71814b34 100644 --- a/firmware/export/pcm.h +++ b/firmware/export/pcm.h | |||
@@ -140,7 +140,6 @@ void pcm_calculate_rec_peaks(int *left, int *right); | |||
140 | 140 | ||
141 | /** The following are for internal use between pcm.c and target- | 141 | /** The following are for internal use between pcm.c and target- |
142 | specific portion **/ | 142 | specific portion **/ |
143 | extern volatile const void *pcm_rec_peak_addr; | ||
144 | /* the registered callback function for when more data is available */ | 143 | /* the registered callback function for when more data is available */ |
145 | extern volatile pcm_more_callback_type2 pcm_callback_more_ready; | 144 | extern volatile pcm_more_callback_type2 pcm_callback_more_ready; |
146 | /* DMA transfer in is currently active */ | 145 | /* DMA transfer in is currently active */ |
@@ -150,9 +149,10 @@ extern volatile bool pcm_recording; | |||
150 | void pcm_rec_dma_init(void); | 149 | void pcm_rec_dma_init(void); |
151 | void pcm_rec_dma_close(void); | 150 | void pcm_rec_dma_close(void); |
152 | void pcm_rec_dma_start(void *addr, size_t size); | 151 | void pcm_rec_dma_start(void *addr, size_t size); |
152 | void pcm_rec_dma_record_more(void *start, size_t size); | ||
153 | void pcm_rec_dma_stop(void); | 153 | void pcm_rec_dma_stop(void); |
154 | void pcm_rec_dma_stopped_callback(void); | 154 | void pcm_rec_dma_stopped_callback(void); |
155 | const void * pcm_rec_dma_get_peak_buffer(int *count); | 155 | const void * pcm_rec_dma_get_peak_buffer(void); |
156 | 156 | ||
157 | #endif /* HAVE_RECORDING */ | 157 | #endif /* HAVE_RECORDING */ |
158 | 158 | ||
diff --git a/firmware/pcm.c b/firmware/pcm.c index edd4113677..8d2ec2bf60 100644 --- a/firmware/pcm.c +++ b/firmware/pcm.c | |||
@@ -40,7 +40,6 @@ | |||
40 | * pcm_play_unlock | 40 | * pcm_play_unlock |
41 | * Semi-private - | 41 | * Semi-private - |
42 | * pcm_play_dma_init | 42 | * pcm_play_dma_init |
43 | * pcm_play_dma_init | ||
44 | * pcm_play_dma_start | 43 | * pcm_play_dma_start |
45 | * pcm_play_dma_stop | 44 | * pcm_play_dma_stop |
46 | * pcm_play_dma_pause | 45 | * pcm_play_dma_pause |
@@ -66,10 +65,10 @@ | |||
66 | * pcm_rec_dma_init | 65 | * pcm_rec_dma_init |
67 | * pcm_rec_dma_close | 66 | * pcm_rec_dma_close |
68 | * pcm_rec_dma_start | 67 | * pcm_rec_dma_start |
68 | * pcm_rec_dma_record_more | ||
69 | * pcm_rec_dma_stop | 69 | * pcm_rec_dma_stop |
70 | * pcm_rec_dma_get_peak_buffer | 70 | * pcm_rec_dma_get_peak_buffer |
71 | * Data Read/Written within TSP - | 71 | * Data Read/Written within TSP - |
72 | * pcm_rec_peak_addr (R/W) | ||
73 | * pcm_callback_more_ready (R) | 72 | * pcm_callback_more_ready (R) |
74 | * pcm_recording (R) | 73 | * pcm_recording (R) |
75 | * | 74 | * |
@@ -210,6 +209,9 @@ void pcm_init(void) | |||
210 | /* Common code to pcm_play_data and pcm_play_pause */ | 209 | /* Common code to pcm_play_data and pcm_play_pause */ |
211 | static void pcm_play_data_start(unsigned char *start, size_t size) | 210 | static void pcm_play_data_start(unsigned char *start, size_t size) |
212 | { | 211 | { |
212 | start = (unsigned char *)(((uintptr_t)start + 3) & ~3); | ||
213 | size &= ~3; | ||
214 | |||
213 | if (!(start && size)) | 215 | if (!(start && size)) |
214 | { | 216 | { |
215 | pcm_more_callback_type get_more = pcm_callback_for_more; | 217 | pcm_more_callback_type get_more = pcm_callback_for_more; |
@@ -218,6 +220,9 @@ static void pcm_play_data_start(unsigned char *start, size_t size) | |||
218 | { | 220 | { |
219 | logf(" get_more"); | 221 | logf(" get_more"); |
220 | get_more(&start, &size); | 222 | get_more(&start, &size); |
223 | |||
224 | start = (unsigned char *)(((uintptr_t)start + 3) & ~3); | ||
225 | size &= ~3; | ||
221 | } | 226 | } |
222 | } | 227 | } |
223 | 228 | ||
@@ -359,7 +364,7 @@ bool pcm_is_paused(void) | |||
359 | /** Low level pcm recording apis **/ | 364 | /** Low level pcm recording apis **/ |
360 | 365 | ||
361 | /* Next start for recording peaks */ | 366 | /* Next start for recording peaks */ |
362 | const volatile void *pcm_rec_peak_addr SHAREDBSS_ATTR = NULL; | 367 | static const void * volatile pcm_rec_peak_addr SHAREDBSS_ATTR = NULL; |
363 | /* the registered callback function for when more data is available */ | 368 | /* the registered callback function for when more data is available */ |
364 | volatile pcm_more_callback_type2 | 369 | volatile pcm_more_callback_type2 |
365 | pcm_callback_more_ready SHAREDBSS_ATTR = NULL; | 370 | pcm_callback_more_ready SHAREDBSS_ATTR = NULL; |
@@ -373,17 +378,23 @@ volatile bool pcm_recording SHAREDBSS_ATTR = false; | |||
373 | void pcm_calculate_rec_peaks(int *left, int *right) | 378 | void pcm_calculate_rec_peaks(int *left, int *right) |
374 | { | 379 | { |
375 | static int peaks[2]; | 380 | static int peaks[2]; |
376 | int count; | ||
377 | const void *addr = pcm_rec_dma_get_peak_buffer(&count); | ||
378 | 381 | ||
379 | if (pcm_recording) | 382 | if (pcm_recording) |
380 | { | 383 | { |
381 | if (count > 0) | 384 | const void *peak_addr = pcm_rec_peak_addr; |
385 | const void *addr = pcm_rec_dma_get_peak_buffer(); | ||
386 | |||
387 | if (addr != NULL) | ||
382 | { | 388 | { |
383 | pcm_peak_peeker(addr, count, peaks); | 389 | int count = (int)(((intptr_t)addr - (intptr_t)peak_addr) >> 2); |
384 | 390 | ||
385 | if (addr == pcm_rec_peak_addr) | 391 | if (count > 0) |
386 | pcm_rec_peak_addr = (int32_t *)addr + count; | 392 | { |
393 | pcm_peak_peeker(peak_addr, count, peaks); | ||
394 | |||
395 | if (peak_addr == pcm_rec_peak_addr) | ||
396 | pcm_rec_peak_addr = addr; | ||
397 | } | ||
387 | } | 398 | } |
388 | /* else keep previous peak values */ | 399 | /* else keep previous peak values */ |
389 | } | 400 | } |
@@ -443,6 +454,10 @@ void pcm_record_data(pcm_more_callback_type2 more_ready, | |||
443 | { | 454 | { |
444 | logf("pcm_record_data"); | 455 | logf("pcm_record_data"); |
445 | 456 | ||
457 | /* 32-bit aligned and sized data only */ | ||
458 | start = (void *)(((uintptr_t)start + 3) & ~3); | ||
459 | size &= ~3; | ||
460 | |||
446 | if (!(start && size)) | 461 | if (!(start && size)) |
447 | { | 462 | { |
448 | logf(" no buffer"); | 463 | logf(" no buffer"); |
@@ -453,6 +468,13 @@ void pcm_record_data(pcm_more_callback_type2 more_ready, | |||
453 | 468 | ||
454 | pcm_callback_more_ready = more_ready; | 469 | pcm_callback_more_ready = more_ready; |
455 | 470 | ||
471 | #ifdef HAVE_PCM_REC_DMA_ADDRESS | ||
472 | /* Need a physical DMA address translation, if not already physical. */ | ||
473 | pcm_rec_peak_addr = pcm_dma_addr(start); | ||
474 | #else | ||
475 | pcm_rec_peak_addr = start; | ||
476 | #endif | ||
477 | |||
456 | logf(" pcm_rec_dma_start"); | 478 | logf(" pcm_rec_dma_start"); |
457 | pcm_apply_settings(); | 479 | pcm_apply_settings(); |
458 | pcm_rec_dma_start(start, size); | 480 | pcm_rec_dma_start(start, size); |
@@ -477,6 +499,28 @@ void pcm_stop_recording(void) | |||
477 | pcm_rec_unlock(); | 499 | pcm_rec_unlock(); |
478 | } /* pcm_stop_recording */ | 500 | } /* pcm_stop_recording */ |
479 | 501 | ||
502 | void pcm_record_more(void *start, size_t size) | ||
503 | { | ||
504 | start = (void *)(((uintptr_t)start + 3) & ~3); | ||
505 | size = size & ~3; | ||
506 | |||
507 | if (!size) | ||
508 | { | ||
509 | pcm_rec_dma_stop(); | ||
510 | pcm_rec_dma_stopped_callback(); | ||
511 | return; | ||
512 | } | ||
513 | |||
514 | #ifdef HAVE_PCM_REC_DMA_ADDRESS | ||
515 | /* Need a physical DMA address translation, if not already physical. */ | ||
516 | pcm_rec_peak_addr = pcm_dma_addr(start); | ||
517 | #else | ||
518 | pcm_rec_peak_addr = start; | ||
519 | #endif | ||
520 | |||
521 | pcm_rec_dma_record_more(start, size); | ||
522 | } | ||
523 | |||
480 | bool pcm_is_recording(void) | 524 | bool pcm_is_recording(void) |
481 | { | 525 | { |
482 | return pcm_recording; | 526 | return pcm_recording; |
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c index 53a3f0c9a3..4d78899398 100644 --- a/firmware/target/arm/as3525/pcm-as3525.c +++ b/firmware/target/arm/as3525/pcm-as3525.c | |||
@@ -202,7 +202,7 @@ void pcm_rec_unlock(void) | |||
202 | } | 202 | } |
203 | 203 | ||
204 | 204 | ||
205 | void pcm_record_more(void *start, size_t size) | 205 | void pcm_rec_dma_record_more(void *start, size_t size) |
206 | { | 206 | { |
207 | rec_start_addr = start; | 207 | rec_start_addr = start; |
208 | rec_size = size; | 208 | rec_size = size; |
@@ -331,16 +331,9 @@ void pcm_rec_dma_init(void) | |||
331 | } | 331 | } |
332 | 332 | ||
333 | 333 | ||
334 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 334 | const void * pcm_rec_dma_get_peak_buffer(void) |
335 | { | 335 | { |
336 | const void *peak_buffer; | 336 | return (const void*)rec_start_addr; |
337 | |||
338 | pcm_rec_lock(); | ||
339 | *count = rec_size >> 2; | ||
340 | peak_buffer = (const void*)rec_start_addr; | ||
341 | pcm_rec_unlock(); | ||
342 | |||
343 | return peak_buffer; | ||
344 | } | 337 | } |
345 | 338 | ||
346 | #endif /* HAVE_RECORDING */ | 339 | #endif /* HAVE_RECORDING */ |
diff --git a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c index c0651caf51..02051fad90 100644 --- a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c +++ b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c | |||
@@ -432,17 +432,13 @@ void pcm_rec_unlock(void) | |||
432 | } | 432 | } |
433 | } | 433 | } |
434 | 434 | ||
435 | void pcm_record_more(void *start, size_t size) | 435 | void pcm_rec_dma_record_more(void *start, size_t size) |
436 | { | 436 | { |
437 | start = (void *)(((unsigned long)start + 3) & ~3); | ||
438 | size &= ~3; | ||
439 | |||
440 | /* Invalidate - buffer must be coherent */ | 437 | /* Invalidate - buffer must be coherent */ |
441 | dump_dcache_range(start, size); | 438 | dump_dcache_range(start, size); |
442 | 439 | ||
443 | start = (void *)addr_virt_to_phys((unsigned long)start); | 440 | start = (void *)addr_virt_to_phys((unsigned long)start); |
444 | 441 | ||
445 | pcm_rec_peak_addr = start; | ||
446 | dma_rec_bd.buf_addr = start; | 442 | dma_rec_bd.buf_addr = start; |
447 | dma_rec_bd.mode.count = size; | 443 | dma_rec_bd.mode.count = size; |
448 | dma_rec_bd.mode.command = TRANSFER_16BIT; | 444 | dma_rec_bd.mode.command = TRANSFER_16BIT; |
@@ -469,12 +465,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
469 | { | 465 | { |
470 | pcm_rec_dma_stop(); | 466 | pcm_rec_dma_stop(); |
471 | 467 | ||
472 | addr = (void *)(((unsigned long)addr + 3) & ~3); | ||
473 | size &= ~3; | ||
474 | |||
475 | if (size <= 0) | ||
476 | return; | ||
477 | |||
478 | if (!sdma_channel_reset(DMA_REC_CH_NUM)) | 468 | if (!sdma_channel_reset(DMA_REC_CH_NUM)) |
479 | return; | 469 | return; |
480 | 470 | ||
@@ -482,7 +472,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
482 | dump_dcache_range(addr, size); | 472 | dump_dcache_range(addr, size); |
483 | 473 | ||
484 | addr = (void *)addr_virt_to_phys((unsigned long)addr); | 474 | addr = (void *)addr_virt_to_phys((unsigned long)addr); |
485 | pcm_rec_peak_addr = addr; | ||
486 | dma_rec_bd.buf_addr = addr; | 475 | dma_rec_bd.buf_addr = addr; |
487 | dma_rec_bd.mode.count = size; | 476 | dma_rec_bd.mode.count = size; |
488 | dma_rec_bd.mode.command = TRANSFER_16BIT; | 477 | dma_rec_bd.mode.command = TRANSFER_16BIT; |
@@ -524,10 +513,10 @@ void pcm_rec_dma_init(void) | |||
524 | sdma_channel_set_priority(DMA_REC_CH_NUM, DMA_REC_CH_PRIORITY); | 513 | sdma_channel_set_priority(DMA_REC_CH_NUM, DMA_REC_CH_PRIORITY); |
525 | } | 514 | } |
526 | 515 | ||
527 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 516 | const void * pcm_rec_dma_get_peak_buffer(void) |
528 | { | 517 | { |
529 | static unsigned long pda NOCACHEBSS_ATTR; | 518 | static unsigned long pda NOCACHEBSS_ATTR; |
530 | unsigned long buf, addr, end, bufend; | 519 | unsigned long buf, end, bufend; |
531 | int oldstatus; | 520 | int oldstatus; |
532 | 521 | ||
533 | /* read burst dma destination address register in channel context */ | 522 | /* read burst dma destination address register in channel context */ |
@@ -536,19 +525,13 @@ const void * pcm_rec_dma_get_peak_buffer(int *count) | |||
536 | oldstatus = disable_irq_save(); | 525 | oldstatus = disable_irq_save(); |
537 | end = pda; | 526 | end = pda; |
538 | buf = (unsigned long)dma_rec_bd.buf_addr; | 527 | buf = (unsigned long)dma_rec_bd.buf_addr; |
539 | addr = (unsigned long)pcm_rec_peak_addr; | ||
540 | bufend = buf + dma_rec_bd.mode.count; | 528 | bufend = buf + dma_rec_bd.mode.count; |
541 | restore_irq(oldstatus); | 529 | restore_irq(oldstatus); |
542 | 530 | ||
543 | /* Be addresses are coherent (no buffer change during read) */ | 531 | /* Be addresses are coherent (no buffer change during read) */ |
544 | if (addr >= buf && addr < bufend && | 532 | if (end >= buf && end < bufend) |
545 | end >= buf && end < bufend) | 533 | return (void *)(end & ~3); |
546 | { | ||
547 | *count = (end >> 2) - (addr >> 2); | ||
548 | return (void *)(addr & ~3); | ||
549 | } | ||
550 | 534 | ||
551 | *count = 0; | ||
552 | return NULL; | 535 | return NULL; |
553 | } | 536 | } |
554 | 537 | ||
diff --git a/firmware/target/arm/pcm-pp.c b/firmware/target/arm/pcm-pp.c index bd12b13032..bad3f593fe 100644 --- a/firmware/target/arm/pcm-pp.c +++ b/firmware/target/arm/pcm-pp.c | |||
@@ -431,9 +431,6 @@ static void play_stop_pcm(void) | |||
431 | 431 | ||
432 | void pcm_play_dma_start(const void *addr, size_t size) | 432 | void pcm_play_dma_start(const void *addr, size_t size) |
433 | { | 433 | { |
434 | addr = (void *)(((long)addr + 2) & ~3); | ||
435 | size &= ~3; | ||
436 | |||
437 | #if NUM_CORES > 1 | 434 | #if NUM_CORES > 1 |
438 | /* This will become more important later - and different ! */ | 435 | /* This will become more important later - and different ! */ |
439 | dma_play_data.core = processor_id(); /* save initiating core */ | 436 | dma_play_data.core = processor_id(); /* save initiating core */ |
@@ -441,9 +438,6 @@ void pcm_play_dma_start(const void *addr, size_t size) | |||
441 | 438 | ||
442 | pcm_play_dma_stop(); | 439 | pcm_play_dma_stop(); |
443 | 440 | ||
444 | if (size == 0) | ||
445 | return; | ||
446 | |||
447 | #ifdef CPU_PP502x | 441 | #ifdef CPU_PP502x |
448 | if ((unsigned long)addr < UNCACHED_BASE_ADDR) { | 442 | if ((unsigned long)addr < UNCACHED_BASE_ADDR) { |
449 | /* Flush any pending cache writes */ | 443 | /* Flush any pending cache writes */ |
@@ -691,9 +685,8 @@ void fiq_record(void) | |||
691 | #endif /* SANSA_E200 */ | 685 | #endif /* SANSA_E200 */ |
692 | 686 | ||
693 | /* Continue transferring data in */ | 687 | /* Continue transferring data in */ |
694 | void pcm_record_more(void *start, size_t size) | 688 | void pcm_rec_dma_record_more(void *start, size_t size) |
695 | { | 689 | { |
696 | pcm_rec_peak_addr = start; /* Start peaking at dest */ | ||
697 | dma_rec_data.addr = (unsigned long)start; /* Start of RX buffer */ | 690 | dma_rec_data.addr = (unsigned long)start; /* Start of RX buffer */ |
698 | dma_rec_data.size = size; /* Bytes to transfer */ | 691 | dma_rec_data.size = size; /* Bytes to transfer */ |
699 | } | 692 | } |
@@ -718,7 +711,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
718 | { | 711 | { |
719 | pcm_rec_dma_stop(); | 712 | pcm_rec_dma_stop(); |
720 | 713 | ||
721 | pcm_rec_peak_addr = addr; | ||
722 | dma_rec_data.addr = (unsigned long)addr; | 714 | dma_rec_data.addr = (unsigned long)addr; |
723 | dma_rec_data.size = size; | 715 | dma_rec_data.size = size; |
724 | #if NUM_CORES > 1 | 716 | #if NUM_CORES > 1 |
@@ -749,17 +741,9 @@ void pcm_rec_dma_init(void) | |||
749 | pcm_rec_dma_stop(); | 741 | pcm_rec_dma_stop(); |
750 | } /* pcm_init */ | 742 | } /* pcm_init */ |
751 | 743 | ||
752 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 744 | const void * pcm_rec_dma_get_peak_buffer(void) |
753 | { | 745 | { |
754 | unsigned long addr, end; | 746 | return (void *)((unsigned long)dma_rec_data.addr & ~3); |
755 | |||
756 | int status = disable_fiq_save(); | ||
757 | addr = (unsigned long)pcm_rec_peak_addr; | ||
758 | end = dma_rec_data.addr; | ||
759 | restore_fiq(status); | ||
760 | |||
761 | *count = (end >> 2) - (addr >> 2); | ||
762 | return (void *)(addr & ~3); | ||
763 | } /* pcm_rec_dma_get_peak_buffer */ | 747 | } /* pcm_rec_dma_get_peak_buffer */ |
764 | 748 | ||
765 | #endif /* HAVE_RECORDING */ | 749 | #endif /* HAVE_RECORDING */ |
diff --git a/firmware/target/arm/pcm-telechips.c b/firmware/target/arm/pcm-telechips.c index f0ef667d4f..9d14fa5ed5 100644 --- a/firmware/target/arm/pcm-telechips.c +++ b/firmware/target/arm/pcm-telechips.c | |||
@@ -141,8 +141,8 @@ static void play_stop_pcm(void) | |||
141 | 141 | ||
142 | void pcm_play_dma_start(const void *addr, size_t size) | 142 | void pcm_play_dma_start(const void *addr, size_t size) |
143 | { | 143 | { |
144 | dma_play_data.p = (void *)(((uintptr_t)addr + 2) & ~3); | 144 | dma_play_data.p = addr; |
145 | dma_play_data.size = (size & ~3); | 145 | dma_play_data.size = size; |
146 | 146 | ||
147 | #if NUM_CORES > 1 | 147 | #if NUM_CORES > 1 |
148 | /* This will become more important later - and different ! */ | 148 | /* This will become more important later - and different ! */ |
@@ -229,9 +229,8 @@ void pcm_rec_unlock(void) | |||
229 | { | 229 | { |
230 | } | 230 | } |
231 | 231 | ||
232 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 232 | const void * pcm_rec_dma_get_peak_buffer(void) |
233 | { | 233 | { |
234 | *count = 0; | ||
235 | return NULL; | 234 | return NULL; |
236 | } | 235 | } |
237 | 236 | ||
diff --git a/firmware/target/arm/s5l8700/pcm-s5l8700.c b/firmware/target/arm/s5l8700/pcm-s5l8700.c index 1edb05fd15..7798f41d11 100644 --- a/firmware/target/arm/s5l8700/pcm-s5l8700.c +++ b/firmware/target/arm/s5l8700/pcm-s5l8700.c | |||
@@ -367,7 +367,7 @@ void pcm_rec_unlock(void) | |||
367 | { | 367 | { |
368 | } | 368 | } |
369 | 369 | ||
370 | void pcm_record_more(void *start, size_t size) | 370 | void pcm_rec_dma_record_more(void *start, size_t size) |
371 | { | 371 | { |
372 | (void)start; | 372 | (void)start; |
373 | (void)size; | 373 | (void)size; |
@@ -393,9 +393,9 @@ void pcm_rec_dma_init(void) | |||
393 | } | 393 | } |
394 | 394 | ||
395 | 395 | ||
396 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 396 | const void * pcm_rec_dma_get_peak_buffer(void) |
397 | { | 397 | { |
398 | (void)count; | 398 | return NULL; |
399 | } | 399 | } |
400 | 400 | ||
401 | #endif /* HAVE_RECORDING */ | 401 | #endif /* HAVE_RECORDING */ |
diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c index 209d227187..f9c0764d64 100644 --- a/firmware/target/coldfire/pcm-coldfire.c +++ b/firmware/target/coldfire/pcm-coldfire.c | |||
@@ -235,12 +235,6 @@ void pcm_play_dma_start(const void *addr, size_t size) | |||
235 | /* Stop any DMA in progress */ | 235 | /* Stop any DMA in progress */ |
236 | pcm_play_dma_stop(); | 236 | pcm_play_dma_stop(); |
237 | 237 | ||
238 | addr = (void *)(((long)addr + 3) & ~3); | ||
239 | size &= ~3; | ||
240 | |||
241 | if (size <= 0) | ||
242 | return; | ||
243 | |||
244 | /* Set up DMA transfer */ | 238 | /* Set up DMA transfer */ |
245 | SAR0 = (unsigned long)addr; /* Source address */ | 239 | SAR0 = (unsigned long)addr; /* Source address */ |
246 | DAR0 = (unsigned long)&PDOR3; /* Destination address */ | 240 | DAR0 = (unsigned long)&PDOR3; /* Destination address */ |
@@ -382,12 +376,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
382 | /* stop any DMA in progress */ | 376 | /* stop any DMA in progress */ |
383 | pcm_rec_dma_stop(); | 377 | pcm_rec_dma_stop(); |
384 | 378 | ||
385 | addr = (void *)(((long)addr + 3) & ~3); | ||
386 | size &= ~3; | ||
387 | |||
388 | if (size <= 0) | ||
389 | return; | ||
390 | |||
391 | and_l(~PDIR2_FIFO_RESET, &DATAINCONTROL); | 379 | and_l(~PDIR2_FIFO_RESET, &DATAINCONTROL); |
392 | 380 | ||
393 | /* Start the DMA transfer.. */ | 381 | /* Start the DMA transfer.. */ |
@@ -396,7 +384,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
396 | INTERRUPTCLEAR = (1 << 25) | (1 << 24) | (1 << 23) | (1 << 22); | 384 | INTERRUPTCLEAR = (1 << 25) | (1 << 24) | (1 << 23) | (1 << 22); |
397 | #endif | 385 | #endif |
398 | 386 | ||
399 | pcm_rec_peak_addr = (unsigned long *)addr; /* Start peaking at dest */ | ||
400 | SAR1 = (unsigned long)&PDIR2; /* Source address */ | 387 | SAR1 = (unsigned long)&PDIR2; /* Source address */ |
401 | DAR1 = (unsigned long)addr; /* Destination address */ | 388 | DAR1 = (unsigned long)addr; /* Destination address */ |
402 | BCR1 = (unsigned long)size; /* Bytes to transfer */ | 389 | BCR1 = (unsigned long)size; /* Bytes to transfer */ |
@@ -490,30 +477,15 @@ void DMA1(void) | |||
490 | } /* DMA1 */ | 477 | } /* DMA1 */ |
491 | 478 | ||
492 | /* Continue transferring data in - call from interrupt callback */ | 479 | /* Continue transferring data in - call from interrupt callback */ |
493 | void pcm_record_more(void *start, size_t size) | 480 | void pcm_rec_dma_record_more(void *start, size_t size) |
494 | { | 481 | { |
495 | start = (void *)(((long)start + 3) & ~3); | ||
496 | size &= ~3; | ||
497 | |||
498 | pcm_rec_peak_addr = (unsigned long *)start; /* Start peaking at dest */ | ||
499 | DAR1 = (unsigned long)start; /* Destination address */ | 482 | DAR1 = (unsigned long)start; /* Destination address */ |
500 | BCR1 = (unsigned long)size; /* Bytes to transfer */ | 483 | BCR1 = (unsigned long)size; /* Bytes to transfer */ |
501 | or_l(DMA_EEXT | DMA_INT, &DCR1); /* per request and int ON */ | 484 | or_l(DMA_EEXT | DMA_INT, &DCR1); /* per request and int ON */ |
502 | } /* pcm_record_more */ | 485 | } /* pcm_record_more */ |
503 | 486 | ||
504 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 487 | const void * pcm_rec_dma_get_peak_buffer(void) |
505 | { | 488 | { |
506 | unsigned long addr, end; | 489 | return (void *)(DAR1 & ~3); |
507 | |||
508 | /* Make sure interrupt doesn't change the second value after we read the | ||
509 | * first value. */ | ||
510 | int level = set_irq_level(DMA_IRQ_LEVEL); | ||
511 | addr = (unsigned long)pcm_rec_peak_addr; | ||
512 | end = DAR1; | ||
513 | restore_irq(level); | ||
514 | |||
515 | addr >>= 2; | ||
516 | *count = (end >> 2) - addr; | ||
517 | return (void *)(addr << 2); | ||
518 | } /* pcm_rec_dma_get_peak_buffer */ | 490 | } /* pcm_rec_dma_get_peak_buffer */ |
519 | #endif | 491 | #endif |
diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c index a4ecd0b786..993f70bad8 100644 --- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c | |||
@@ -288,13 +288,12 @@ void pcm_rec_unlock(void) | |||
288 | { | 288 | { |
289 | } | 289 | } |
290 | 290 | ||
291 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 291 | const void * pcm_rec_dma_get_peak_buffer(void) |
292 | { | 292 | { |
293 | *count = 0; | ||
294 | return NULL; | 293 | return NULL; |
295 | } | 294 | } |
296 | 295 | ||
297 | void pcm_record_more(void *start, size_t size) | 296 | void pcm_rec_dma_record_more(void *start, size_t size) |
298 | { | 297 | { |
299 | (void) start; | 298 | (void) start; |
300 | (void) size; | 299 | (void) size; |