diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2021-05-30 19:56:44 +0100 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2021-05-30 19:17:50 +0000 |
commit | f63edb52ef8ecf18520926b40b3c61db37081a9d (patch) | |
tree | 29c36d3f247d7bab2f547d76655ac81fa8a71946 /firmware/target/mips/ingenic_x1000/fiiom3k | |
parent | c78ba1aa689b178ebb73b2730bc1b13697371fbf (diff) | |
download | rockbox-f63edb52ef8ecf18520926b40b3c61db37081a9d.tar.gz rockbox-f63edb52ef8ecf18520926b40b3c61db37081a9d.zip |
x1000: refactor AIC initialization
Have pcm-x1000 handle most work, so target's audiohw code touches
only the relevant settings.
Change-Id: Icf3d1b7ca428ac50a5a16ecec39ed8186ac5ae13
Diffstat (limited to 'firmware/target/mips/ingenic_x1000/fiiom3k')
-rw-r--r-- | firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c | 26 |
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 | ||
32 | void audiohw_init(void) | 30 | void 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 | ||
65 | int ak4376_set_mclk_freq(int hw_freq, bool enabled) | 56 | int 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 | } |