summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/pcm-as3525.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/as3525/pcm-as3525.c')
-rw-r--r--firmware/target/arm/as3525/pcm-as3525.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c
index 88aaaf9220..53a3f0c9a3 100644
--- a/firmware/target/arm/as3525/pcm-as3525.c
+++ b/firmware/target/arm/as3525/pcm-as3525.c
@@ -139,11 +139,13 @@ void pcm_dma_apply_settings(void)
139 unsigned long frequency = pcm_sampr; 139 unsigned long frequency = pcm_sampr;
140 140
141 /* TODO : use a table ? */ 141 /* TODO : use a table ? */
142 const int divider = (((AS3525_PLLA_FREQ/128) + (frequency/2)) / frequency) - 1; 142 const int divider = ((AS3525_MCLK_FREQ/128) + (frequency/2)) / frequency;
143 143
144 int cgu_audio = CGU_AUDIO; /* read register */ 144 int cgu_audio = CGU_AUDIO; /* read register */
145 cgu_audio &= ~(3 << 0); /* clear i2sout MCLK_SEL */
146 cgu_audio |= (AS3525_MCLK_SEL << 0); /* set i2sout MCLK_SEL */
145 cgu_audio &= ~(511 << 2); /* clear i2sout divider */ 147 cgu_audio &= ~(511 << 2); /* clear i2sout divider */
146 cgu_audio |= divider << 2; /* set new i2sout divider */ 148 cgu_audio |= (divider - 1) << 2; /* set new i2sout divider */
147 CGU_AUDIO = cgu_audio; /* write back register */ 149 CGU_AUDIO = cgu_audio; /* write back register */
148} 150}
149 151
@@ -318,13 +320,13 @@ void pcm_rec_dma_init(void)
318 unsigned long frequency = pcm_sampr; 320 unsigned long frequency = pcm_sampr;
319 321
320 /* TODO : use a table ? */ 322 /* TODO : use a table ? */
321 const int divider = (((AS3525_PLLA_FREQ/128) + (frequency/2)) / frequency) - 1; 323 const int divider = ((AS3525_MCLK_FREQ/128) + (frequency/2)) / frequency;
322 324
323 int cgu_audio = CGU_AUDIO; /* read register */ 325 int cgu_audio = CGU_AUDIO; /* read register */
324 cgu_audio &= ~(3 << 12); /* clear i2sin clocksource */ 326 cgu_audio &= ~(3 << 12); /* clear i2sin MCLK_SEL */
325 cgu_audio |= (1 << 12); /* set to PLLA */ 327 cgu_audio |= (AS3525_MCLK_SEL << 12); /* set i2sin MCLK_SEL */
326 cgu_audio &= ~(511 << 14); /* clear i2sin divider */ 328 cgu_audio &= ~(511 << 14); /* clear i2sin divider */
327 cgu_audio |= divider << 14; /* set new i2sin divider */ 329 cgu_audio |= (divider - 1) << 14; /* set new i2sin divider */
328 CGU_AUDIO = cgu_audio; /* write back register */ 330 CGU_AUDIO = cgu_audio; /* write back register */
329} 331}
330 332