summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertrik Sikken <bertrik@sikken.nl>2009-04-07 17:08:26 +0000
committerBertrik Sikken <bertrik@sikken.nl>2009-04-07 17:08:26 +0000
commit6b63f23648d04dd4d0dee2d878b1457da6b5cf53 (patch)
tree89e80dab65d01d022a3f8e58fa2a158b38df8370
parente15cf78987dcbaa572e882bc0b5773bde3a852e5 (diff)
downloadrockbox-6b63f23648d04dd4d0dee2d878b1457da6b5cf53.tar.gz
rockbox-6b63f23648d04dd4d0dee2d878b1457da6b5cf53.zip
Patch by Rafaël Carré - Sansa AMS: Fix a few mistakes in DMA code
DMAC_INT_TC_CLEAR is a write-only reg HIGH bits of DMAC_SYNC mean synchronisation logic disabled. Also, according to the OF and to tests, all the peripherals we use run at the same frequency (PCLK?). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20643 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/dma-pl081.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/firmware/target/arm/as3525/dma-pl081.c b/firmware/target/arm/as3525/dma-pl081.c
index 8a97986f2c..52fd90f940 100644
--- a/firmware/target/arm/as3525/dma-pl081.c
+++ b/firmware/target/arm/as3525/dma-pl081.c
@@ -48,7 +48,7 @@ void dma_release(void)
48 48
49void dma_init(void) 49void dma_init(void)
50{ 50{
51 DMAC_SYNC = 0; 51 DMAC_SYNC = 0xffff; /* disable synchronisation logic */
52 VIC_INT_ENABLE |= INTERRUPT_DMAC; 52 VIC_INT_ENABLE |= INTERRUPT_DMAC;
53} 53}
54 54
@@ -88,9 +88,6 @@ void dma_enable_channel(int channel, void *src, void *dst, int peri,
88 88
89 DMAC_CH_CONTROL(channel) = control; 89 DMAC_CH_CONTROL(channel) = control;
90 90
91 /* only needed if DMAC and Peripheral do not run at the same clock speed */
92 DMAC_SYNC |= (1<<peri);
93
94 /* we set the same peripheral as source and destination because we always 91 /* we set the same peripheral as source and destination because we always
95 * use memory-to-peripheral or peripheral-to-memory transfers */ 92 * use memory-to-peripheral or peripheral-to-memory transfers */
96 DMAC_CH_CONFIGURATION(channel) = 93 DMAC_CH_CONFIGURATION(channel) =
@@ -116,7 +113,7 @@ void INT_DMAC(void)
116 panicf("DMA error, channel %d", channel); 113 panicf("DMA error, channel %d", channel);
117 114
118 /* clear terminal count interrupt */ 115 /* clear terminal count interrupt */
119 DMAC_INT_TC_CLEAR |= (1<<channel); 116 DMAC_INT_TC_CLEAR = (1<<channel);
120 117
121 if(dma_callback[channel]) 118 if(dma_callback[channel])
122 dma_callback[channel](); 119 dma_callback[channel]();