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