diff options
-rw-r--r-- | firmware/target/arm/imx233/audioout-imx233.c | 102 | ||||
-rw-r--r-- | firmware/target/arm/imx233/audioout-imx233.h | 97 |
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 | ||
26 | static int hp_vol_l, hp_vol_r; | 26 | static int hp_vol_l, hp_vol_r; |
27 | static bool input_line1; | ||
27 | static struct timeout hp_unmute_oneshort; | 28 | static struct timeout hp_unmute_oneshort; |
28 | 29 | ||
29 | static int hp_unmute_cb(struct timeout *tmo) | 30 | static 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) | |||
86 | void imx233_audioout_close(void) | 83 | void 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 */ |
126 | static void set_hp_vol(int vol_l, int vol_r) | 120 | static 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 | ||
144 | static void apply_volume(void) | 135 | static 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 */ |
228 | void imx233_audioout_select_hp_input(bool line1) | 215 | void 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 | ||
125 | void imx233_audioout_preinit(void); | 30 | void imx233_audioout_preinit(void); |
126 | void imx233_audioout_postinit(void); | 31 | void imx233_audioout_postinit(void); |