summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/imx233/audioout-imx233.c30
-rw-r--r--firmware/target/arm/imx233/audioout-imx233.h2
2 files changed, 29 insertions, 3 deletions
diff --git a/firmware/target/arm/imx233/audioout-imx233.c b/firmware/target/arm/imx233/audioout-imx233.c
index 8903879b8a..d3f83c2fad 100644
--- a/firmware/target/arm/imx233/audioout-imx233.c
+++ b/firmware/target/arm/imx233/audioout-imx233.c
@@ -37,6 +37,7 @@ static int hp_unmute_cb(struct timeout *tmo)
37 37
38void imx233_audioout_preinit(void) 38void imx233_audioout_preinit(void)
39{ 39{
40
40 /* Enable AUDIOOUT block */ 41 /* Enable AUDIOOUT block */
41 imx233_reset_block(&HW_AUDIOOUT_CTRL); 42 imx233_reset_block(&HW_AUDIOOUT_CTRL);
42 /* Enable digital filter clock */ 43 /* Enable digital filter clock */
@@ -57,7 +58,9 @@ void imx233_audioout_preinit(void)
57 /* change bias to -50% */ 58 /* change bias to -50% */
58 BF_WR(AUDIOOUT_TEST, HP_I1_ADJ, 1); 59 BF_WR(AUDIOOUT_TEST, HP_I1_ADJ, 1);
59 BF_WR(AUDIOOUT_REFCTRL, BIAS_CTRL, 1); 60 BF_WR(AUDIOOUT_REFCTRL, BIAS_CTRL, 1);
61#if IMX233_SUBTARGET >= 3700
60 BF_SET(AUDIOOUT_REFCTRL, RAISE_REF); 62 BF_SET(AUDIOOUT_REFCTRL, RAISE_REF);
63#endif
61 BF_SET(AUDIOOUT_REFCTRL, XTAL_BGR_BIAS); 64 BF_SET(AUDIOOUT_REFCTRL, XTAL_BGR_BIAS);
62 /* Stop holding to ground */ 65 /* Stop holding to ground */
63 BF_CLR(AUDIOOUT_ANACTRL, HP_HOLD_GND); 66 BF_CLR(AUDIOOUT_ANACTRL, HP_HOLD_GND);
@@ -72,12 +75,12 @@ void imx233_audioout_preinit(void)
72 HW_AUDIOOUT_DATA = 0; 75 HW_AUDIOOUT_DATA = 0;
73 HW_AUDIOOUT_DATA = 0; 76 HW_AUDIOOUT_DATA = 0;
74 HW_AUDIOOUT_DATA = 0; 77 HW_AUDIOOUT_DATA = 0;
75 /* wait for everything to stabilize before unmuting */
76 timeout_register(&hp_unmute_oneshort, hp_unmute_cb, HZ / 2, 0);
77} 78}
78 79
79void imx233_audioout_postinit(void) 80void imx233_audioout_postinit(void)
80{ 81{
82 /* wait for everything to stabilize before unmuting */
83 timeout_register(&hp_unmute_oneshort, hp_unmute_cb, HZ / 2, 0);
81} 84}
82 85
83void imx233_audioout_close(void) 86void imx233_audioout_close(void)
@@ -127,7 +130,11 @@ static void set_hp_vol(int vol_l, int vol_r)
127 vol_l = MAX(min, MIN(vol_l, max)); 130 vol_l = MAX(min, MIN(vol_l, max));
128 vol_r = MAX(min, MIN(vol_r, max)); 131 vol_r = MAX(min, MIN(vol_r, max));
129 /* unmute, enable zero cross and set volume.*/ 132 /* unmute, enable zero cross and set volume.*/
133#if IMX233_SUBTARGET >= 3700
130 unsigned mstr_zcd = BM_AUDIOOUT_HPVOL_EN_MSTR_ZCD; 134 unsigned mstr_zcd = BM_AUDIOOUT_HPVOL_EN_MSTR_ZCD;
135#else
136 unsigned mstr_zcd = 0;
137#endif
131 HW_AUDIOOUT_HPVOL = mstr_zcd | BF_OR3(AUDIOOUT_HPVOL, SELECT(input_line1), 138 HW_AUDIOOUT_HPVOL = mstr_zcd | BF_OR3(AUDIOOUT_HPVOL, SELECT(input_line1),
132 VOL_LEFT(max - vol_l), VOL_RIGHT(max - vol_r)); 139 VOL_LEFT(max - vol_l), VOL_RIGHT(max - vol_r));
133} 140}
@@ -183,7 +190,7 @@ void imx233_audioout_set_freq(int fsel)
183 HW_AUDIOOUT_DACSRR = BF_OR4(AUDIOOUT_DACSRR, 190 HW_AUDIOOUT_DACSRR = BF_OR4(AUDIOOUT_DACSRR,
184 SRC_FRAC(dacssr[fsel].src_frac), SRC_INT(dacssr[fsel].src_int), 191 SRC_FRAC(dacssr[fsel].src_frac), SRC_INT(dacssr[fsel].src_int),
185 SRC_HOLD(dacssr[fsel].src_hold), BASEMULT(dacssr[fsel].base_mult)); 192 SRC_HOLD(dacssr[fsel].src_hold), BASEMULT(dacssr[fsel].base_mult));
186 193
187 #if 0 194 #if 0
188 /* Select base_mult and src_hold depending on the audio range: 195 /* Select base_mult and src_hold depending on the audio range:
189 * 0 < f <= 12000 --> base_mult = 1, src_hold = 3 (div by 4) 196 * 0 < f <= 12000 --> base_mult = 1, src_hold = 3 (div by 4)
@@ -218,3 +225,20 @@ void imx233_audioout_select_hp_input(bool line1)
218 /* reapply volume setting */ 225 /* reapply volume setting */
219 apply_volume(); 226 apply_volume();
220} 227}
228
229void imx233_audioout_set_3d_effect(int val)
230{
231 switch(val)
232 {
233 /* 0 and 1.5dB: off */
234 case 0: case 1: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 0); break;
235 /* 3dB: low */
236 case 2: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 1); break;
237 /* 4.5dB: low */
238 case 3: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 2); break;
239 /* 6dB: low */
240 case 4: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 3); break;
241 /* others: off */
242 default: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 0); break;
243 }
244} \ No newline at end of file
diff --git a/firmware/target/arm/imx233/audioout-imx233.h b/firmware/target/arm/imx233/audioout-imx233.h
index 20ff7737e1..fba737c72a 100644
--- a/firmware/target/arm/imx233/audioout-imx233.h
+++ b/firmware/target/arm/imx233/audioout-imx233.h
@@ -36,5 +36,7 @@ void imx233_audioout_set_hp_vol(int vol_l, int vol_r);
36void imx233_audioout_set_freq(int fsel); 36void imx233_audioout_set_freq(int fsel);
37/* select between DAC and Line1 */ 37/* select between DAC and Line1 */
38void imx233_audioout_select_hp_input(bool line1); 38void imx233_audioout_select_hp_input(bool line1);
39/* value in 1.5dB steps, from 0dB to 6dB */
40void imx233_audioout_set_3d_effect(int val);
39 41
40#endif /* __audioout_imx233__ */ 42#endif /* __audioout_imx233__ */