From d119fb1fc5b917e430b23a28bebf6ec5db35b34e Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Sun, 2 Dec 2012 11:51:17 +0100 Subject: [PATCH] imx233: try to improve audio quality Change-Id: Idaee93fae8d407e5968f8571c54957b7b87da3bb --- firmware/target/arm/imx233/audioout-imx233.c | 7 +++++++ firmware/target/arm/imx233/audioout-imx233.h | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/firmware/target/arm/imx233/audioout-imx233.c b/firmware/target/arm/imx233/audioout-imx233.c index e5e1e37264..e9b368c9b6 100644 --- a/firmware/target/arm/imx233/audioout-imx233.c +++ b/firmware/target/arm/imx233/audioout-imx233.c @@ -53,6 +53,13 @@ void imx233_audioout_preinit(void) __REG_CLR(HW_AUDIOOUT_PWRDN) = HW_AUDIOOUT_PWRDN__HEADPHONE; /* Set HP mode to AB */ __REG_SET(HW_AUDIOOUT_ANACTRL) = HW_AUDIOOUT_ANACTRL__HP_CLASSAB; + /* change biais to -50% */ + __REG_CLR(HW_AUDIOOUT_TEST) = HW_AUDIOOUT_TEST__HP_I1_ADJ_BM; + __REG_SET(HW_AUDIOOUT_TEST) = HW_AUDIOOUT_TEST__HP_I1_ADJ_M_50; + __REG_CLR(HW_AUDIOOUT_REFCTRL) = HW_AUDIOOUT_REFCTRL__BIAS_CTRL_BM; + __REG_SET(HW_AUDIOOUT_REFCTRL) = 1 << HW_AUDIOOUT_REFCTRL__BIAS_CTRL_BP; + __REG_SET(HW_AUDIOOUT_REFCTRL) = HW_AUDIOOUT_REFCTRL__RAISE_REF; + __REG_SET(HW_AUDIOOUT_REFCTRL) = HW_AUDIOOUT_REFCTRL__XTAL_BGR_BIAS; /* Stop holding to ground */ __REG_CLR(HW_AUDIOOUT_ANACTRL) = HW_AUDIOOUT_ANACTRL__HP_HOLD_GND; /* Set dmawait count to 31 (see errata, workaround random stop) */ diff --git a/firmware/target/arm/imx233/audioout-imx233.h b/firmware/target/arm/imx233/audioout-imx233.h index acfb56138f..fbc0827be2 100644 --- a/firmware/target/arm/imx233/audioout-imx233.h +++ b/firmware/target/arm/imx233/audioout-imx233.h @@ -86,7 +86,13 @@ #define HW_AUDIOOUT_PWRDN__SPEAKER (1 << 24) #define HW_AUDIOOUT_REFCTRL (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x80)) -#define HW_AUDIOOUT_REFCTRL__LOW_PWR (1 << 19) +#define HW_AUDIOOUT_REFCTRL__BIAS_CTRL_BP 16 +#define HW_AUDIOOUT_REFCTRL__BIAS_CTRL_BM (3 << 16) +#define HW_AUDIOOUT_REFCTRL__LOW_PWR (1 << 19) +#define HW_AUDIOOUT_REFCTRL__VBG_ADJ_BP 20 +#define HW_AUDIOOUT_REFCTRL__VBG_ADJ_BM (3 << 20) +#define HW_AUDIOOUT_REFCTRL__XTAL_BGR_BIAS (1 << 24) +#define HW_AUDIOOUT_REFCTRL__RAISE_REF (1 << 25) #define HW_AUDIOOUT_ANACTRL (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x90)) #define HW_AUDIOOUT_ANACTRL__HP_CLASSAB (1 << 4) @@ -98,6 +104,14 @@ #define HW_AUDIOOUT_ANACTRL__SHORT_LR_STS (1 << 24) #define HW_AUDIOOUT_ANACTRL__SHORT_CM_STS (1 << 28) +#define HW_AUDIOOUT_TEST (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0xa0)) +#define HW_AUDIOOUT_TEST__HP_I1_ADJ_BM (3 << 22) +#define HW_AUDIOOUT_TEST__HP_I1_ADJ_BP 22 +#define HW_AUDIOOUT_TEST__HP_I1_ADJ_NOMINAL (0 << 22) +#define HW_AUDIOOUT_TEST__HP_I1_ADJ_M_50 (1 << 22) +#define HW_AUDIOOUT_TEST__HP_I1_ADJ_P_100 (2 << 22) +#define HW_AUDIOOUT_TEST__HP_I1_ADJ_P_50 (3 << 22) + #define HW_AUDIOOUT_ANACLKCTRL (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0xe0)) #define HW_AUDIOOUT_ANACLKCTRL__DACDIV_BP 0 #define HW_AUDIOOUT_ANACLKCTRL__DACDIV_BM (7 << 0)