diff options
Diffstat (limited to 'firmware/target/arm/as3525/pcm-as3525.c')
-rw-r--r-- | firmware/target/arm/as3525/pcm-as3525.c | 14 |
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 | ||