summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c')
-rw-r--r--firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c26
1 files changed, 7 insertions, 19 deletions
diff --git a/firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c b/firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c
index 2f43809523..d1c4d67d33 100644
--- a/firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c
+++ b/firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c
@@ -26,22 +26,13 @@
26#include "aic-x1000.h" 26#include "aic-x1000.h"
27#include "i2c-x1000.h" 27#include "i2c-x1000.h"
28#include "gpio-x1000.h" 28#include "gpio-x1000.h"
29#include "x1000/aic.h"
30#include "x1000/cpm.h"
31 29
32void audiohw_init(void) 30void audiohw_init(void)
33{ 31{
34 /* Configure AIC for I2S operation */ 32 /* Configure AIC */
35 jz_writef(CPM_CLKGR, AIC(0)); 33 aic_set_external_codec(true);
36 gpio_config(GPIO_B, 0x1f, GPIO_DEVICE(1)); 34 aic_set_i2s_mode(AIC_I2S_MASTER_MODE);
37 jz_writef(AIC_I2SCR, STPBK(1)); 35 aic_enable_i2s_master_clock(true);
38
39 /* Operate as I2S master, use external codec */
40 jz_writef(AIC_CFG, AUSEL(1), ICDC(0), BCKD(1), SYNCD(1), LSMP(1));
41 jz_writef(AIC_I2SCR, ESCLK(1), AMSL(0));
42
43 /* Stereo audio, packed 16 bit samples */
44 jz_writef(AIC_CCR, PACK16(1), CHANNEL(1), OSS(1));
45 36
46 /* Initialize DAC */ 37 /* Initialize DAC */
47 i2c_x1000_set_freq(AK4376_BUS, I2C_FREQ_400K); 38 i2c_x1000_set_freq(AK4376_BUS, I2C_FREQ_400K);
@@ -64,18 +55,15 @@ void ak4376_set_pdn_pin(int level)
64 55
65int ak4376_set_mclk_freq(int hw_freq, bool enabled) 56int ak4376_set_mclk_freq(int hw_freq, bool enabled)
66{ 57{
67 /* Get the multiplier */
68 int freq = hw_freq_sampr[hw_freq]; 58 int freq = hw_freq_sampr[hw_freq];
69 int mult = freq >= SAMPR_176 ? 128 : 256; 59 int mult = freq >= SAMPR_176 ? 128 : 256;
70 60
71 if(enabled) { 61 if(enabled) {
72 /* Set the new frequency; clock is enabled afterward */ 62 if(aic_set_i2s_clock(X1000_CLK_SCLK_A, freq, mult)) {
73 if(aic_i2s_set_mclk(X1000_CLK_SCLK_A, freq, mult))
74 logf("WARNING: unachievable audio rate %d x %d!?", freq, mult); 63 logf("WARNING: unachievable audio rate %d x %d!?", freq, mult);
75 } else { 64 }
76 /* Shut off the clock */
77 jz_writef(AIC_I2SCR, STPBK(1));
78 } 65 }
79 66
67 aic_enable_i2s_bit_clock(enabled);
80 return mult; 68 return mult;
81} 69}