From 63ffdc1c8980a388d5017f951c8493a8f1fd477c Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Mon, 17 Jun 2013 00:23:45 +0200 Subject: imx233: fix audioout for stmp3600 and stmp3700, add 3d effect Although the 3D effets sound terrible, add support for it. Change-Id: Ib24be01986a974387b592c6e291d34b196ceb884 --- firmware/target/arm/imx233/audioout-imx233.c | 30 +++++++++++++++++++++++++--- firmware/target/arm/imx233/audioout-imx233.h | 2 ++ 2 files changed, 29 insertions(+), 3 deletions(-) (limited to 'firmware/target/arm/imx233') 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) void imx233_audioout_preinit(void) { + /* Enable AUDIOOUT block */ imx233_reset_block(&HW_AUDIOOUT_CTRL); /* Enable digital filter clock */ @@ -57,7 +58,9 @@ void imx233_audioout_preinit(void) /* change bias to -50% */ BF_WR(AUDIOOUT_TEST, HP_I1_ADJ, 1); BF_WR(AUDIOOUT_REFCTRL, BIAS_CTRL, 1); +#if IMX233_SUBTARGET >= 3700 BF_SET(AUDIOOUT_REFCTRL, RAISE_REF); +#endif BF_SET(AUDIOOUT_REFCTRL, XTAL_BGR_BIAS); /* Stop holding to ground */ BF_CLR(AUDIOOUT_ANACTRL, HP_HOLD_GND); @@ -72,12 +75,12 @@ void imx233_audioout_preinit(void) HW_AUDIOOUT_DATA = 0; HW_AUDIOOUT_DATA = 0; HW_AUDIOOUT_DATA = 0; - /* wait for everything to stabilize before unmuting */ - timeout_register(&hp_unmute_oneshort, hp_unmute_cb, HZ / 2, 0); } void imx233_audioout_postinit(void) { + /* wait for everything to stabilize before unmuting */ + timeout_register(&hp_unmute_oneshort, hp_unmute_cb, HZ / 2, 0); } void imx233_audioout_close(void) @@ -127,7 +130,11 @@ static void set_hp_vol(int vol_l, int vol_r) vol_l = MAX(min, MIN(vol_l, max)); vol_r = MAX(min, MIN(vol_r, max)); /* unmute, enable zero cross and set volume.*/ +#if IMX233_SUBTARGET >= 3700 unsigned mstr_zcd = BM_AUDIOOUT_HPVOL_EN_MSTR_ZCD; +#else + unsigned mstr_zcd = 0; +#endif HW_AUDIOOUT_HPVOL = mstr_zcd | BF_OR3(AUDIOOUT_HPVOL, SELECT(input_line1), VOL_LEFT(max - vol_l), VOL_RIGHT(max - vol_r)); } @@ -183,7 +190,7 @@ void imx233_audioout_set_freq(int fsel) HW_AUDIOOUT_DACSRR = BF_OR4(AUDIOOUT_DACSRR, SRC_FRAC(dacssr[fsel].src_frac), SRC_INT(dacssr[fsel].src_int), SRC_HOLD(dacssr[fsel].src_hold), BASEMULT(dacssr[fsel].base_mult)); - + #if 0 /* Select base_mult and src_hold depending on the audio range: * 0 < f <= 12000 --> base_mult = 1, src_hold = 3 (div by 4) @@ -218,3 +225,20 @@ void imx233_audioout_select_hp_input(bool line1) /* reapply volume setting */ apply_volume(); } + +void imx233_audioout_set_3d_effect(int val) +{ + switch(val) + { + /* 0 and 1.5dB: off */ + case 0: case 1: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 0); break; + /* 3dB: low */ + case 2: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 1); break; + /* 4.5dB: low */ + case 3: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 2); break; + /* 6dB: low */ + case 4: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 3); break; + /* others: off */ + default: BF_WR(AUDIOOUT_CTRL, SS3D_EFFECT, 0); break; + } +} \ 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); void imx233_audioout_set_freq(int fsel); /* select between DAC and Line1 */ void imx233_audioout_select_hp_input(bool line1); +/* value in 1.5dB steps, from 0dB to 6dB */ +void imx233_audioout_set_3d_effect(int val); #endif /* __audioout_imx233__ */ -- cgit v1.2.3