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.c50
1 files changed, 36 insertions, 14 deletions
diff --git a/firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c b/firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c
index d1c4d67d33..542d1745dc 100644
--- a/firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c
+++ b/firmware/target/mips/ingenic_x1000/fiiom3k/audiohw-fiiom3k.c
@@ -22,10 +22,24 @@
22#include "audiohw.h" 22#include "audiohw.h"
23#include "system.h" 23#include "system.h"
24#include "pcm_sampr.h" 24#include "pcm_sampr.h"
25#include "logf.h"
26#include "aic-x1000.h" 25#include "aic-x1000.h"
27#include "i2c-x1000.h" 26#include "i2c-x1000.h"
28#include "gpio-x1000.h" 27#include "gpio-x1000.h"
28#include "logf.h"
29
30static int cur_fsel = HW_FREQ_48;
31static int cur_power_mode = 0;
32
33static void set_ak_freqmode(void)
34{
35 int freq = hw_freq_sampr[cur_fsel];
36 int mult = freq >= SAMPR_176 ? 128 : 256;
37
38 aic_enable_i2s_bit_clock(false);
39 aic_set_i2s_clock(X1000_CLK_SCLK_A, freq, mult);
40 ak4376_set_freqmode(cur_fsel, mult, cur_power_mode);
41 aic_enable_i2s_bit_clock(true);
42}
29 43
30void audiohw_init(void) 44void audiohw_init(void)
31{ 45{
@@ -36,7 +50,8 @@ void audiohw_init(void)
36 50
37 /* Initialize DAC */ 51 /* Initialize DAC */
38 i2c_x1000_set_freq(AK4376_BUS, I2C_FREQ_400K); 52 i2c_x1000_set_freq(AK4376_BUS, I2C_FREQ_400K);
39 ak4376_init(); 53 ak4376_open();
54 set_ak_freqmode();
40} 55}
41 56
42void audiohw_postinit(void) 57void audiohw_postinit(void)
@@ -48,22 +63,29 @@ void audiohw_close(void)
48 ak4376_close(); 63 ak4376_close();
49} 64}
50 65
51void ak4376_set_pdn_pin(int level) 66void audiohw_set_volume(int vol_l, int vol_r)
52{ 67{
53 gpio_config(GPIO_A, 1 << 16, GPIO_OUTPUT(level ? 1 : 0)); 68 ak4376_set_volume(vol_l, vol_r);
54} 69}
55 70
56int ak4376_set_mclk_freq(int hw_freq, bool enabled) 71void audiohw_set_filter_roll_off(int val)
57{ 72{
58 int freq = hw_freq_sampr[hw_freq]; 73 ak4376_set_filter_roll_off(val);
59 int mult = freq >= SAMPR_176 ? 128 : 256; 74}
75
76void audiohw_set_frequency(int fsel)
77{
78 cur_fsel = fsel;
79 set_ak_freqmode();
80}
60 81
61 if(enabled) { 82void audiohw_set_power_mode(int mode)
62 if(aic_set_i2s_clock(X1000_CLK_SCLK_A, freq, mult)) { 83{
63 logf("WARNING: unachievable audio rate %d x %d!?", freq, mult); 84 cur_power_mode = mode;
64 } 85 set_ak_freqmode();
65 } 86}
66 87
67 aic_enable_i2s_bit_clock(enabled); 88void ak4376_set_pdn_pin(int level)
68 return mult; 89{
90 gpio_config(GPIO_A, 1 << 16, GPIO_OUTPUT(level ? 1 : 0));
69} 91}