summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/imx233/audioout-imx233.c7
-rw-r--r--firmware/target/arm/imx233/audioout-imx233.h16
2 files changed, 22 insertions, 1 deletions
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)