diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2020-09-04 15:55:11 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2020-09-04 15:57:00 -0400 |
commit | 90a4f28c2799e3ae5e873f1f34b1e4adb59f77cb (patch) | |
tree | 119dc1bffbfb56aa3d0d4af8a2adba74db7951d3 /firmware/target/mips | |
parent | 5f5e44f593f3c33beb813e8ae2948bc96d49681d (diff) | |
download | rockbox-90a4f28c2799e3ae5e873f1f34b1e4adb59f77cb.tar.gz rockbox-90a4f28c2799e3ae5e873f1f34b1e4adb59f77cb.zip |
jz47xx: Audio path tweaks:
* Increase audio buffer size to better handle IRQ latency (256->2048)
* Ensure DMA engine is idle prior to starting transfers
* Set AIC to repeat last sample in case of underflows
Change-Id: I9c45c20481ee072e5882b7586fb7d50bd8ef2f35
Diffstat (limited to 'firmware/target/mips')
4 files changed, 6 insertions, 0 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c b/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c index 702f3bb50e..a41f047026 100644 --- a/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/codec-jz4740.c | |||
@@ -267,6 +267,7 @@ void audiohw_postinit(void) | |||
267 | 267 | ||
268 | void audiohw_init(void) | 268 | void audiohw_init(void) |
269 | { | 269 | { |
270 | __aic_play_lastsample(); /* on FIFO underflow */ | ||
270 | i2s_codec_init(); | 271 | i2s_codec_init(); |
271 | } | 272 | } |
272 | 273 | ||
diff --git a/firmware/target/mips/ingenic_jz47xx/codec-jz4760.c b/firmware/target/mips/ingenic_jz47xx/codec-jz4760.c index bc4286fd6a..60bfecb08c 100644 --- a/firmware/target/mips/ingenic_jz47xx/codec-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/codec-jz4760.c | |||
@@ -115,6 +115,7 @@ void audiohw_init(void) | |||
115 | __cpm_start_aic(); | 115 | __cpm_start_aic(); |
116 | 116 | ||
117 | /* Init AIC */ | 117 | /* Init AIC */ |
118 | __aic_play_lastsample(); /* on FIFO underflow. Versus 0.. */ | ||
118 | __i2s_enable_sclk(); | 119 | __i2s_enable_sclk(); |
119 | __i2s_external_codec(); | 120 | __i2s_external_codec(); |
120 | __i2s_select_msbjustified(); | 121 | __i2s_select_msbjustified(); |
diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c index 00a2b22591..ef2597ae69 100644 --- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c | |||
@@ -137,6 +137,8 @@ void DMA_CALLBACK(DMA_AIC_TX_CHANNEL)(void) | |||
137 | 137 | ||
138 | void pcm_play_dma_start(const void *addr, size_t size) | 138 | void pcm_play_dma_start(const void *addr, size_t size) |
139 | { | 139 | { |
140 | pcm_play_dma_stop(); | ||
141 | |||
140 | dma_enable(); | 142 | dma_enable(); |
141 | 143 | ||
142 | set_dma(addr, size); | 144 | set_dma(addr, size); |
diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c index 59b086e4f8..098c28ecf5 100644 --- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4760.c | |||
@@ -128,6 +128,8 @@ void DMA_CALLBACK(DMA_AIC_TX_CHANNEL)(void) | |||
128 | 128 | ||
129 | void pcm_play_dma_start(const void *addr, size_t size) | 129 | void pcm_play_dma_start(const void *addr, size_t size) |
130 | { | 130 | { |
131 | pcm_play_dma_stop(); | ||
132 | |||
131 | __dmac_channel_enable_clk(DMA_AIC_TX_CHANNEL); | 133 | __dmac_channel_enable_clk(DMA_AIC_TX_CHANNEL); |
132 | 134 | ||
133 | set_dma(addr, size); | 135 | set_dma(addr, size); |