summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2013-06-16 15:45:32 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2013-06-16 15:45:32 +0200
commitdf9e6c31473bc57482dabd6f7937a54736c4a3ba (patch)
tree6190c1ae3afd67b3936bc97f1816c46cbdec81b4 /firmware/target
parente6a931301fe8ef5800b2fd1114f932e9fd9e4db0 (diff)
downloadrockbox-df9e6c31473bc57482dabd6f7937a54736c4a3ba.tar.gz
rockbox-df9e6c31473bc57482dabd6f7937a54736c4a3ba.zip
imx233: rewrite audioout using new register headers
Change-Id: I20dddec437187c0974ac16027548dbe3dd097c59
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/arm/imx233/audioout-imx233.c102
-rw-r--r--firmware/target/arm/imx233/audioout-imx233.h97
2 files changed, 44 insertions, 155 deletions
diff --git a/firmware/target/arm/imx233/audioout-imx233.c b/firmware/target/arm/imx233/audioout-imx233.c
index e9b368c9b6..8f71655699 100644
--- a/firmware/target/arm/imx233/audioout-imx233.c
+++ b/firmware/target/arm/imx233/audioout-imx233.c
@@ -24,13 +24,14 @@
24#include "pcm_sampr.h" 24#include "pcm_sampr.h"
25 25
26static int hp_vol_l, hp_vol_r; 26static int hp_vol_l, hp_vol_r;
27static bool input_line1;
27static struct timeout hp_unmute_oneshort; 28static struct timeout hp_unmute_oneshort;
28 29
29static int hp_unmute_cb(struct timeout *tmo) 30static int hp_unmute_cb(struct timeout *tmo)
30{ 31{
31 (void) tmo; 32 (void) tmo;
32 /* unmute HP */ 33 /* unmute HP */
33 __REG_CLR(HW_AUDIOOUT_HPVOL) = HW_AUDIOOUT_HPVOL__MUTE; 34 BF_CLR(AUDIOOUT_HPVOL, MUTE);
34 return 0; 35 return 0;
35} 36}
36 37
@@ -41,35 +42,31 @@ void imx233_audioout_preinit(void)
41 /* Enable digital filter clock */ 42 /* Enable digital filter clock */
42 imx233_clkctrl_enable_xtal(XTAL_FILT, true); 43 imx233_clkctrl_enable_xtal(XTAL_FILT, true);
43 /* Enable DAC */ 44 /* Enable DAC */
44 __REG_CLR(HW_AUDIOOUT_ANACLKCTRL) = HW_AUDIOOUT_ANACLKCTRL__CLKGATE; 45 BF_CLR(AUDIOOUT_ANACLKCTRL, CLKGATE);
45 /* Set capless mode */ 46 /* Set capless mode */
46 __REG_CLR(HW_AUDIOOUT_PWRDN) = HW_AUDIOOUT_PWRDN__CAPLESS; 47 BF_CLR(AUDIOOUT_PWRDN, CAPLESS);
47 /* Set word-length to 16-bit */ 48 /* Set word-length to 16-bit */
48 __REG_SET(HW_AUDIOOUT_CTRL) = HW_AUDIOOUT_CTRL__WORD_LENGTH; 49 BF_SET(AUDIOOUT_CTRL, WORD_LENGTH);
49 /* Power up DAC */ 50 /* Power up DAC */
50 __REG_CLR(HW_AUDIOOUT_PWRDN) = HW_AUDIOOUT_PWRDN__DAC; 51 BF_CLR(AUDIOOUT_PWRDN, DAC);
51 /* Hold HP to ground to avoid pop, then release and power up HP */ 52 /* Hold HP to ground to avoid pop, then release and power up HP */
52 __REG_SET(HW_AUDIOOUT_ANACTRL) = HW_AUDIOOUT_ANACTRL__HP_HOLD_GND; 53 BF_SET(AUDIOOUT_ANACTRL, HP_HOLD_GND);
53 __REG_CLR(HW_AUDIOOUT_PWRDN) = HW_AUDIOOUT_PWRDN__HEADPHONE; 54 BF_CLR(AUDIOOUT_PWRDN, HEADPHONE);
54 /* Set HP mode to AB */ 55 /* Set HP mode to AB */
55 __REG_SET(HW_AUDIOOUT_ANACTRL) = HW_AUDIOOUT_ANACTRL__HP_CLASSAB; 56 BF_SET(AUDIOOUT_ANACTRL, HP_CLASSAB);
56 /* change biais to -50% */ 57 /* change bias to -50% */
57 __REG_CLR(HW_AUDIOOUT_TEST) = HW_AUDIOOUT_TEST__HP_I1_ADJ_BM; 58 BF_WR(AUDIOOUT_TEST, HP_I1_ADJ, 1);
58 __REG_SET(HW_AUDIOOUT_TEST) = HW_AUDIOOUT_TEST__HP_I1_ADJ_M_50; 59 BF_WR(AUDIOOUT_REFCTRL, BIAS_CTRL, 1);
59 __REG_CLR(HW_AUDIOOUT_REFCTRL) = HW_AUDIOOUT_REFCTRL__BIAS_CTRL_BM; 60 BF_SET(AUDIOOUT_REFCTRL, RAISE_REF);
60 __REG_SET(HW_AUDIOOUT_REFCTRL) = 1 << HW_AUDIOOUT_REFCTRL__BIAS_CTRL_BP; 61 BF_SET(AUDIOOUT_REFCTRL, XTAL_BGR_BIAS);
61 __REG_SET(HW_AUDIOOUT_REFCTRL) = HW_AUDIOOUT_REFCTRL__RAISE_REF;
62 __REG_SET(HW_AUDIOOUT_REFCTRL) = HW_AUDIOOUT_REFCTRL__XTAL_BGR_BIAS;
63 /* Stop holding to ground */ 62 /* Stop holding to ground */
64 __REG_CLR(HW_AUDIOOUT_ANACTRL) = HW_AUDIOOUT_ANACTRL__HP_HOLD_GND; 63 BF_CLR(AUDIOOUT_ANACTRL, HP_HOLD_GND);
65 /* Set dmawait count to 31 (see errata, workaround random stop) */ 64 /* Set dmawait count to 31 (see errata, workaround random stop) */
66 __REG_CLR(HW_AUDIOOUT_CTRL) = HW_AUDIOOUT_CTRL__DMAWAIT_COUNT_BM; 65 BF_WR(AUDIOOUT_CTRL, DMAWAIT_COUNT, 31);
67 __REG_SET(HW_AUDIOOUT_CTRL) = 31 << HW_AUDIOOUT_CTRL__DMAWAIT_COUNT_BP;
68 /* start converting audio */ 66 /* start converting audio */
69 __REG_SET(HW_AUDIOOUT_CTRL) = HW_AUDIOOUT_CTRL__RUN; 67 BF_SET(AUDIOOUT_CTRL, RUN);
70 /* unmute DAC */ 68 /* unmute DAC */
71 __REG_CLR(HW_AUDIOOUT_DACVOLUME) = HW_AUDIOOUT_DACVOLUME__MUTE_LEFT | 69 HW_AUDIOOUT_DACVOLUME_CLR = BM_OR2(AUDIOOUT_DACVOLUME, MUTE_LEFT, MUTE_RIGHT);
72 HW_AUDIOOUT_DACVOLUME__MUTE_RIGHT;
73 /* send a few samples to avoid pop */ 70 /* send a few samples to avoid pop */
74 HW_AUDIOOUT_DATA = 0; 71 HW_AUDIOOUT_DATA = 0;
75 HW_AUDIOOUT_DATA = 0; 72 HW_AUDIOOUT_DATA = 0;
@@ -86,24 +83,23 @@ void imx233_audioout_postinit(void)
86void imx233_audioout_close(void) 83void imx233_audioout_close(void)
87{ 84{
88 /* Switch to class A */ 85 /* Switch to class A */
89 __REG_CLR(HW_AUDIOOUT_ANACTRL) = HW_AUDIOOUT_ANACTRL__HP_CLASSAB; 86 BF_CLR(AUDIOOUT_ANACTRL, HP_CLASSAB);
90 /* Hold HP to ground */ 87 /* Hold HP to ground */
91 __REG_SET(HW_AUDIOOUT_ANACTRL) = HW_AUDIOOUT_ANACTRL__HP_HOLD_GND; 88 BF_SET(AUDIOOUT_ANACTRL, HP_HOLD_GND);
92 /* Mute HP and power down */ 89 /* Mute HP and power down */
93 __REG_SET(HW_AUDIOOUT_HPVOL) = HW_AUDIOOUT_HPVOL__MUTE; 90 BF_SET(AUDIOOUT_HPVOL, MUTE);
94 /* Power down HP */ 91 /* Power down HP */
95 __REG_SET(HW_AUDIOOUT_PWRDN) = HW_AUDIOOUT_PWRDN__HEADPHONE; 92 BF_SET(AUDIOOUT_PWRDN, HEADPHONE);
96 /* Mute DAC */ 93 /* Mute DAC */
97 __REG_SET(HW_AUDIOOUT_DACVOLUME) = HW_AUDIOOUT_DACVOLUME__MUTE_LEFT 94 HW_AUDIOOUT_DACVOLUME_SET = BM_OR2(AUDIOOUT_DACVOLUME, MUTE_LEFT, MUTE_RIGHT);
98 | HW_AUDIOOUT_DACVOLUME__MUTE_RIGHT;
99 /* Power down DAC */ 95 /* Power down DAC */
100 __REG_SET(HW_AUDIOOUT_PWRDN) = HW_AUDIOOUT_PWRDN__DAC; 96 BF_SET(AUDIOOUT_PWRDN, DAC);
101 /* Gate off DAC */ 97 /* Gate off DAC */
102 __REG_SET(HW_AUDIOOUT_ANACLKCTRL) = HW_AUDIOOUT_ANACLKCTRL__CLKGATE; 98 BF_SET(AUDIOOUT_ANACLKCTRL, CLKGATE);
103 /* Disable digital filter clock */ 99 /* Disable digital filter clock */
104 imx233_clkctrl_enable_xtal(XTAL_FILT, false); 100 imx233_clkctrl_enable_xtal(XTAL_FILT, false);
105 /* will also gate off the module */ 101 /* will also gate off the module */
106 __REG_CLR(HW_AUDIOOUT_CTRL) = HW_AUDIOOUT_CTRL__RUN; 102 BF_CLR(AUDIOOUT_CTRL, RUN);
107} 103}
108 104
109/* volume in half dB 105/* volume in half dB
@@ -115,36 +111,31 @@ static void set_dac_vol(int vol_l, int vol_r)
115 vol_r = MAX(-200, MIN(vol_r, 0)); 111 vol_r = MAX(-200, MIN(vol_r, 0));
116 /* unmute, enable zero cross and set volume. 112 /* unmute, enable zero cross and set volume.
117 * 0xff is 0dB */ 113 * 0xff is 0dB */
118 HW_AUDIOOUT_DACVOLUME = 114 HW_AUDIOOUT_DACVOLUME = BF_OR3(AUDIOOUT_DACVOLUME,
119 (0xff + vol_l) << HW_AUDIOOUT_DACVOLUME__VOLUME_LEFT_BP | 115 VOLUME_LEFT(0xff + vol_l), VOLUME_RIGHT(0xff + vol_r), EN_ZCD(1));
120 (0xff + vol_r) << HW_AUDIOOUT_DACVOLUME__VOLUME_RIGHT_BP |
121 HW_AUDIOOUT_DACVOLUME__EN_ZCD;
122} 116}
123 117
124/* volume in half dB 118/* volume in half dB
125 * don't check input values */ 119 * don't check input values */
126static void set_hp_vol(int vol_l, int vol_r) 120static void set_hp_vol(int vol_l, int vol_r)
127{ 121{
128 uint32_t select = (HW_AUDIOOUT_HPVOL & HW_AUDIOOUT_HPVOL__SELECT);
129 /* minimum is -57.5dB and max is 6dB in DAC mode 122 /* minimum is -57.5dB and max is 6dB in DAC mode
130 * and -51.5dB / 12dB in Line1 mode */ 123 * and -51.5dB / 12dB in Line1 mode */
131 int min = select ? -103 : -115; 124 int min = input_line1 ? -103 : -115;
132 int max = select ? 24 : 12; 125 int max = input_line1 ? 24 : 12;
133 126
134 vol_l = MAX(min, MIN(vol_l, max)); 127 vol_l = MAX(min, MIN(vol_l, max));
135 vol_r = MAX(min, MIN(vol_r, max)); 128 vol_r = MAX(min, MIN(vol_r, max));
136 /* unmute, enable zero cross and set volume. Keep select value. */ 129 /* unmute, enable zero cross and set volume.*/
137 HW_AUDIOOUT_HPVOL = 130 unsigned mstr_zcd = BM_AUDIOOUT_HPVOL_EN_MSTR_ZCD;
138 (max - vol_l) << HW_AUDIOOUT_HPVOL__VOL_LEFT_BP | 131 HW_AUDIOOUT_HPVOL = mstr_zcd | BF_OR3(AUDIOOUT_HPVOL, SELECT(input_line1),
139 (max - vol_r) << HW_AUDIOOUT_HPVOL__VOL_RIGHT_BP | 132 VOL_LEFT(max - vol_l), VOL_RIGHT(max - vol_r));
140 select |
141 HW_AUDIOOUT_HPVOL__EN_MSTR_ZCD;
142} 133}
143 134
144static void apply_volume(void) 135static void apply_volume(void)
145{ 136{
146 /* Two cases: line1 and dac */ 137 /* Two cases: line1 and dac */
147 if(HW_AUDIOOUT_HPVOL & HW_AUDIOOUT_HPVOL__SELECT) 138 if(input_line1)
148 { 139 {
149 /* In line1 mode, the HP is the only way to adjust the volume */ 140 /* In line1 mode, the HP is the only way to adjust the volume */
150 set_hp_vol(hp_vol_l, hp_vol_r); 141 set_hp_vol(hp_vol_l, hp_vol_r);
@@ -189,12 +180,10 @@ void imx233_audioout_set_freq(int fsel)
189 HW_HAVE_96_([HW_FREQ_96] = { 0x2, 0x0, 0xf, 0x13ff },) 180 HW_HAVE_96_([HW_FREQ_96] = { 0x2, 0x0, 0xf, 0x13ff },)
190 }; 181 };
191 182
192 HW_AUDIOOUT_DACSRR = 183 HW_AUDIOOUT_DACSRR = BF_OR4(AUDIOOUT_DACSRR,
193 dacssr[fsel].src_frac << HW_AUDIOOUT_DACSRR__SRC_FRAC_BP | 184 SRC_FRAC(dacssr[fsel].src_frac), SRC_INT(dacssr[fsel].src_int),
194 dacssr[fsel].src_int << HW_AUDIOOUT_DACSRR__SRC_INT_BP | 185 SRC_HOLD(dacssr[fsel].src_hold), BASEMULT(dacssr[fsel].base_mult));
195 dacssr[fsel].src_hold << HW_AUDIOOUT_DACSRR__SRC_HOLD_BP | 186
196 dacssr[fsel].base_mult << HW_AUDIOOUT_DACSRR__BASEMULT_BP;
197
198 #if 0 187 #if 0
199 /* Select base_mult and src_hold depending on the audio range: 188 /* Select base_mult and src_hold depending on the audio range:
200 * 0 < f <= 12000 --> base_mult = 1, src_hold = 3 (div by 4) 189 * 0 < f <= 12000 --> base_mult = 1, src_hold = 3 (div by 4)
@@ -216,21 +205,16 @@ void imx233_audioout_set_freq(int fsel)
216 int src_int = (750000 * base_mult) / (f * (src_hold + 1)); 205 int src_int = (750000 * base_mult) / (f * (src_hold + 1));
217 int src_frac = ((750000 * base_mult - src_int * f * (src_hold + 1)) << 13) / (f * (src_hold + 1)); 206 int src_frac = ((750000 * base_mult - src_int * f * (src_hold + 1)) << 13) / (f * (src_hold + 1));
218 207
219 HW_AUDIOOUT_DACSRR = 208 HW_AUDIOOUT_DACSRR = BF_OR4(AUDIOOUT_DACSRR,
220 src_frac << HW_AUDIOOUT_DACSRR__SRC_FRAC_BP | 209 SRC_FRAC(src_frac), SRC_INT(src_int),
221 src_int << HW_AUDIOOUT_DACSRR__SRC_INT_BP | 210 SRC_HOLD(src_hold), BASEMULT(base_mult));
222 src_hold << HW_AUDIOOUT_DACSRR__SRC_HOLD_BP |
223 base_mult << HW_AUDIOOUT_DACSRR__BASEMULT_BP;
224 #endif 211 #endif
225} 212}
226 213
227/* select between DAC and Line1 */ 214/* select between DAC and Line1 */
228void imx233_audioout_select_hp_input(bool line1) 215void imx233_audioout_select_hp_input(bool line1)
229{ 216{
230 if(line1) 217 input_line1 = line1;
231 __REG_SET(HW_AUDIOOUT_HPVOL) = HW_AUDIOOUT_HPVOL__SELECT;
232 else
233 __REG_CLR(HW_AUDIOOUT_HPVOL) = HW_AUDIOOUT_HPVOL__SELECT;
234 /* reapply volume setting */ 218 /* reapply volume setting */
235 apply_volume(); 219 apply_volume();
236} 220}
diff --git a/firmware/target/arm/imx233/audioout-imx233.h b/firmware/target/arm/imx233/audioout-imx233.h
index fbc0827be2..20ff7737e1 100644
--- a/firmware/target/arm/imx233/audioout-imx233.h
+++ b/firmware/target/arm/imx233/audioout-imx233.h
@@ -25,102 +25,7 @@
25#include "cpu.h" 25#include "cpu.h"
26#include "system.h" 26#include "system.h"
27 27
28#define HW_AUDIOOUT_BASE 0x80048000 28#include "regs/regs-audioout.h"
29
30#define HW_AUDIOOUT_CTRL (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x0))
31#define HW_AUDIOOUT_CTRL__RUN (1 << 0)
32#define HW_AUDIOOUT_CTRL__FIFO_ERROR_IRQ_EN (1 << 1)
33#define HW_AUDIOOUT_CTRL__FIFO_OVERFLOW_IRQ (1 << 2)
34#define HW_AUDIOOUT_CTRL__FIFO_UNDERFLOW_IRQ (1 << 3)
35#define HW_AUDIOOUT_CTRL__WORD_LENGTH (1 << 6)
36#define HW_AUDIOOUT_CTRL__SS3D_EFFECT_BP 8
37#define HW_AUDIOOUT_CTRL__SS3D_EFFECT_BM (3 << 8)
38#define HW_AUDIOOUT_CTRL__SS3D_EFFECT_OFF (0 << 8)
39#define HW_AUDIOOUT_CTRL__SS3D_EFFECT_3 (1 << 8)
40#define HW_AUDIOOUT_CTRL__SS3D_EFFECT_4P5 (2 << 8)
41#define HW_AUDIOOUT_CTRL__SS3D_EFFECT_6 (3 << 8)
42#define HW_AUDIOOUT_CTRL__DMAWAIT_COUNT_BP 16
43#define HW_AUDIOOUT_CTRL__DMAWAIT_COUNT_BM (0x1f << 16)
44
45#define HW_AUDIOOUT_DACSRR (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x20))
46#define HW_AUDIOOUT_DACSRR__SRC_FRAC_BP 0
47#define HW_AUDIOOUT_DACSRR__SRC_FRAC_BM (0x1ff << 0)
48#define HW_AUDIOOUT_DACSRR__SRC_INT_BP 16
49#define HW_AUDIOOUT_DACSRR__SRC_INT_BM (0x1f << 16)
50#define HW_AUDIOOUT_DACSRR__SRC_HOLD_BP 24
51#define HW_AUDIOOUT_DACSRR__SRC_HOLD_BM (0x7 << 24)
52#define HW_AUDIOOUT_DACSRR__BASEMULT_BP 28
53#define HW_AUDIOOUT_DACSRR__BASEMULT_BM (0x7 << 28)
54#define HW_AUDIOOUT_DACSRR__OSR (1 << 31)
55
56#define HW_AUDIOOUT_DACVOLUME (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x30))
57#define HW_AUDIOOUT_DACVOLUME__VOLUME_RIGHT_BP 0
58#define HW_AUDIOOUT_DACVOLUME__VOLUME_RIGHT_BM 0xff
59#define HW_AUDIOOUT_DACVOLUME__MUTE_RIGHT (1 << 8)
60#define HW_AUDIOOUT_DACVOLUME__VOLUME_UPDATE_RIGHT (1 << 12)
61#define HW_AUDIOOUT_DACVOLUME__VOLUME_LEFT_BP 16
62#define HW_AUDIOOUT_DACVOLUME__VOLUME_LEFT_BM (0xff << 16)
63#define HW_AUDIOOUT_DACVOLUME__MUTE_LEFT (1 << 24)
64#define HW_AUDIOOUT_DACVOLUME__EN_ZCD (1 << 25)
65#define HW_AUDIOOUT_DACVOLUME__VOLUME_UPDATE_LEFT (1 << 28)
66
67#define HW_AUDIOOUT_DACDEBUG (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x40))
68#define HW_AUDIOOUT_DACDEBUG__FIFO_STATUS 1
69
70
71#define HW_AUDIOOUT_HPVOL (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x50))
72#define HW_AUDIOOUT_HPVOL__VOL_RIGHT_BP 0
73#define HW_AUDIOOUT_HPVOL__VOL_RIGHT_BM (0x7f << 0)
74#define HW_AUDIOOUT_HPVOL__VOL_LEFT_BP 8
75#define HW_AUDIOOUT_HPVOL__VOL_LEFT_BM (0x7f << 8)
76#define HW_AUDIOOUT_HPVOL__SELECT (1 << 16)
77#define HW_AUDIOOUT_HPVOL__MUTE (1 << 24)
78#define HW_AUDIOOUT_HPVOL__EN_MSTR_ZCD (1 << 25)
79
80#define HW_AUDIOOUT_PWRDN (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x70))
81#define HW_AUDIOOUT_PWRDN__HEADPHONE (1 << 0)
82#define HW_AUDIOOUT_PWRDN__CAPLESS (1 << 4)
83#define HW_AUDIOOUT_PWRDN__ADC (1 << 8)
84#define HW_AUDIOOUT_PWRDN__DAC (1 << 12)
85#define HW_AUDIOOUT_PWRDN__RIGHT_ADC (1 << 16)
86#define HW_AUDIOOUT_PWRDN__SPEAKER (1 << 24)
87
88#define HW_AUDIOOUT_REFCTRL (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x80))
89#define HW_AUDIOOUT_REFCTRL__BIAS_CTRL_BP 16
90#define HW_AUDIOOUT_REFCTRL__BIAS_CTRL_BM (3 << 16)
91#define HW_AUDIOOUT_REFCTRL__LOW_PWR (1 << 19)
92#define HW_AUDIOOUT_REFCTRL__VBG_ADJ_BP 20
93#define HW_AUDIOOUT_REFCTRL__VBG_ADJ_BM (3 << 20)
94#define HW_AUDIOOUT_REFCTRL__XTAL_BGR_BIAS (1 << 24)
95#define HW_AUDIOOUT_REFCTRL__RAISE_REF (1 << 25)
96
97#define HW_AUDIOOUT_ANACTRL (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x90))
98#define HW_AUDIOOUT_ANACTRL__HP_CLASSAB (1 << 4)
99#define HW_AUDIOOUT_ANACTRL__HP_HOLD_GND (1 << 5)
100#define HW_AUDIOOUT_ANACTRL__SHORTMODE_LR_BP 17
101#define HW_AUDIOOUT_ANACTRL__SHORTMODE_LR_BM (3 << 17)
102#define HW_AUDIOOUT_ANACTRL__SHORTMODE_CM_BP 20
103#define HW_AUDIOOUT_ANACTRL__SHORTMODE_CM_BM (3 << 20)
104#define HW_AUDIOOUT_ANACTRL__SHORT_LR_STS (1 << 24)
105#define HW_AUDIOOUT_ANACTRL__SHORT_CM_STS (1 << 28)
106
107#define HW_AUDIOOUT_TEST (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0xa0))
108#define HW_AUDIOOUT_TEST__HP_I1_ADJ_BM (3 << 22)
109#define HW_AUDIOOUT_TEST__HP_I1_ADJ_BP 22
110#define HW_AUDIOOUT_TEST__HP_I1_ADJ_NOMINAL (0 << 22)
111#define HW_AUDIOOUT_TEST__HP_I1_ADJ_M_50 (1 << 22)
112#define HW_AUDIOOUT_TEST__HP_I1_ADJ_P_100 (2 << 22)
113#define HW_AUDIOOUT_TEST__HP_I1_ADJ_P_50 (3 << 22)
114
115#define HW_AUDIOOUT_ANACLKCTRL (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0xe0))
116#define HW_AUDIOOUT_ANACLKCTRL__DACDIV_BP 0
117#define HW_AUDIOOUT_ANACLKCTRL__DACDIV_BM (7 << 0)
118#define HW_AUDIOOUT_ANACLKCTRL__CLKGATE (1 << 31)
119
120#define HW_AUDIOOUT_DATA (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0xf0))
121
122#define HW_AUDIOOUT_VERSION (*(volatile uint32_t *)(HW_AUDIOOUT_BASE + 0x200))
123
124 29
125void imx233_audioout_preinit(void); 30void imx233_audioout_preinit(void);
126void imx233_audioout_postinit(void); 31void imx233_audioout_postinit(void);