1 /*
2 * Copyright (c) 2019-2025 Allwinner Technology Co., Ltd. ALL rights reserved.
3 *
4 * Allwinner is a trademark of Allwinner Technology Co.,Ltd., registered in
5 * the the people's Republic of China and other countries.
6 * All Allwinner Technology Co.,Ltd. trademarks are used with permission.
7 *
8 * DISCLAIMER
9 * THIRD PARTY LICENCES MAY BE REQUIRED TO IMPLEMENT THE SOLUTION/PRODUCT.
10 * IF YOU NEED TO INTEGRATE THIRD PARTY’S TECHNOLOGY (SONY, DTS, DOLBY, AVS OR MPEGLA, ETC.)
11 * IN ALLWINNERS’SDK OR PRODUCTS, YOU SHALL BE SOLELY RESPONSIBLE TO OBTAIN
12 * ALL APPROPRIATELY REQUIRED THIRD PARTY LICENCES.
13 * ALLWINNER SHALL HAVE NO WARRANTY, INDEMNITY OR OTHER OBLIGATIONS WITH RESPECT TO MATTERS
14 * COVERED UNDER ANY REQUIRED THIRD PARTY LICENSE.
15 * YOU ARE SOLELY RESPONSIBLE FOR YOUR USAGE OF THIRD PARTY’S TECHNOLOGY.
16 *
17 *
18 * THIS SOFTWARE IS PROVIDED BY ALLWINNER"AS IS" AND TO THE MAXIMUM EXTENT
19 * PERMITTED BY LAW, ALLWINNER EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND,
20 * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION REGARDING
21 * THE TITLE, NON-INFRINGEMENT, ACCURACY, CONDITION, COMPLETENESS, PERFORMANCE
22 * OR MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
23 * IN NO EVENT SHALL ALLWINNER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26 * LOSS OF USE, DATA, OR PROFITS, OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
30 * OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32 #ifndef _SUN8IW20_CODEC_H
33 #define _SUN8IW20_CODEC_H
34 
35 #define SUNXI_CODEC_BASE_ADDR   (0x02030000ul)
36 #define SUNXI_CODEC_IRQ                41
37 #define SUNXI_CODEC_JACK_DET   GPIOE(9)
38 
39 #define SUNXI_DAC_DPC       0x00
40 #define SUNXI_DAC_VOL_CTL   0x04
41 #define SUNXI_DAC_FIFOC     0x10
42 #define SUNXI_DAC_FIFOS     0x14
43 #define SUNXI_DAC_TXDATA    0X20
44 #define SUNXI_DAC_CNT       0x24
45 #define SUNXI_DAC_DG        0x28
46 
47 #define SUNXI_ADC_FIFOC     0x30
48 #define SUNXI_ADC_VOL_CTL1  0x34
49 #define SUNXI_ADC_FIFOS     0x38
50 #define SUNXI_ADC_RXDATA    0x40
51 #define SUNXI_ADC_CNT       0x44
52 #define SUNXI_ADC_DG        0x4C
53 #define SUNXI_ADC_DIG_CTL   0x50
54 
55 #define SUNXI_DAC_DAP_CTL   0xF0
56 #define SUNXI_ADC_DAP_CTL   0xF8
57 
58 #define SUNXI_DAC_DRC_HHPFC 0x100
59 #define SUNXI_DAC_DRC_LHPFC 0x104
60 #define SUNXI_DAC_DRC_CTRL  0x108
61 #define SUNXI_DAC_DRC_LPFHAT    0x10C
62 #define SUNXI_DAC_DRC_LPFLAT    0x110
63 #define SUNXI_DAC_DRC_RPFHAT    0x114
64 #define SUNXI_DAC_DRC_RPFLAT    0x118
65 #define SUNXI_DAC_DRC_LPFHRT    0x11C
66 #define SUNXI_DAC_DRC_LPFLRT    0x120
67 #define SUNXI_DAC_DRC_RPFHRT    0x124
68 #define SUNXI_DAC_DRC_RPFLRT    0x128
69 #define SUNXI_DAC_DRC_LRMSHAT   0x12C
70 #define SUNXI_DAC_DRC_LRMSLAT   0x130
71 #define SUNXI_DAC_DRC_RRMSHAT   0x134
72 #define SUNXI_DAC_DRC_RRMSLAT   0x138
73 #define SUNXI_DAC_DRC_HCT   0x13C
74 #define SUNXI_DAC_DRC_LCT   0x140
75 #define SUNXI_DAC_DRC_HKC   0x144
76 #define SUNXI_DAC_DRC_LKC   0x148
77 #define SUNXI_DAC_DRC_HOPC  0x14C
78 #define SUNXI_DAC_DRC_LOPC  0x150
79 #define SUNXI_DAC_DRC_HLT   0x154
80 #define SUNXI_DAC_DRC_LLT   0x158
81 #define SUNXI_DAC_DRC_HKI   0x15C
82 #define SUNXI_DAC_DRC_LKI   0x160
83 #define SUNXI_DAC_DRC_HOPL  0x164
84 #define SUNXI_DAC_DRC_LOPL  0x168
85 #define SUNXI_DAC_DRC_HET   0x16C
86 #define SUNXI_DAC_DRC_LET   0x170
87 #define SUNXI_DAC_DRC_HKE   0x174
88 #define SUNXI_DAC_DRC_LKE   0x178
89 #define SUNXI_DAC_DRC_HOPE  0x17C
90 #define SUNXI_DAC_DRC_LOPE  0x180
91 #define SUNXI_DAC_DRC_HKN   0x184
92 #define SUNXI_DAC_DRC_LKN   0x188
93 #define SUNXI_DAC_DRC_SFHAT 0x18C
94 #define SUNXI_DAC_DRC_SFLAT 0x190
95 #define SUNXI_DAC_DRC_SFHRT 0x194
96 #define SUNXI_DAC_DRC_SFLRT 0x198
97 #define SUNXI_DAC_DRC_MXGHS 0x19C
98 #define SUNXI_DAC_DRC_MXGLS 0x1A0
99 #define SUNXI_DAC_DRC_MNGHS 0x1A4
100 #define SUNXI_DAC_DRC_MNGLS 0x1A8
101 #define SUNXI_DAC_DRC_EPSHC 0x1AC
102 #define SUNXI_DAC_DRC_EPSLC 0x1B0
103 #define SUNXI_DAC_DRC_OPT   0x1B4
104 #define SUNXI_DAC_DRC_HPFHGAIN  0x1B8
105 #define SUNXI_DAC_DRC_HPFLGAIN  0x1BC
106 
107 #define SUNXI_ADC_DRC_HHPFC 0x200
108 #define SUNXI_ADC_DRC_LHPFC 0x204
109 #define SUNXI_ADC_DRC_CTRL  0x208
110 #define SUNXI_ADC_DRC_LPFHAT    0x20C
111 #define SUNXI_ADC_DRC_LPFLAT    0x210
112 #define SUNXI_ADC_DRC_RPFHAT    0x214
113 #define SUNXI_ADC_DRC_RPFLAT    0x218
114 #define SUNXI_ADC_DRC_LPFHRT    0x21C
115 #define SUNXI_ADC_DRC_LPFLRT    0x220
116 #define SUNXI_ADC_DRC_RPFHRT    0x224
117 #define SUNXI_ADC_DRC_RPFLRT    0x228
118 #define SUNXI_ADC_DRC_LRMSHAT   0x22C
119 #define SUNXI_ADC_DRC_LRMSLAT   0x230
120 #define SUNXI_ADC_DRC_HCT   0x23C
121 #define SUNXI_ADC_DRC_LCT   0x240
122 #define SUNXI_ADC_DRC_HKC   0x244
123 #define SUNXI_ADC_DRC_LKC   0x248
124 #define SUNXI_ADC_DRC_HOPC  0x24C
125 #define SUNXI_ADC_DRC_LOPC  0x250
126 #define SUNXI_ADC_DRC_HLT   0x254
127 #define SUNXI_ADC_DRC_LLT   0x258
128 #define SUNXI_ADC_DRC_HKI   0x25C
129 #define SUNXI_ADC_DRC_LKI   0x260
130 #define SUNXI_ADC_DRC_HOPL  0x264
131 #define SUNXI_ADC_DRC_LOPL  0x268
132 #define SUNXI_ADC_DRC_HET   0x26C
133 #define SUNXI_ADC_DRC_LET   0x270
134 #define SUNXI_ADC_DRC_HKE   0x274
135 #define SUNXI_ADC_DRC_LKE   0x278
136 #define SUNXI_ADC_DRC_HOPE  0x27C
137 #define SUNXI_ADC_DRC_LOPE  0x280
138 #define SUNXI_ADC_DRC_HKN   0x284
139 #define SUNXI_ADC_DRC_LKN   0x288
140 #define SUNXI_ADC_DRC_SFHAT 0x28C
141 #define SUNXI_ADC_DRC_SFLAT 0x290
142 #define SUNXI_ADC_DRC_SFHRT 0x294
143 #define SUNXI_ADC_DRC_SFLRT 0x298
144 #define SUNXI_ADC_DRC_MXGHS 0x29C
145 #define SUNXI_ADC_DRC_MXGLS 0x2A0
146 #define SUNXI_ADC_DRC_MNGHS 0x2A4
147 #define SUNXI_ADC_DRC_MNGLS 0x2A8
148 #define SUNXI_ADC_DRC_EPSHC 0x2AC
149 #define SUNXI_ADC_DRC_EPSLC 0x2B0
150 #define SUNXI_ADC_DRC_OPT   0x2B4
151 #define SUNXI_ADC_DRC_HPFHGAIN  0x2B8
152 #define SUNXI_ADC_DRC_HPFLGAIN  0x2BC
153 
154 #define SUNXI_AC_VERSION    0x2C0
155 /* Analog register */
156 #define SUNXI_ADCL_REG      0x300
157 #define SUNXI_ADCR_REG      0x304
158 #define SUNXI_DAC_REG       0x310
159 #define SUNXI_MICBIAS_REG   0x318
160 #define SUNXI_BIAS_REG      0x320
161 #define SUNXI_HEADPHONE_REG 0x324
162 #define SUNXI_HMIC_CTRL     0x328
163 #define SUNXI_HMIC_STS      0x32c
164 
165 /* Analog register base - Digital register base */
166 /*SUNXI_PR_CFG is to tear the acreg and dcreg, it is of no real meaning*/
167 #define SUNXI_PR_CFG        (0x300)
168 #define SUNXI_ADC1_ANA_CTL  (SUNXI_PR_CFG + 0x00)
169 #define SUNXI_ADC2_ANA_CTL  (SUNXI_PR_CFG + 0x04)
170 #define SUNXI_ADC3_ANA_CTL  (SUNXI_PR_CFG + 0x08)
171 #define SUNXI_DAC_ANA_CTL   (SUNXI_PR_CFG + 0x10)
172 #define SUNXI_MICBIAS_ANA_CTL   (SUNXI_PR_CFG + 0x18)
173 #define SUNXI_RAMP_ANA_CTL  (SUNXI_PR_CFG + 0x1c)
174 #define SUNXI_BIAS_ANA_CTL  (SUNXI_PR_CFG + 0x20)
175 #define SUNXI_HP_ANA_CTL    (SUNXI_PR_CFG + 0x40)
176 #define SUNXI_POWER_ANA_CTL (SUNXI_PR_CFG + 0x48)
177 
178 /* SUNXI_DAC_DPC:0x00 */
179 #define EN_DAC          31
180 #define MODQU           25
181 #define DWA_EN          24
182 #define HPF_EN          18
183 #define DVOL            12
184 #define DAC_HUB_EN      0
185 
186 /* SUNXI_DAC_VOL_CTL:0x04 */
187 #define DAC_VOL_SEL     16
188 #define DAC_VOL_L       8
189 #define DAC_VOL_R       0
190 
191 /* SUNXI_DAC_FIFOC:0x10 */
192 #define DAC_FS          29
193 #define FIR_VER         28
194 #define SEND_LASAT      26
195 #define FIFO_MODE       24
196 #define DAC_DRQ_CLR_CNT     21
197 #define TX_TRIG_LEVEL       8
198 #define DAC_MONO_EN     6
199 #define TX_SAMPLE_BITS      5
200 #define DAC_DRQ_EN      4
201 #define DAC_IRQ_EN      3
202 #define FIFO_UNDERRUN_IRQ_EN    2
203 #define FIFO_OVERRUN_IRQ_EN 1
204 #define FIFO_FLUSH      0
205 
206 /* SUNXI_DAC_FIFOS:0x14 */
207 #define TX_EMPTY        23
208 #define DAC_TXE_CNT     8
209 #define DAC_TXE_INT     3
210 #define DAC_TXU_INT     2
211 #define DAC_TXO_INT     1
212 
213 /* SUNXI_DAC_DG:0x28 */
214 #define DAC_MODU_SEL        11
215 #define DAC_PATTERN_SEL     9
216 #define DAC_CODEC_CLK_SEL   8
217 #define DAC_SWP         6
218 #define ADDA_LOOP_MODE      0
219 
220 /* SUNXI_ADC_FIFOC:0x30 */
221 #define ADC_FS          29
222 #define EN_AD           28
223 #define ADCFDT          26
224 #define ADCDFEN         25
225 #define RX_FIFO_MODE        24
226 #define RX_SAMPLE_BITS      16
227 #define RX_FIFO_TRG_LEVEL   4
228 #define ADC_DRQ_EN      3
229 #define ADC_IRQ_EN      2
230 #define ADC_OVERRUN_IRQ_EN  1
231 #define ADC_FIFO_FLUSH      0
232 
233 /* SUNXI_ADC_VOL_CTL1:0x34 */
234 #define ADC3_VOL        16
235 #define ADC2_VOL        8
236 #define ADC1_VOL        0
237 
238 /* SUNXI_ADC_FIFOS:0x38 */
239 #define RXA         23
240 #define ADC_RXA_CNT     8
241 #define ADC_RXA_INT     3
242 #define ADC_RXO_INT     1
243 
244 /* SUNXI_ADC_DG:0x4C */
245 #define AD_SWP          24
246 
247 /* SUNXI_ADC_DIG_CTL:0x50 */
248 #define ADC3_VOL_EN 17
249 #define ADC1_2_VOL_EN   16
250 #define ADC_CHANNEL_EN  0
251 
252 /* SUNXI_DAC_DAP_CTL:0xf0 */
253 #define DDAP_EN         31
254 #define DDAP_DRC_EN     29
255 #define DDAP_HPF_EN     28
256 
257 /* SUNXI_ADC_DAP_CTL:0xf8 */
258 #define ADC_DAP0_EN     31
259 #define ADC_DRC0_EN     29
260 #define ADC_HPF0_EN     28
261 #define ADC_DAP1_EN     27
262 #define ADC_DRC1_EN     25
263 #define ADC_HPF1_EN     24
264 
265 /* SUNXI_DAC_DRC_HHPFC : 0x100*/
266 #define DAC_HHPF_CONF       0
267 
268 /* SUNXI_DAC_DRC_LHPFC : 0x104*/
269 #define DAC_LHPF_CONF       0
270 
271 /* SUNXI_DAC_DRC_CTRL : 0x108*/
272 #define DAC_DRC_DELAY_OUT_STATE 15
273 #define DAC_DRC_SIGNAL_DELAY    8
274 #define DAC_DRC_DELAY_BUF_EN    7
275 #define DAC_DRC_GAIN_MAX_EN 6
276 #define DAC_DRC_GAIN_MIN_EN 5
277 #define DAC_DRC_NOISE_DET_EN    4
278 #define DAC_DRC_SIGNAL_SEL  3
279 #define DAC_DRC_DELAY_EN    2
280 #define DAC_DRC_LT_EN       1
281 #define DAC_DRC_ET_EN       0
282 
283 /* SUNXI_ADC_DRC_HHPFC : 0x200*/
284 #define ADC_HHPF_CONF       0
285 
286 /* SUNXI_ADC_DRC_LHPFC : 0x204*/
287 #define ADC_LHPF_CONF       0
288 
289 /* SUNXI_ADC_DRC_CTRL : 0x208*/
290 #define ADC_DRC_DELAY_OUT_STATE 15
291 #define ADC_DRC_SIGNAL_DELAY    8
292 #define ADC_DRC_DELAY_BUF_EN    7
293 #define ADC_DRC_GAIN_MAX_EN 6
294 #define ADC_DRC_GAIN_MIN_EN 5
295 #define ADC_DRC_NOISE_DET_EN    4
296 #define ADC_DRC_SIGNAL_SEL  3
297 #define ADC_DRC_DELAY_EN    2
298 #define ADC_DRC_LT_EN       1
299 #define ADC_DRC_ER_EN       0
300 
301 /* SUNXI_ADC1_ANA_CTL:0x300 */
302 /* SUNXI_ADC2_ANA_CTL:0x304 */
303 /* SUNXI_ADC3_ANA_CTL:0x308 */
304 #define ADC_EN          (31)
305 #define MIC_PGA_EN      (30)
306 #define ADC_DITHER_CTL      (29)
307 #define MIC_SIN_EN      (28)
308 #define FMINL_EN        (27)
309 #define FMINR_EN        (27)
310 #define FMINL_GAIN      (26)
311 #define FMINR_GAIN      (26)
312 #define LIENINL_EN      (23)
313 #define LIENINR_EN      (23)
314 #define LIENINL_GAIN        (22)
315 #define LIENINR_GAIN        (22)
316 #define ADC_PGA_CTL_RCM     (18)
317 #define ADC_PGA_IN_VCM_CTL  (16)
318 #define IOPADC          (14)
319 #define ADC_PGA_GAIN_CTL    (8)
320 #define ADC_IOPAAF      (6)
321 #define ADC_IOPSDM1     (4)
322 #define ADC_IOPSDM2     (2)
323 #define ADC_IOPMIC      (0)
324 
325 /* SUNXI_DAC_ANA_CTL: SUNXI_PR_CFG + 0x10 */
326 #define CURRENT_TEST_SELECT 23
327 #define VRA2_IOPVRS     20
328 #define ILINEOUTAMPS        18
329 #define IOPDACS         16
330 #define DACLEN          15
331 #define DACREN          14
332 #define LINEOUTL_EN     13
333 #define DACLMUTE        12
334 #define LINEOUTR_EN     11
335 #define DACRMUTE        10
336 #define LINEOUTLDIFFEN      6
337 #define LINEOUTRDIFFEN      5
338 #define LINEOUT_VOL     0
339 
340 /* SUNXI_MICBIAS_ANA_CTL: SUNXI_PR_CFG + 0x18 */
341 #define MICADCEN        20
342 #define MMICBIASEN      7
343 #define MBIASSEL        5
344 #define MMICBIAS_CHOP_EN    4
345 #define MMICBIAS_CHOP_CLK_SEL   2
346 
347 /* SUNXI_RAMP_ANA_CTL: SUNXI_PR_CFG + 0x1c */
348 #define RMCEN           1
349 
350 /* SUNXI_BIAS_ANA_CTL: SUNXI_PR_CFG + 0x20 */
351 #define AC_BIASDATA     0
352 
353 /* SUNXI_HP_ANA_CTL: SUNXI_PR_CFG + 0x40 */
354 #define HPFB_BUF_EN     31
355 #define HP_GAIN         28
356 #define HP_DRVEN        21
357 #define HP_DRVOUTEN     20
358 #define RSWITCH         19
359 #define RAMPEN          18
360 #define HPFB_IN_EN      17
361 #define RAMP_FINAL_CTL      16
362 #define RAMP_OUT_EN     15
363 
364 /* SUNXI_POWER_ANA_CTL: SUNXI_PR_CFG + 0x48 */
365 #define HPLDO_EN        30
366 #define BG_TRIM         0
367 
368 #define CODEC_REG_LABEL(constant)   {#constant, constant, 0}
369 #define CODEC_REG_LABEL_END     {NULL, 0, 0}
370 
371 /* SUNXI_CODEC_DAP_ENABLE: Whether to use the adc/dac drc/hpf function */
372 #define SUNXI_CODEC_DAP_ENABLE
373 
374 #endif /* __SUN8IW20_CODEC_H */
375