diff options
Diffstat (limited to 'firmware/target/arm/as3525/pcm-as3525.c')
-rw-r--r-- | firmware/target/arm/as3525/pcm-as3525.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c index 0ecc63d018..eb22fc2016 100644 --- a/firmware/target/arm/as3525/pcm-as3525.c +++ b/firmware/target/arm/as3525/pcm-as3525.c | |||
@@ -36,9 +36,9 @@ | |||
36 | * and the number of 32bits words has to | 36 | * and the number of 32bits words has to |
37 | * fit in 11 bits of DMA register */ | 37 | * fit in 11 bits of DMA register */ |
38 | 38 | ||
39 | static void *dma_start_addr; /* Pointer to callback buffer */ | 39 | static const void *dma_start_addr; /* Pointer to callback buffer */ |
40 | static size_t dma_start_size; /* Size of callback buffer */ | 40 | static size_t dma_start_size; /* Size of callback buffer */ |
41 | static void *dma_sub_addr; /* Pointer to sub buffer */ | 41 | static const void *dma_sub_addr; /* Pointer to sub buffer */ |
42 | static size_t dma_rem_size; /* Remaining size - in 4*32 bits */ | 42 | static size_t dma_rem_size; /* Remaining size - in 4*32 bits */ |
43 | static size_t play_sub_size; /* size of current subtransfer */ | 43 | static size_t play_sub_size; /* size of current subtransfer */ |
44 | static void dma_callback(void); | 44 | static void dma_callback(void); |
@@ -100,9 +100,8 @@ static void dma_callback(void) | |||
100 | 100 | ||
101 | if(!dma_rem_size) | 101 | if(!dma_rem_size) |
102 | { | 102 | { |
103 | pcm_play_get_more_callback(&dma_start_addr, &dma_start_size); | 103 | if(!pcm_play_dma_complete_callback(PCM_DMAST_OK, &dma_start_addr, |
104 | 104 | &dma_start_size)) | |
105 | if (!dma_start_size) | ||
106 | return; | 105 | return; |
107 | 106 | ||
108 | dma_sub_addr = dma_start_addr; | 107 | dma_sub_addr = dma_start_addr; |
@@ -111,7 +110,7 @@ static void dma_callback(void) | |||
111 | /* force writeback */ | 110 | /* force writeback */ |
112 | commit_dcache_range(dma_start_addr, dma_start_size); | 111 | commit_dcache_range(dma_start_addr, dma_start_size); |
113 | play_start_pcm(); | 112 | play_start_pcm(); |
114 | pcm_play_dma_started_callback(); | 113 | pcm_play_dma_status_callback(PCM_DMAST_STARTED); |
115 | } | 114 | } |
116 | else | 115 | else |
117 | { | 116 | { |
@@ -123,7 +122,7 @@ void pcm_play_dma_start(const void *addr, size_t size) | |||
123 | { | 122 | { |
124 | is_playing = true; | 123 | is_playing = true; |
125 | 124 | ||
126 | dma_start_addr = (void*)addr; | 125 | dma_start_addr = addr; |
127 | dma_start_size = size; | 126 | dma_start_size = size; |
128 | dma_sub_addr = dma_start_addr; | 127 | dma_sub_addr = dma_start_addr; |
129 | dma_rem_size = size; | 128 | dma_rem_size = size; |
@@ -368,7 +367,12 @@ void INT_I2SIN(void) | |||
368 | } | 367 | } |
369 | } | 368 | } |
370 | 369 | ||
371 | pcm_rec_more_ready_callback(0, (void *)&rec_dma_addr, &rec_dma_size); | 370 | /* Inform middle layer */ |
371 | if (pcm_rec_dma_complete_callback(PCM_DMAST_OK, (void **)&rec_dma_addr, | ||
372 | &rec_dma_size)) | ||
373 | { | ||
374 | pcm_rec_dma_status_callback(PCM_DMAST_STARTED); | ||
375 | } | ||
372 | } | 376 | } |
373 | 377 | ||
374 | 378 | ||