diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2013-06-17 00:23:45 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2013-06-17 00:29:25 +0200 |
commit | 63ffdc1c8980a388d5017f951c8493a8f1fd477c (patch) | |
tree | ae45d24ed3089bec062ad4f3eb352d017b6312fb /firmware/target/arm | |
parent | f0f6aee58c8900d2ea562e8caa71cb87878f49f6 (diff) | |
download | rockbox-63ffdc1c8980a388d5017f951c8493a8f1fd477c.tar.gz rockbox-63ffdc1c8980a388d5017f951c8493a8f1fd477c.zip |
imx233: fix audioout for stmp3600 and stmp3700, add 3d effect
Although the 3D effets sound terrible, add support for it.
Change-Id: Ib24be01986a974387b592c6e291d34b196ceb884
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/imx233/audioout-imx233.c | 30 | ||||
-rw-r--r-- | firmware/target/arm/imx233/audioout-imx233.h | 2 |
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 | ||
38 | void imx233_audioout_preinit(void) | 38 | void 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 | ||
79 | void imx233_audioout_postinit(void) | 80 | void 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 | ||
83 | void imx233_audioout_close(void) | 86 | void 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 | |||
229 | void 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); | |||
36 | void imx233_audioout_set_freq(int fsel); | 36 | void imx233_audioout_set_freq(int fsel); |
37 | /* select between DAC and Line1 */ | 37 | /* select between DAC and Line1 */ |
38 | void imx233_audioout_select_hp_input(bool line1); | 38 | void imx233_audioout_select_hp_input(bool line1); |
39 | /* value in 1.5dB steps, from 0dB to 6dB */ | ||
40 | void imx233_audioout_set_3d_effect(int val); | ||
39 | 41 | ||
40 | #endif /* __audioout_imx233__ */ | 42 | #endif /* __audioout_imx233__ */ |