1997b0520SBard Liao /* 2997b0520SBard Liao * rt5640.h -- RT5640 ALSA SoC audio driver 3997b0520SBard Liao * 4997b0520SBard Liao * Copyright 2011 Realtek Microelectronics 5997b0520SBard Liao * Author: Johnny Hsu <johnnyhsu@realtek.com> 6997b0520SBard Liao * 7997b0520SBard Liao * This program is free software; you can redistribute it and/or modify 8997b0520SBard Liao * it under the terms of the GNU General Public License version 2 as 9997b0520SBard Liao * published by the Free Software Foundation. 10997b0520SBard Liao */ 11997b0520SBard Liao 12997b0520SBard Liao #ifndef _RT5640_H 13997b0520SBard Liao #define _RT5640_H 14997b0520SBard Liao 15997b0520SBard Liao #include <sound/rt5640.h> 16997b0520SBard Liao 17997b0520SBard Liao /* Info */ 18997b0520SBard Liao #define RT5640_RESET 0x00 19997b0520SBard Liao #define RT5640_VENDOR_ID 0xfd 20997b0520SBard Liao #define RT5640_VENDOR_ID1 0xfe 21997b0520SBard Liao #define RT5640_VENDOR_ID2 0xff 22997b0520SBard Liao /* I/O - Output */ 23997b0520SBard Liao #define RT5640_SPK_VOL 0x01 24997b0520SBard Liao #define RT5640_HP_VOL 0x02 25997b0520SBard Liao #define RT5640_OUTPUT 0x03 26997b0520SBard Liao #define RT5640_MONO_OUT 0x04 27997b0520SBard Liao /* I/O - Input */ 28997b0520SBard Liao #define RT5640_IN1_IN2 0x0d 29997b0520SBard Liao #define RT5640_IN3_IN4 0x0e 30997b0520SBard Liao #define RT5640_INL_INR_VOL 0x0f 31997b0520SBard Liao /* I/O - ADC/DAC/DMIC */ 32997b0520SBard Liao #define RT5640_DAC1_DIG_VOL 0x19 33997b0520SBard Liao #define RT5640_DAC2_DIG_VOL 0x1a 34997b0520SBard Liao #define RT5640_DAC2_CTRL 0x1b 35997b0520SBard Liao #define RT5640_ADC_DIG_VOL 0x1c 36997b0520SBard Liao #define RT5640_ADC_DATA 0x1d 37997b0520SBard Liao #define RT5640_ADC_BST_VOL 0x1e 38997b0520SBard Liao /* Mixer - D-D */ 39997b0520SBard Liao #define RT5640_STO_ADC_MIXER 0x27 40997b0520SBard Liao #define RT5640_MONO_ADC_MIXER 0x28 41997b0520SBard Liao #define RT5640_AD_DA_MIXER 0x29 42997b0520SBard Liao #define RT5640_STO_DAC_MIXER 0x2a 43997b0520SBard Liao #define RT5640_MONO_DAC_MIXER 0x2b 44997b0520SBard Liao #define RT5640_DIG_MIXER 0x2c 45997b0520SBard Liao #define RT5640_DSP_PATH1 0x2d 46997b0520SBard Liao #define RT5640_DSP_PATH2 0x2e 47997b0520SBard Liao #define RT5640_DIG_INF_DATA 0x2f 48997b0520SBard Liao /* Mixer - ADC */ 49997b0520SBard Liao #define RT5640_REC_L1_MIXER 0x3b 50997b0520SBard Liao #define RT5640_REC_L2_MIXER 0x3c 51997b0520SBard Liao #define RT5640_REC_R1_MIXER 0x3d 52997b0520SBard Liao #define RT5640_REC_R2_MIXER 0x3e 53997b0520SBard Liao /* Mixer - DAC */ 54997b0520SBard Liao #define RT5640_HPO_MIXER 0x45 55997b0520SBard Liao #define RT5640_SPK_L_MIXER 0x46 56997b0520SBard Liao #define RT5640_SPK_R_MIXER 0x47 57997b0520SBard Liao #define RT5640_SPO_L_MIXER 0x48 58997b0520SBard Liao #define RT5640_SPO_R_MIXER 0x49 59997b0520SBard Liao #define RT5640_SPO_CLSD_RATIO 0x4a 60997b0520SBard Liao #define RT5640_MONO_MIXER 0x4c 61997b0520SBard Liao #define RT5640_OUT_L1_MIXER 0x4d 62997b0520SBard Liao #define RT5640_OUT_L2_MIXER 0x4e 63997b0520SBard Liao #define RT5640_OUT_L3_MIXER 0x4f 64997b0520SBard Liao #define RT5640_OUT_R1_MIXER 0x50 65997b0520SBard Liao #define RT5640_OUT_R2_MIXER 0x51 66997b0520SBard Liao #define RT5640_OUT_R3_MIXER 0x52 67997b0520SBard Liao #define RT5640_LOUT_MIXER 0x53 68997b0520SBard Liao /* Power */ 69997b0520SBard Liao #define RT5640_PWR_DIG1 0x61 70997b0520SBard Liao #define RT5640_PWR_DIG2 0x62 71997b0520SBard Liao #define RT5640_PWR_ANLG1 0x63 72997b0520SBard Liao #define RT5640_PWR_ANLG2 0x64 73997b0520SBard Liao #define RT5640_PWR_MIXER 0x65 74997b0520SBard Liao #define RT5640_PWR_VOL 0x66 75997b0520SBard Liao /* Private Register Control */ 76997b0520SBard Liao #define RT5640_PRIV_INDEX 0x6a 77997b0520SBard Liao #define RT5640_PRIV_DATA 0x6c 78997b0520SBard Liao /* Format - ADC/DAC */ 79997b0520SBard Liao #define RT5640_I2S1_SDP 0x70 80997b0520SBard Liao #define RT5640_I2S2_SDP 0x71 81997b0520SBard Liao #define RT5640_ADDA_CLK1 0x73 82997b0520SBard Liao #define RT5640_ADDA_CLK2 0x74 83997b0520SBard Liao #define RT5640_DMIC 0x75 84997b0520SBard Liao /* Function - Analog */ 85997b0520SBard Liao #define RT5640_GLB_CLK 0x80 86997b0520SBard Liao #define RT5640_PLL_CTRL1 0x81 87997b0520SBard Liao #define RT5640_PLL_CTRL2 0x82 88997b0520SBard Liao #define RT5640_ASRC_1 0x83 89997b0520SBard Liao #define RT5640_ASRC_2 0x84 90997b0520SBard Liao #define RT5640_ASRC_3 0x85 91997b0520SBard Liao #define RT5640_ASRC_4 0x89 92997b0520SBard Liao #define RT5640_ASRC_5 0x8a 93997b0520SBard Liao #define RT5640_HP_OVCD 0x8b 94997b0520SBard Liao #define RT5640_CLS_D_OVCD 0x8c 95997b0520SBard Liao #define RT5640_CLS_D_OUT 0x8d 96997b0520SBard Liao #define RT5640_DEPOP_M1 0x8e 97997b0520SBard Liao #define RT5640_DEPOP_M2 0x8f 98997b0520SBard Liao #define RT5640_DEPOP_M3 0x90 99997b0520SBard Liao #define RT5640_CHARGE_PUMP 0x91 100997b0520SBard Liao #define RT5640_PV_DET_SPK_G 0x92 101997b0520SBard Liao #define RT5640_MICBIAS 0x93 102997b0520SBard Liao /* Function - Digital */ 103997b0520SBard Liao #define RT5640_EQ_CTRL1 0xb0 104997b0520SBard Liao #define RT5640_EQ_CTRL2 0xb1 105997b0520SBard Liao #define RT5640_WIND_FILTER 0xb2 106997b0520SBard Liao #define RT5640_DRC_AGC_1 0xb4 107997b0520SBard Liao #define RT5640_DRC_AGC_2 0xb5 108997b0520SBard Liao #define RT5640_DRC_AGC_3 0xb6 109997b0520SBard Liao #define RT5640_SVOL_ZC 0xb7 110997b0520SBard Liao #define RT5640_ANC_CTRL1 0xb8 111997b0520SBard Liao #define RT5640_ANC_CTRL2 0xb9 112997b0520SBard Liao #define RT5640_ANC_CTRL3 0xba 113997b0520SBard Liao #define RT5640_JD_CTRL 0xbb 114997b0520SBard Liao #define RT5640_ANC_JD 0xbc 115997b0520SBard Liao #define RT5640_IRQ_CTRL1 0xbd 116997b0520SBard Liao #define RT5640_IRQ_CTRL2 0xbe 117997b0520SBard Liao #define RT5640_INT_IRQ_ST 0xbf 118997b0520SBard Liao #define RT5640_GPIO_CTRL1 0xc0 119997b0520SBard Liao #define RT5640_GPIO_CTRL2 0xc1 120997b0520SBard Liao #define RT5640_GPIO_CTRL3 0xc2 121997b0520SBard Liao #define RT5640_DSP_CTRL1 0xc4 122997b0520SBard Liao #define RT5640_DSP_CTRL2 0xc5 123997b0520SBard Liao #define RT5640_DSP_CTRL3 0xc6 124997b0520SBard Liao #define RT5640_DSP_CTRL4 0xc7 125997b0520SBard Liao #define RT5640_PGM_REG_ARR1 0xc8 126997b0520SBard Liao #define RT5640_PGM_REG_ARR2 0xc9 127997b0520SBard Liao #define RT5640_PGM_REG_ARR3 0xca 128997b0520SBard Liao #define RT5640_PGM_REG_ARR4 0xcb 129997b0520SBard Liao #define RT5640_PGM_REG_ARR5 0xcc 130997b0520SBard Liao #define RT5640_SCB_FUNC 0xcd 131997b0520SBard Liao #define RT5640_SCB_CTRL 0xce 132997b0520SBard Liao #define RT5640_BASE_BACK 0xcf 133997b0520SBard Liao #define RT5640_MP3_PLUS1 0xd0 134997b0520SBard Liao #define RT5640_MP3_PLUS2 0xd1 135997b0520SBard Liao #define RT5640_3D_HP 0xd2 136997b0520SBard Liao #define RT5640_ADJ_HPF 0xd3 137997b0520SBard Liao #define RT5640_HP_CALIB_AMP_DET 0xd6 138997b0520SBard Liao #define RT5640_HP_CALIB2 0xd7 139997b0520SBard Liao #define RT5640_SV_ZCD1 0xd9 140997b0520SBard Liao #define RT5640_SV_ZCD2 0xda 141997b0520SBard Liao /* Dummy Register */ 142997b0520SBard Liao #define RT5640_DUMMY1 0xfa 143997b0520SBard Liao #define RT5640_DUMMY2 0xfb 144997b0520SBard Liao #define RT5640_DUMMY3 0xfc 145997b0520SBard Liao 146997b0520SBard Liao 147997b0520SBard Liao /* Index of Codec Private Register definition */ 148*246693baSBard Liao #define RT5640_CHPUMP_INT_REG1 0x24 149*246693baSBard Liao #define RT5640_MAMP_INT_REG2 0x37 150997b0520SBard Liao #define RT5640_3D_SPK 0x63 151997b0520SBard Liao #define RT5640_WND_1 0x6c 152997b0520SBard Liao #define RT5640_WND_2 0x6d 153997b0520SBard Liao #define RT5640_WND_3 0x6e 154997b0520SBard Liao #define RT5640_WND_4 0x6f 155997b0520SBard Liao #define RT5640_WND_5 0x70 156997b0520SBard Liao #define RT5640_WND_8 0x73 157997b0520SBard Liao #define RT5640_DIP_SPK_INF 0x75 158*246693baSBard Liao #define RT5640_HP_DCC_INT1 0x77 159997b0520SBard Liao #define RT5640_EQ_BW_LOP 0xa0 160997b0520SBard Liao #define RT5640_EQ_GN_LOP 0xa1 161997b0520SBard Liao #define RT5640_EQ_FC_BP1 0xa2 162997b0520SBard Liao #define RT5640_EQ_BW_BP1 0xa3 163997b0520SBard Liao #define RT5640_EQ_GN_BP1 0xa4 164997b0520SBard Liao #define RT5640_EQ_FC_BP2 0xa5 165997b0520SBard Liao #define RT5640_EQ_BW_BP2 0xa6 166997b0520SBard Liao #define RT5640_EQ_GN_BP2 0xa7 167997b0520SBard Liao #define RT5640_EQ_FC_BP3 0xa8 168997b0520SBard Liao #define RT5640_EQ_BW_BP3 0xa9 169997b0520SBard Liao #define RT5640_EQ_GN_BP3 0xaa 170997b0520SBard Liao #define RT5640_EQ_FC_BP4 0xab 171997b0520SBard Liao #define RT5640_EQ_BW_BP4 0xac 172997b0520SBard Liao #define RT5640_EQ_GN_BP4 0xad 173997b0520SBard Liao #define RT5640_EQ_FC_HIP1 0xae 174997b0520SBard Liao #define RT5640_EQ_GN_HIP1 0xaf 175997b0520SBard Liao #define RT5640_EQ_FC_HIP2 0xb0 176997b0520SBard Liao #define RT5640_EQ_BW_HIP2 0xb1 177997b0520SBard Liao #define RT5640_EQ_GN_HIP2 0xb2 178997b0520SBard Liao #define RT5640_EQ_PRE_VOL 0xb3 179997b0520SBard Liao #define RT5640_EQ_PST_VOL 0xb4 180997b0520SBard Liao 181997b0520SBard Liao /* global definition */ 182997b0520SBard Liao #define RT5640_L_MUTE (0x1 << 15) 183997b0520SBard Liao #define RT5640_L_MUTE_SFT 15 184997b0520SBard Liao #define RT5640_VOL_L_MUTE (0x1 << 14) 185997b0520SBard Liao #define RT5640_VOL_L_SFT 14 186997b0520SBard Liao #define RT5640_R_MUTE (0x1 << 7) 187997b0520SBard Liao #define RT5640_R_MUTE_SFT 7 188997b0520SBard Liao #define RT5640_VOL_R_MUTE (0x1 << 6) 189997b0520SBard Liao #define RT5640_VOL_R_SFT 6 190997b0520SBard Liao #define RT5640_L_VOL_MASK (0x3f << 8) 191997b0520SBard Liao #define RT5640_L_VOL_SFT 8 192997b0520SBard Liao #define RT5640_R_VOL_MASK (0x3f) 193997b0520SBard Liao #define RT5640_R_VOL_SFT 0 194997b0520SBard Liao 195997b0520SBard Liao /* IN1 and IN2 Control (0x0d) */ 196997b0520SBard Liao /* IN3 and IN4 Control (0x0e) */ 197997b0520SBard Liao #define RT5640_BST_SFT1 12 198997b0520SBard Liao #define RT5640_BST_SFT2 8 199997b0520SBard Liao #define RT5640_IN_DF1 (0x1 << 7) 200997b0520SBard Liao #define RT5640_IN_SFT1 7 201997b0520SBard Liao #define RT5640_IN_DF2 (0x1 << 6) 202997b0520SBard Liao #define RT5640_IN_SFT2 6 203997b0520SBard Liao 204997b0520SBard Liao /* INL and INR Volume Control (0x0f) */ 205997b0520SBard Liao #define RT5640_INL_SEL_MASK (0x1 << 15) 206997b0520SBard Liao #define RT5640_INL_SEL_SFT 15 207997b0520SBard Liao #define RT5640_INL_SEL_IN4P (0x0 << 15) 208997b0520SBard Liao #define RT5640_INL_SEL_MONOP (0x1 << 15) 209997b0520SBard Liao #define RT5640_INL_VOL_MASK (0x1f << 8) 210997b0520SBard Liao #define RT5640_INL_VOL_SFT 8 211997b0520SBard Liao #define RT5640_INR_SEL_MASK (0x1 << 7) 212997b0520SBard Liao #define RT5640_INR_SEL_SFT 7 213997b0520SBard Liao #define RT5640_INR_SEL_IN4N (0x0 << 7) 214997b0520SBard Liao #define RT5640_INR_SEL_MONON (0x1 << 7) 215997b0520SBard Liao #define RT5640_INR_VOL_MASK (0x1f) 216997b0520SBard Liao #define RT5640_INR_VOL_SFT 0 217997b0520SBard Liao 218997b0520SBard Liao /* DAC1 Digital Volume (0x19) */ 219997b0520SBard Liao #define RT5640_DAC_L1_VOL_MASK (0xff << 8) 220997b0520SBard Liao #define RT5640_DAC_L1_VOL_SFT 8 221997b0520SBard Liao #define RT5640_DAC_R1_VOL_MASK (0xff) 222997b0520SBard Liao #define RT5640_DAC_R1_VOL_SFT 0 223997b0520SBard Liao 224997b0520SBard Liao /* DAC2 Digital Volume (0x1a) */ 225997b0520SBard Liao #define RT5640_DAC_L2_VOL_MASK (0xff << 8) 226997b0520SBard Liao #define RT5640_DAC_L2_VOL_SFT 8 227997b0520SBard Liao #define RT5640_DAC_R2_VOL_MASK (0xff) 228997b0520SBard Liao #define RT5640_DAC_R2_VOL_SFT 0 229997b0520SBard Liao 230997b0520SBard Liao /* DAC2 Control (0x1b) */ 231997b0520SBard Liao #define RT5640_M_DAC_L2_VOL (0x1 << 13) 232997b0520SBard Liao #define RT5640_M_DAC_L2_VOL_SFT 13 233997b0520SBard Liao #define RT5640_M_DAC_R2_VOL (0x1 << 12) 234997b0520SBard Liao #define RT5640_M_DAC_R2_VOL_SFT 12 235997b0520SBard Liao 236997b0520SBard Liao /* ADC Digital Volume Control (0x1c) */ 237997b0520SBard Liao #define RT5640_ADC_L_VOL_MASK (0x7f << 8) 238997b0520SBard Liao #define RT5640_ADC_L_VOL_SFT 8 239997b0520SBard Liao #define RT5640_ADC_R_VOL_MASK (0x7f) 240997b0520SBard Liao #define RT5640_ADC_R_VOL_SFT 0 241997b0520SBard Liao 242997b0520SBard Liao /* Mono ADC Digital Volume Control (0x1d) */ 243997b0520SBard Liao #define RT5640_MONO_ADC_L_VOL_MASK (0x7f << 8) 244997b0520SBard Liao #define RT5640_MONO_ADC_L_VOL_SFT 8 245997b0520SBard Liao #define RT5640_MONO_ADC_R_VOL_MASK (0x7f) 246997b0520SBard Liao #define RT5640_MONO_ADC_R_VOL_SFT 0 247997b0520SBard Liao 248997b0520SBard Liao /* ADC Boost Volume Control (0x1e) */ 249997b0520SBard Liao #define RT5640_ADC_L_BST_MASK (0x3 << 14) 250997b0520SBard Liao #define RT5640_ADC_L_BST_SFT 14 251997b0520SBard Liao #define RT5640_ADC_R_BST_MASK (0x3 << 12) 252997b0520SBard Liao #define RT5640_ADC_R_BST_SFT 12 253997b0520SBard Liao #define RT5640_ADC_COMP_MASK (0x3 << 10) 254997b0520SBard Liao #define RT5640_ADC_COMP_SFT 10 255997b0520SBard Liao 256997b0520SBard Liao /* Stereo ADC Mixer Control (0x27) */ 257997b0520SBard Liao #define RT5640_M_ADC_L1 (0x1 << 14) 258997b0520SBard Liao #define RT5640_M_ADC_L1_SFT 14 259997b0520SBard Liao #define RT5640_M_ADC_L2 (0x1 << 13) 260997b0520SBard Liao #define RT5640_M_ADC_L2_SFT 13 261997b0520SBard Liao #define RT5640_ADC_1_SRC_MASK (0x1 << 12) 262997b0520SBard Liao #define RT5640_ADC_1_SRC_SFT 12 263997b0520SBard Liao #define RT5640_ADC_1_SRC_ADC (0x1 << 12) 264997b0520SBard Liao #define RT5640_ADC_1_SRC_DACMIX (0x0 << 12) 265997b0520SBard Liao #define RT5640_ADC_2_SRC_MASK (0x3 << 10) 266997b0520SBard Liao #define RT5640_ADC_2_SRC_SFT 10 267997b0520SBard Liao #define RT5640_ADC_2_SRC_DMIC1 (0x0 << 10) 268997b0520SBard Liao #define RT5640_ADC_2_SRC_DMIC2 (0x1 << 10) 269997b0520SBard Liao #define RT5640_ADC_2_SRC_DACMIX (0x2 << 10) 270997b0520SBard Liao #define RT5640_M_ADC_R1 (0x1 << 6) 271997b0520SBard Liao #define RT5640_M_ADC_R1_SFT 6 272997b0520SBard Liao #define RT5640_M_ADC_R2 (0x1 << 5) 273997b0520SBard Liao #define RT5640_M_ADC_R2_SFT 5 274997b0520SBard Liao 275997b0520SBard Liao /* Mono ADC Mixer Control (0x28) */ 276997b0520SBard Liao #define RT5640_M_MONO_ADC_L1 (0x1 << 14) 277997b0520SBard Liao #define RT5640_M_MONO_ADC_L1_SFT 14 278997b0520SBard Liao #define RT5640_M_MONO_ADC_L2 (0x1 << 13) 279997b0520SBard Liao #define RT5640_M_MONO_ADC_L2_SFT 13 280997b0520SBard Liao #define RT5640_MONO_ADC_L1_SRC_MASK (0x1 << 12) 281997b0520SBard Liao #define RT5640_MONO_ADC_L1_SRC_SFT 12 282997b0520SBard Liao #define RT5640_MONO_ADC_L1_SRC_DACMIXL (0x0 << 12) 283997b0520SBard Liao #define RT5640_MONO_ADC_L1_SRC_ADCL (0x1 << 12) 284997b0520SBard Liao #define RT5640_MONO_ADC_L2_SRC_MASK (0x3 << 10) 285997b0520SBard Liao #define RT5640_MONO_ADC_L2_SRC_SFT 10 286997b0520SBard Liao #define RT5640_MONO_ADC_L2_SRC_DMIC_L1 (0x0 << 10) 287997b0520SBard Liao #define RT5640_MONO_ADC_L2_SRC_DMIC_L2 (0x1 << 10) 288997b0520SBard Liao #define RT5640_MONO_ADC_L2_SRC_DACMIXL (0x2 << 10) 289997b0520SBard Liao #define RT5640_M_MONO_ADC_R1 (0x1 << 6) 290997b0520SBard Liao #define RT5640_M_MONO_ADC_R1_SFT 6 291997b0520SBard Liao #define RT5640_M_MONO_ADC_R2 (0x1 << 5) 292997b0520SBard Liao #define RT5640_M_MONO_ADC_R2_SFT 5 293997b0520SBard Liao #define RT5640_MONO_ADC_R1_SRC_MASK (0x1 << 4) 294997b0520SBard Liao #define RT5640_MONO_ADC_R1_SRC_SFT 4 295997b0520SBard Liao #define RT5640_MONO_ADC_R1_SRC_ADCR (0x1 << 4) 296997b0520SBard Liao #define RT5640_MONO_ADC_R1_SRC_DACMIXR (0x0 << 4) 297997b0520SBard Liao #define RT5640_MONO_ADC_R2_SRC_MASK (0x3 << 2) 298997b0520SBard Liao #define RT5640_MONO_ADC_R2_SRC_SFT 2 299997b0520SBard Liao #define RT5640_MONO_ADC_R2_SRC_DMIC_R1 (0x0 << 2) 300997b0520SBard Liao #define RT5640_MONO_ADC_R2_SRC_DMIC_R2 (0x1 << 2) 301997b0520SBard Liao #define RT5640_MONO_ADC_R2_SRC_DACMIXR (0x2 << 2) 302997b0520SBard Liao 303997b0520SBard Liao /* ADC Mixer to DAC Mixer Control (0x29) */ 304997b0520SBard Liao #define RT5640_M_ADCMIX_L (0x1 << 15) 305997b0520SBard Liao #define RT5640_M_ADCMIX_L_SFT 15 306997b0520SBard Liao #define RT5640_M_IF1_DAC_L (0x1 << 14) 307997b0520SBard Liao #define RT5640_M_IF1_DAC_L_SFT 14 308997b0520SBard Liao #define RT5640_M_ADCMIX_R (0x1 << 7) 309997b0520SBard Liao #define RT5640_M_ADCMIX_R_SFT 7 310997b0520SBard Liao #define RT5640_M_IF1_DAC_R (0x1 << 6) 311997b0520SBard Liao #define RT5640_M_IF1_DAC_R_SFT 6 312997b0520SBard Liao 313997b0520SBard Liao /* Stereo DAC Mixer Control (0x2a) */ 314997b0520SBard Liao #define RT5640_M_DAC_L1 (0x1 << 14) 315997b0520SBard Liao #define RT5640_M_DAC_L1_SFT 14 316997b0520SBard Liao #define RT5640_DAC_L1_STO_L_VOL_MASK (0x1 << 13) 317997b0520SBard Liao #define RT5640_DAC_L1_STO_L_VOL_SFT 13 318997b0520SBard Liao #define RT5640_M_DAC_L2 (0x1 << 12) 319997b0520SBard Liao #define RT5640_M_DAC_L2_SFT 12 320997b0520SBard Liao #define RT5640_DAC_L2_STO_L_VOL_MASK (0x1 << 11) 321997b0520SBard Liao #define RT5640_DAC_L2_STO_L_VOL_SFT 11 322997b0520SBard Liao #define RT5640_M_ANC_DAC_L (0x1 << 10) 323997b0520SBard Liao #define RT5640_M_ANC_DAC_L_SFT 10 324997b0520SBard Liao #define RT5640_M_DAC_R1 (0x1 << 6) 325997b0520SBard Liao #define RT5640_M_DAC_R1_SFT 6 326997b0520SBard Liao #define RT5640_DAC_R1_STO_R_VOL_MASK (0x1 << 5) 327997b0520SBard Liao #define RT5640_DAC_R1_STO_R_VOL_SFT 5 328997b0520SBard Liao #define RT5640_M_DAC_R2 (0x1 << 4) 329997b0520SBard Liao #define RT5640_M_DAC_R2_SFT 4 330997b0520SBard Liao #define RT5640_DAC_R2_STO_R_VOL_MASK (0x1 << 3) 331997b0520SBard Liao #define RT5640_DAC_R2_STO_R_VOL_SFT 3 332997b0520SBard Liao #define RT5640_M_ANC_DAC_R (0x1 << 2) 333997b0520SBard Liao #define RT5640_M_ANC_DAC_R_SFT 2 334997b0520SBard Liao 335997b0520SBard Liao /* Mono DAC Mixer Control (0x2b) */ 336997b0520SBard Liao #define RT5640_M_DAC_L1_MONO_L (0x1 << 14) 337997b0520SBard Liao #define RT5640_M_DAC_L1_MONO_L_SFT 14 338997b0520SBard Liao #define RT5640_DAC_L1_MONO_L_VOL_MASK (0x1 << 13) 339997b0520SBard Liao #define RT5640_DAC_L1_MONO_L_VOL_SFT 13 340997b0520SBard Liao #define RT5640_M_DAC_L2_MONO_L (0x1 << 12) 341997b0520SBard Liao #define RT5640_M_DAC_L2_MONO_L_SFT 12 342997b0520SBard Liao #define RT5640_DAC_L2_MONO_L_VOL_MASK (0x1 << 11) 343997b0520SBard Liao #define RT5640_DAC_L2_MONO_L_VOL_SFT 11 344997b0520SBard Liao #define RT5640_M_DAC_R2_MONO_L (0x1 << 10) 345997b0520SBard Liao #define RT5640_M_DAC_R2_MONO_L_SFT 10 346997b0520SBard Liao #define RT5640_DAC_R2_MONO_L_VOL_MASK (0x1 << 9) 347997b0520SBard Liao #define RT5640_DAC_R2_MONO_L_VOL_SFT 9 348997b0520SBard Liao #define RT5640_M_DAC_R1_MONO_R (0x1 << 6) 349997b0520SBard Liao #define RT5640_M_DAC_R1_MONO_R_SFT 6 350997b0520SBard Liao #define RT5640_DAC_R1_MONO_R_VOL_MASK (0x1 << 5) 351997b0520SBard Liao #define RT5640_DAC_R1_MONO_R_VOL_SFT 5 352997b0520SBard Liao #define RT5640_M_DAC_R2_MONO_R (0x1 << 4) 353997b0520SBard Liao #define RT5640_M_DAC_R2_MONO_R_SFT 4 354997b0520SBard Liao #define RT5640_DAC_R2_MONO_R_VOL_MASK (0x1 << 3) 355997b0520SBard Liao #define RT5640_DAC_R2_MONO_R_VOL_SFT 3 356997b0520SBard Liao #define RT5640_M_DAC_L2_MONO_R (0x1 << 2) 357997b0520SBard Liao #define RT5640_M_DAC_L2_MONO_R_SFT 2 358997b0520SBard Liao #define RT5640_DAC_L2_MONO_R_VOL_MASK (0x1 << 1) 359997b0520SBard Liao #define RT5640_DAC_L2_MONO_R_VOL_SFT 1 360997b0520SBard Liao 361997b0520SBard Liao /* Digital Mixer Control (0x2c) */ 362997b0520SBard Liao #define RT5640_M_STO_L_DAC_L (0x1 << 15) 363997b0520SBard Liao #define RT5640_M_STO_L_DAC_L_SFT 15 364997b0520SBard Liao #define RT5640_STO_L_DAC_L_VOL_MASK (0x1 << 14) 365997b0520SBard Liao #define RT5640_STO_L_DAC_L_VOL_SFT 14 366997b0520SBard Liao #define RT5640_M_DAC_L2_DAC_L (0x1 << 13) 367997b0520SBard Liao #define RT5640_M_DAC_L2_DAC_L_SFT 13 368997b0520SBard Liao #define RT5640_DAC_L2_DAC_L_VOL_MASK (0x1 << 12) 369997b0520SBard Liao #define RT5640_DAC_L2_DAC_L_VOL_SFT 12 370997b0520SBard Liao #define RT5640_M_STO_R_DAC_R (0x1 << 11) 371997b0520SBard Liao #define RT5640_M_STO_R_DAC_R_SFT 11 372997b0520SBard Liao #define RT5640_STO_R_DAC_R_VOL_MASK (0x1 << 10) 373997b0520SBard Liao #define RT5640_STO_R_DAC_R_VOL_SFT 10 374997b0520SBard Liao #define RT5640_M_DAC_R2_DAC_R (0x1 << 9) 375997b0520SBard Liao #define RT5640_M_DAC_R2_DAC_R_SFT 9 376997b0520SBard Liao #define RT5640_DAC_R2_DAC_R_VOL_MASK (0x1 << 8) 377997b0520SBard Liao #define RT5640_DAC_R2_DAC_R_VOL_SFT 8 378997b0520SBard Liao 379997b0520SBard Liao /* DSP Path Control 1 (0x2d) */ 380997b0520SBard Liao #define RT5640_RXDP_SRC_MASK (0x1 << 15) 381997b0520SBard Liao #define RT5640_RXDP_SRC_SFT 15 382997b0520SBard Liao #define RT5640_RXDP_SRC_NOR (0x0 << 15) 383997b0520SBard Liao #define RT5640_RXDP_SRC_DIV3 (0x1 << 15) 384997b0520SBard Liao #define RT5640_TXDP_SRC_MASK (0x1 << 14) 385997b0520SBard Liao #define RT5640_TXDP_SRC_SFT 14 386997b0520SBard Liao #define RT5640_TXDP_SRC_NOR (0x0 << 14) 387997b0520SBard Liao #define RT5640_TXDP_SRC_DIV3 (0x1 << 14) 388997b0520SBard Liao 389997b0520SBard Liao /* DSP Path Control 2 (0x2e) */ 390997b0520SBard Liao #define RT5640_DAC_L2_SEL_MASK (0x3 << 14) 391997b0520SBard Liao #define RT5640_DAC_L2_SEL_SFT 14 392997b0520SBard Liao #define RT5640_DAC_L2_SEL_IF2 (0x0 << 14) 393997b0520SBard Liao #define RT5640_DAC_L2_SEL_IF3 (0x1 << 14) 394997b0520SBard Liao #define RT5640_DAC_L2_SEL_TXDC (0x2 << 14) 395997b0520SBard Liao #define RT5640_DAC_L2_SEL_BASS (0x3 << 14) 396997b0520SBard Liao #define RT5640_DAC_R2_SEL_MASK (0x3 << 12) 397997b0520SBard Liao #define RT5640_DAC_R2_SEL_SFT 12 398997b0520SBard Liao #define RT5640_DAC_R2_SEL_IF2 (0x0 << 12) 399997b0520SBard Liao #define RT5640_DAC_R2_SEL_IF3 (0x1 << 12) 400997b0520SBard Liao #define RT5640_DAC_R2_SEL_TXDC (0x2 << 12) 401997b0520SBard Liao #define RT5640_IF2_ADC_L_SEL_MASK (0x1 << 11) 402997b0520SBard Liao #define RT5640_IF2_ADC_L_SEL_SFT 11 403997b0520SBard Liao #define RT5640_IF2_ADC_L_SEL_TXDP (0x0 << 11) 404997b0520SBard Liao #define RT5640_IF2_ADC_L_SEL_PASS (0x1 << 11) 405997b0520SBard Liao #define RT5640_IF2_ADC_R_SEL_MASK (0x1 << 10) 406997b0520SBard Liao #define RT5640_IF2_ADC_R_SEL_SFT 10 407997b0520SBard Liao #define RT5640_IF2_ADC_R_SEL_TXDP (0x0 << 10) 408997b0520SBard Liao #define RT5640_IF2_ADC_R_SEL_PASS (0x1 << 10) 409997b0520SBard Liao #define RT5640_RXDC_SEL_MASK (0x3 << 8) 410997b0520SBard Liao #define RT5640_RXDC_SEL_SFT 8 411997b0520SBard Liao #define RT5640_RXDC_SEL_NOR (0x0 << 8) 412997b0520SBard Liao #define RT5640_RXDC_SEL_L2R (0x1 << 8) 413997b0520SBard Liao #define RT5640_RXDC_SEL_R2L (0x2 << 8) 414997b0520SBard Liao #define RT5640_RXDC_SEL_SWAP (0x3 << 8) 415997b0520SBard Liao #define RT5640_RXDP_SEL_MASK (0x3 << 6) 416997b0520SBard Liao #define RT5640_RXDP_SEL_SFT 6 417997b0520SBard Liao #define RT5640_RXDP_SEL_NOR (0x0 << 6) 418997b0520SBard Liao #define RT5640_RXDP_SEL_L2R (0x1 << 6) 419997b0520SBard Liao #define RT5640_RXDP_SEL_R2L (0x2 << 6) 420997b0520SBard Liao #define RT5640_RXDP_SEL_SWAP (0x3 << 6) 421997b0520SBard Liao #define RT5640_TXDC_SEL_MASK (0x3 << 4) 422997b0520SBard Liao #define RT5640_TXDC_SEL_SFT 4 423997b0520SBard Liao #define RT5640_TXDC_SEL_NOR (0x0 << 4) 424997b0520SBard Liao #define RT5640_TXDC_SEL_L2R (0x1 << 4) 425997b0520SBard Liao #define RT5640_TXDC_SEL_R2L (0x2 << 4) 426997b0520SBard Liao #define RT5640_TXDC_SEL_SWAP (0x3 << 4) 427997b0520SBard Liao #define RT5640_TXDP_SEL_MASK (0x3 << 2) 428997b0520SBard Liao #define RT5640_TXDP_SEL_SFT 2 429997b0520SBard Liao #define RT5640_TXDP_SEL_NOR (0x0 << 2) 430997b0520SBard Liao #define RT5640_TXDP_SEL_L2R (0x1 << 2) 431997b0520SBard Liao #define RT5640_TXDP_SEL_R2L (0x2 << 2) 432997b0520SBard Liao #define RT5640_TRXDP_SEL_SWAP (0x3 << 2) 433997b0520SBard Liao 434997b0520SBard Liao /* Digital Interface Data Control (0x2f) */ 435997b0520SBard Liao #define RT5640_IF1_DAC_SEL_MASK (0x3 << 14) 436997b0520SBard Liao #define RT5640_IF1_DAC_SEL_SFT 14 437997b0520SBard Liao #define RT5640_IF1_DAC_SEL_NOR (0x0 << 14) 438997b0520SBard Liao #define RT5640_IF1_DAC_SEL_L2R (0x1 << 14) 439997b0520SBard Liao #define RT5640_IF1_DAC_SEL_R2L (0x2 << 14) 440997b0520SBard Liao #define RT5640_IF1_DAC_SEL_SWAP (0x3 << 14) 441997b0520SBard Liao #define RT5640_IF1_ADC_SEL_MASK (0x3 << 12) 442997b0520SBard Liao #define RT5640_IF1_ADC_SEL_SFT 12 443997b0520SBard Liao #define RT5640_IF1_ADC_SEL_NOR (0x0 << 12) 444997b0520SBard Liao #define RT5640_IF1_ADC_SEL_L2R (0x1 << 12) 445997b0520SBard Liao #define RT5640_IF1_ADC_SEL_R2L (0x2 << 12) 446997b0520SBard Liao #define RT5640_IF1_ADC_SEL_SWAP (0x3 << 12) 447997b0520SBard Liao #define RT5640_IF2_DAC_SEL_MASK (0x3 << 10) 448997b0520SBard Liao #define RT5640_IF2_DAC_SEL_SFT 10 449997b0520SBard Liao #define RT5640_IF2_DAC_SEL_NOR (0x0 << 10) 450997b0520SBard Liao #define RT5640_IF2_DAC_SEL_L2R (0x1 << 10) 451997b0520SBard Liao #define RT5640_IF2_DAC_SEL_R2L (0x2 << 10) 452997b0520SBard Liao #define RT5640_IF2_DAC_SEL_SWAP (0x3 << 10) 453997b0520SBard Liao #define RT5640_IF2_ADC_SEL_MASK (0x3 << 8) 454997b0520SBard Liao #define RT5640_IF2_ADC_SEL_SFT 8 455997b0520SBard Liao #define RT5640_IF2_ADC_SEL_NOR (0x0 << 8) 456997b0520SBard Liao #define RT5640_IF2_ADC_SEL_L2R (0x1 << 8) 457997b0520SBard Liao #define RT5640_IF2_ADC_SEL_R2L (0x2 << 8) 458997b0520SBard Liao #define RT5640_IF2_ADC_SEL_SWAP (0x3 << 8) 459997b0520SBard Liao #define RT5640_IF3_DAC_SEL_MASK (0x3 << 6) 460997b0520SBard Liao #define RT5640_IF3_DAC_SEL_SFT 6 461997b0520SBard Liao #define RT5640_IF3_DAC_SEL_NOR (0x0 << 6) 462997b0520SBard Liao #define RT5640_IF3_DAC_SEL_L2R (0x1 << 6) 463997b0520SBard Liao #define RT5640_IF3_DAC_SEL_R2L (0x2 << 6) 464997b0520SBard Liao #define RT5640_IF3_DAC_SEL_SWAP (0x3 << 6) 465997b0520SBard Liao #define RT5640_IF3_ADC_SEL_MASK (0x3 << 4) 466997b0520SBard Liao #define RT5640_IF3_ADC_SEL_SFT 4 467997b0520SBard Liao #define RT5640_IF3_ADC_SEL_NOR (0x0 << 4) 468997b0520SBard Liao #define RT5640_IF3_ADC_SEL_L2R (0x1 << 4) 469997b0520SBard Liao #define RT5640_IF3_ADC_SEL_R2L (0x2 << 4) 470997b0520SBard Liao #define RT5640_IF3_ADC_SEL_SWAP (0x3 << 4) 471997b0520SBard Liao 472997b0520SBard Liao /* REC Left Mixer Control 1 (0x3b) */ 473997b0520SBard Liao #define RT5640_G_HP_L_RM_L_MASK (0x7 << 13) 474997b0520SBard Liao #define RT5640_G_HP_L_RM_L_SFT 13 475997b0520SBard Liao #define RT5640_G_IN_L_RM_L_MASK (0x7 << 10) 476997b0520SBard Liao #define RT5640_G_IN_L_RM_L_SFT 10 477997b0520SBard Liao #define RT5640_G_BST4_RM_L_MASK (0x7 << 7) 478997b0520SBard Liao #define RT5640_G_BST4_RM_L_SFT 7 479997b0520SBard Liao #define RT5640_G_BST3_RM_L_MASK (0x7 << 4) 480997b0520SBard Liao #define RT5640_G_BST3_RM_L_SFT 4 481997b0520SBard Liao #define RT5640_G_BST2_RM_L_MASK (0x7 << 1) 482997b0520SBard Liao #define RT5640_G_BST2_RM_L_SFT 1 483997b0520SBard Liao 484997b0520SBard Liao /* REC Left Mixer Control 2 (0x3c) */ 485997b0520SBard Liao #define RT5640_G_BST1_RM_L_MASK (0x7 << 13) 486997b0520SBard Liao #define RT5640_G_BST1_RM_L_SFT 13 487997b0520SBard Liao #define RT5640_G_OM_L_RM_L_MASK (0x7 << 10) 488997b0520SBard Liao #define RT5640_G_OM_L_RM_L_SFT 10 489997b0520SBard Liao #define RT5640_M_HP_L_RM_L (0x1 << 6) 490997b0520SBard Liao #define RT5640_M_HP_L_RM_L_SFT 6 491997b0520SBard Liao #define RT5640_M_IN_L_RM_L (0x1 << 5) 492997b0520SBard Liao #define RT5640_M_IN_L_RM_L_SFT 5 493997b0520SBard Liao #define RT5640_M_BST4_RM_L (0x1 << 4) 494997b0520SBard Liao #define RT5640_M_BST4_RM_L_SFT 4 495997b0520SBard Liao #define RT5640_M_BST3_RM_L (0x1 << 3) 496997b0520SBard Liao #define RT5640_M_BST3_RM_L_SFT 3 497997b0520SBard Liao #define RT5640_M_BST2_RM_L (0x1 << 2) 498997b0520SBard Liao #define RT5640_M_BST2_RM_L_SFT 2 499997b0520SBard Liao #define RT5640_M_BST1_RM_L (0x1 << 1) 500997b0520SBard Liao #define RT5640_M_BST1_RM_L_SFT 1 501997b0520SBard Liao #define RT5640_M_OM_L_RM_L (0x1) 502997b0520SBard Liao #define RT5640_M_OM_L_RM_L_SFT 0 503997b0520SBard Liao 504997b0520SBard Liao /* REC Right Mixer Control 1 (0x3d) */ 505997b0520SBard Liao #define RT5640_G_HP_R_RM_R_MASK (0x7 << 13) 506997b0520SBard Liao #define RT5640_G_HP_R_RM_R_SFT 13 507997b0520SBard Liao #define RT5640_G_IN_R_RM_R_MASK (0x7 << 10) 508997b0520SBard Liao #define RT5640_G_IN_R_RM_R_SFT 10 509997b0520SBard Liao #define RT5640_G_BST4_RM_R_MASK (0x7 << 7) 510997b0520SBard Liao #define RT5640_G_BST4_RM_R_SFT 7 511997b0520SBard Liao #define RT5640_G_BST3_RM_R_MASK (0x7 << 4) 512997b0520SBard Liao #define RT5640_G_BST3_RM_R_SFT 4 513997b0520SBard Liao #define RT5640_G_BST2_RM_R_MASK (0x7 << 1) 514997b0520SBard Liao #define RT5640_G_BST2_RM_R_SFT 1 515997b0520SBard Liao 516997b0520SBard Liao /* REC Right Mixer Control 2 (0x3e) */ 517997b0520SBard Liao #define RT5640_G_BST1_RM_R_MASK (0x7 << 13) 518997b0520SBard Liao #define RT5640_G_BST1_RM_R_SFT 13 519997b0520SBard Liao #define RT5640_G_OM_R_RM_R_MASK (0x7 << 10) 520997b0520SBard Liao #define RT5640_G_OM_R_RM_R_SFT 10 521997b0520SBard Liao #define RT5640_M_HP_R_RM_R (0x1 << 6) 522997b0520SBard Liao #define RT5640_M_HP_R_RM_R_SFT 6 523997b0520SBard Liao #define RT5640_M_IN_R_RM_R (0x1 << 5) 524997b0520SBard Liao #define RT5640_M_IN_R_RM_R_SFT 5 525997b0520SBard Liao #define RT5640_M_BST4_RM_R (0x1 << 4) 526997b0520SBard Liao #define RT5640_M_BST4_RM_R_SFT 4 527997b0520SBard Liao #define RT5640_M_BST3_RM_R (0x1 << 3) 528997b0520SBard Liao #define RT5640_M_BST3_RM_R_SFT 3 529997b0520SBard Liao #define RT5640_M_BST2_RM_R (0x1 << 2) 530997b0520SBard Liao #define RT5640_M_BST2_RM_R_SFT 2 531997b0520SBard Liao #define RT5640_M_BST1_RM_R (0x1 << 1) 532997b0520SBard Liao #define RT5640_M_BST1_RM_R_SFT 1 533997b0520SBard Liao #define RT5640_M_OM_R_RM_R (0x1) 534997b0520SBard Liao #define RT5640_M_OM_R_RM_R_SFT 0 535997b0520SBard Liao 536997b0520SBard Liao /* HPMIX Control (0x45) */ 537997b0520SBard Liao #define RT5640_M_DAC2_HM (0x1 << 15) 538997b0520SBard Liao #define RT5640_M_DAC2_HM_SFT 15 539997b0520SBard Liao #define RT5640_M_DAC1_HM (0x1 << 14) 540997b0520SBard Liao #define RT5640_M_DAC1_HM_SFT 14 541997b0520SBard Liao #define RT5640_M_HPVOL_HM (0x1 << 13) 542997b0520SBard Liao #define RT5640_M_HPVOL_HM_SFT 13 543997b0520SBard Liao #define RT5640_G_HPOMIX_MASK (0x1 << 12) 544997b0520SBard Liao #define RT5640_G_HPOMIX_SFT 12 545997b0520SBard Liao 546997b0520SBard Liao /* SPK Left Mixer Control (0x46) */ 547997b0520SBard Liao #define RT5640_G_RM_L_SM_L_MASK (0x3 << 14) 548997b0520SBard Liao #define RT5640_G_RM_L_SM_L_SFT 14 549997b0520SBard Liao #define RT5640_G_IN_L_SM_L_MASK (0x3 << 12) 550997b0520SBard Liao #define RT5640_G_IN_L_SM_L_SFT 12 551997b0520SBard Liao #define RT5640_G_DAC_L1_SM_L_MASK (0x3 << 10) 552997b0520SBard Liao #define RT5640_G_DAC_L1_SM_L_SFT 10 553997b0520SBard Liao #define RT5640_G_DAC_L2_SM_L_MASK (0x3 << 8) 554997b0520SBard Liao #define RT5640_G_DAC_L2_SM_L_SFT 8 555997b0520SBard Liao #define RT5640_G_OM_L_SM_L_MASK (0x3 << 6) 556997b0520SBard Liao #define RT5640_G_OM_L_SM_L_SFT 6 557997b0520SBard Liao #define RT5640_M_RM_L_SM_L (0x1 << 5) 558997b0520SBard Liao #define RT5640_M_RM_L_SM_L_SFT 5 559997b0520SBard Liao #define RT5640_M_IN_L_SM_L (0x1 << 4) 560997b0520SBard Liao #define RT5640_M_IN_L_SM_L_SFT 4 561997b0520SBard Liao #define RT5640_M_DAC_L1_SM_L (0x1 << 3) 562997b0520SBard Liao #define RT5640_M_DAC_L1_SM_L_SFT 3 563997b0520SBard Liao #define RT5640_M_DAC_L2_SM_L (0x1 << 2) 564997b0520SBard Liao #define RT5640_M_DAC_L2_SM_L_SFT 2 565997b0520SBard Liao #define RT5640_M_OM_L_SM_L (0x1 << 1) 566997b0520SBard Liao #define RT5640_M_OM_L_SM_L_SFT 1 567997b0520SBard Liao 568997b0520SBard Liao /* SPK Right Mixer Control (0x47) */ 569997b0520SBard Liao #define RT5640_G_RM_R_SM_R_MASK (0x3 << 14) 570997b0520SBard Liao #define RT5640_G_RM_R_SM_R_SFT 14 571997b0520SBard Liao #define RT5640_G_IN_R_SM_R_MASK (0x3 << 12) 572997b0520SBard Liao #define RT5640_G_IN_R_SM_R_SFT 12 573997b0520SBard Liao #define RT5640_G_DAC_R1_SM_R_MASK (0x3 << 10) 574997b0520SBard Liao #define RT5640_G_DAC_R1_SM_R_SFT 10 575997b0520SBard Liao #define RT5640_G_DAC_R2_SM_R_MASK (0x3 << 8) 576997b0520SBard Liao #define RT5640_G_DAC_R2_SM_R_SFT 8 577997b0520SBard Liao #define RT5640_G_OM_R_SM_R_MASK (0x3 << 6) 578997b0520SBard Liao #define RT5640_G_OM_R_SM_R_SFT 6 579997b0520SBard Liao #define RT5640_M_RM_R_SM_R (0x1 << 5) 580997b0520SBard Liao #define RT5640_M_RM_R_SM_R_SFT 5 581997b0520SBard Liao #define RT5640_M_IN_R_SM_R (0x1 << 4) 582997b0520SBard Liao #define RT5640_M_IN_R_SM_R_SFT 4 583997b0520SBard Liao #define RT5640_M_DAC_R1_SM_R (0x1 << 3) 584997b0520SBard Liao #define RT5640_M_DAC_R1_SM_R_SFT 3 585997b0520SBard Liao #define RT5640_M_DAC_R2_SM_R (0x1 << 2) 586997b0520SBard Liao #define RT5640_M_DAC_R2_SM_R_SFT 2 587997b0520SBard Liao #define RT5640_M_OM_R_SM_R (0x1 << 1) 588997b0520SBard Liao #define RT5640_M_OM_R_SM_R_SFT 1 589997b0520SBard Liao 590997b0520SBard Liao /* SPOLMIX Control (0x48) */ 591997b0520SBard Liao #define RT5640_M_DAC_R1_SPM_L (0x1 << 15) 592997b0520SBard Liao #define RT5640_M_DAC_R1_SPM_L_SFT 15 593997b0520SBard Liao #define RT5640_M_DAC_L1_SPM_L (0x1 << 14) 594997b0520SBard Liao #define RT5640_M_DAC_L1_SPM_L_SFT 14 595997b0520SBard Liao #define RT5640_M_SV_R_SPM_L (0x1 << 13) 596997b0520SBard Liao #define RT5640_M_SV_R_SPM_L_SFT 13 597997b0520SBard Liao #define RT5640_M_SV_L_SPM_L (0x1 << 12) 598997b0520SBard Liao #define RT5640_M_SV_L_SPM_L_SFT 12 599997b0520SBard Liao #define RT5640_M_BST1_SPM_L (0x1 << 11) 600997b0520SBard Liao #define RT5640_M_BST1_SPM_L_SFT 11 601997b0520SBard Liao 602997b0520SBard Liao /* SPORMIX Control (0x49) */ 603997b0520SBard Liao #define RT5640_M_DAC_R1_SPM_R (0x1 << 13) 604997b0520SBard Liao #define RT5640_M_DAC_R1_SPM_R_SFT 13 605997b0520SBard Liao #define RT5640_M_SV_R_SPM_R (0x1 << 12) 606997b0520SBard Liao #define RT5640_M_SV_R_SPM_R_SFT 12 607997b0520SBard Liao #define RT5640_M_BST1_SPM_R (0x1 << 11) 608997b0520SBard Liao #define RT5640_M_BST1_SPM_R_SFT 11 609997b0520SBard Liao 610997b0520SBard Liao /* SPOLMIX / SPORMIX Ratio Control (0x4a) */ 611997b0520SBard Liao #define RT5640_SPO_CLSD_RATIO_MASK (0x7) 612997b0520SBard Liao #define RT5640_SPO_CLSD_RATIO_SFT 0 613997b0520SBard Liao 614997b0520SBard Liao /* Mono Output Mixer Control (0x4c) */ 615997b0520SBard Liao #define RT5640_M_DAC_R2_MM (0x1 << 15) 616997b0520SBard Liao #define RT5640_M_DAC_R2_MM_SFT 15 617997b0520SBard Liao #define RT5640_M_DAC_L2_MM (0x1 << 14) 618997b0520SBard Liao #define RT5640_M_DAC_L2_MM_SFT 14 619997b0520SBard Liao #define RT5640_M_OV_R_MM (0x1 << 13) 620997b0520SBard Liao #define RT5640_M_OV_R_MM_SFT 13 621997b0520SBard Liao #define RT5640_M_OV_L_MM (0x1 << 12) 622997b0520SBard Liao #define RT5640_M_OV_L_MM_SFT 12 623997b0520SBard Liao #define RT5640_M_BST1_MM (0x1 << 11) 624997b0520SBard Liao #define RT5640_M_BST1_MM_SFT 11 625997b0520SBard Liao #define RT5640_G_MONOMIX_MASK (0x1 << 10) 626997b0520SBard Liao #define RT5640_G_MONOMIX_SFT 10 627997b0520SBard Liao 628997b0520SBard Liao /* Output Left Mixer Control 1 (0x4d) */ 629997b0520SBard Liao #define RT5640_G_BST3_OM_L_MASK (0x7 << 13) 630997b0520SBard Liao #define RT5640_G_BST3_OM_L_SFT 13 631997b0520SBard Liao #define RT5640_G_BST2_OM_L_MASK (0x7 << 10) 632997b0520SBard Liao #define RT5640_G_BST2_OM_L_SFT 10 633997b0520SBard Liao #define RT5640_G_BST1_OM_L_MASK (0x7 << 7) 634997b0520SBard Liao #define RT5640_G_BST1_OM_L_SFT 7 635997b0520SBard Liao #define RT5640_G_IN_L_OM_L_MASK (0x7 << 4) 636997b0520SBard Liao #define RT5640_G_IN_L_OM_L_SFT 4 637997b0520SBard Liao #define RT5640_G_RM_L_OM_L_MASK (0x7 << 1) 638997b0520SBard Liao #define RT5640_G_RM_L_OM_L_SFT 1 639997b0520SBard Liao 640997b0520SBard Liao /* Output Left Mixer Control 2 (0x4e) */ 641997b0520SBard Liao #define RT5640_G_DAC_R2_OM_L_MASK (0x7 << 13) 642997b0520SBard Liao #define RT5640_G_DAC_R2_OM_L_SFT 13 643997b0520SBard Liao #define RT5640_G_DAC_L2_OM_L_MASK (0x7 << 10) 644997b0520SBard Liao #define RT5640_G_DAC_L2_OM_L_SFT 10 645997b0520SBard Liao #define RT5640_G_DAC_L1_OM_L_MASK (0x7 << 7) 646997b0520SBard Liao #define RT5640_G_DAC_L1_OM_L_SFT 7 647997b0520SBard Liao 648997b0520SBard Liao /* Output Left Mixer Control 3 (0x4f) */ 649997b0520SBard Liao #define RT5640_M_SM_L_OM_L (0x1 << 8) 650997b0520SBard Liao #define RT5640_M_SM_L_OM_L_SFT 8 651997b0520SBard Liao #define RT5640_M_BST3_OM_L (0x1 << 7) 652997b0520SBard Liao #define RT5640_M_BST3_OM_L_SFT 7 653997b0520SBard Liao #define RT5640_M_BST2_OM_L (0x1 << 6) 654997b0520SBard Liao #define RT5640_M_BST2_OM_L_SFT 6 655997b0520SBard Liao #define RT5640_M_BST1_OM_L (0x1 << 5) 656997b0520SBard Liao #define RT5640_M_BST1_OM_L_SFT 5 657997b0520SBard Liao #define RT5640_M_IN_L_OM_L (0x1 << 4) 658997b0520SBard Liao #define RT5640_M_IN_L_OM_L_SFT 4 659997b0520SBard Liao #define RT5640_M_RM_L_OM_L (0x1 << 3) 660997b0520SBard Liao #define RT5640_M_RM_L_OM_L_SFT 3 661997b0520SBard Liao #define RT5640_M_DAC_R2_OM_L (0x1 << 2) 662997b0520SBard Liao #define RT5640_M_DAC_R2_OM_L_SFT 2 663997b0520SBard Liao #define RT5640_M_DAC_L2_OM_L (0x1 << 1) 664997b0520SBard Liao #define RT5640_M_DAC_L2_OM_L_SFT 1 665997b0520SBard Liao #define RT5640_M_DAC_L1_OM_L (0x1) 666997b0520SBard Liao #define RT5640_M_DAC_L1_OM_L_SFT 0 667997b0520SBard Liao 668997b0520SBard Liao /* Output Right Mixer Control 1 (0x50) */ 669997b0520SBard Liao #define RT5640_G_BST4_OM_R_MASK (0x7 << 13) 670997b0520SBard Liao #define RT5640_G_BST4_OM_R_SFT 13 671997b0520SBard Liao #define RT5640_G_BST2_OM_R_MASK (0x7 << 10) 672997b0520SBard Liao #define RT5640_G_BST2_OM_R_SFT 10 673997b0520SBard Liao #define RT5640_G_BST1_OM_R_MASK (0x7 << 7) 674997b0520SBard Liao #define RT5640_G_BST1_OM_R_SFT 7 675997b0520SBard Liao #define RT5640_G_IN_R_OM_R_MASK (0x7 << 4) 676997b0520SBard Liao #define RT5640_G_IN_R_OM_R_SFT 4 677997b0520SBard Liao #define RT5640_G_RM_R_OM_R_MASK (0x7 << 1) 678997b0520SBard Liao #define RT5640_G_RM_R_OM_R_SFT 1 679997b0520SBard Liao 680997b0520SBard Liao /* Output Right Mixer Control 2 (0x51) */ 681997b0520SBard Liao #define RT5640_G_DAC_L2_OM_R_MASK (0x7 << 13) 682997b0520SBard Liao #define RT5640_G_DAC_L2_OM_R_SFT 13 683997b0520SBard Liao #define RT5640_G_DAC_R2_OM_R_MASK (0x7 << 10) 684997b0520SBard Liao #define RT5640_G_DAC_R2_OM_R_SFT 10 685997b0520SBard Liao #define RT5640_G_DAC_R1_OM_R_MASK (0x7 << 7) 686997b0520SBard Liao #define RT5640_G_DAC_R1_OM_R_SFT 7 687997b0520SBard Liao 688997b0520SBard Liao /* Output Right Mixer Control 3 (0x52) */ 689997b0520SBard Liao #define RT5640_M_SM_L_OM_R (0x1 << 8) 690997b0520SBard Liao #define RT5640_M_SM_L_OM_R_SFT 8 691997b0520SBard Liao #define RT5640_M_BST4_OM_R (0x1 << 7) 692997b0520SBard Liao #define RT5640_M_BST4_OM_R_SFT 7 693997b0520SBard Liao #define RT5640_M_BST2_OM_R (0x1 << 6) 694997b0520SBard Liao #define RT5640_M_BST2_OM_R_SFT 6 695997b0520SBard Liao #define RT5640_M_BST1_OM_R (0x1 << 5) 696997b0520SBard Liao #define RT5640_M_BST1_OM_R_SFT 5 697997b0520SBard Liao #define RT5640_M_IN_R_OM_R (0x1 << 4) 698997b0520SBard Liao #define RT5640_M_IN_R_OM_R_SFT 4 699997b0520SBard Liao #define RT5640_M_RM_R_OM_R (0x1 << 3) 700997b0520SBard Liao #define RT5640_M_RM_R_OM_R_SFT 3 701997b0520SBard Liao #define RT5640_M_DAC_L2_OM_R (0x1 << 2) 702997b0520SBard Liao #define RT5640_M_DAC_L2_OM_R_SFT 2 703997b0520SBard Liao #define RT5640_M_DAC_R2_OM_R (0x1 << 1) 704997b0520SBard Liao #define RT5640_M_DAC_R2_OM_R_SFT 1 705997b0520SBard Liao #define RT5640_M_DAC_R1_OM_R (0x1) 706997b0520SBard Liao #define RT5640_M_DAC_R1_OM_R_SFT 0 707997b0520SBard Liao 708997b0520SBard Liao /* LOUT Mixer Control (0x53) */ 709997b0520SBard Liao #define RT5640_M_DAC_L1_LM (0x1 << 15) 710997b0520SBard Liao #define RT5640_M_DAC_L1_LM_SFT 15 711997b0520SBard Liao #define RT5640_M_DAC_R1_LM (0x1 << 14) 712997b0520SBard Liao #define RT5640_M_DAC_R1_LM_SFT 14 713997b0520SBard Liao #define RT5640_M_OV_L_LM (0x1 << 13) 714997b0520SBard Liao #define RT5640_M_OV_L_LM_SFT 13 715997b0520SBard Liao #define RT5640_M_OV_R_LM (0x1 << 12) 716997b0520SBard Liao #define RT5640_M_OV_R_LM_SFT 12 717997b0520SBard Liao #define RT5640_G_LOUTMIX_MASK (0x1 << 11) 718997b0520SBard Liao #define RT5640_G_LOUTMIX_SFT 11 719997b0520SBard Liao 720997b0520SBard Liao /* Power Management for Digital 1 (0x61) */ 721997b0520SBard Liao #define RT5640_PWR_I2S1 (0x1 << 15) 722997b0520SBard Liao #define RT5640_PWR_I2S1_BIT 15 723997b0520SBard Liao #define RT5640_PWR_I2S2 (0x1 << 14) 724997b0520SBard Liao #define RT5640_PWR_I2S2_BIT 14 725997b0520SBard Liao #define RT5640_PWR_DAC_L1 (0x1 << 12) 726997b0520SBard Liao #define RT5640_PWR_DAC_L1_BIT 12 727997b0520SBard Liao #define RT5640_PWR_DAC_R1 (0x1 << 11) 728997b0520SBard Liao #define RT5640_PWR_DAC_R1_BIT 11 729997b0520SBard Liao #define RT5640_PWR_DAC_L2 (0x1 << 7) 730997b0520SBard Liao #define RT5640_PWR_DAC_L2_BIT 7 731997b0520SBard Liao #define RT5640_PWR_DAC_R2 (0x1 << 6) 732997b0520SBard Liao #define RT5640_PWR_DAC_R2_BIT 6 733997b0520SBard Liao #define RT5640_PWR_ADC_L (0x1 << 2) 734997b0520SBard Liao #define RT5640_PWR_ADC_L_BIT 2 735997b0520SBard Liao #define RT5640_PWR_ADC_R (0x1 << 1) 736997b0520SBard Liao #define RT5640_PWR_ADC_R_BIT 1 737997b0520SBard Liao #define RT5640_PWR_CLS_D (0x1) 738997b0520SBard Liao #define RT5640_PWR_CLS_D_BIT 0 739997b0520SBard Liao 740997b0520SBard Liao /* Power Management for Digital 2 (0x62) */ 741997b0520SBard Liao #define RT5640_PWR_ADC_SF (0x1 << 15) 742997b0520SBard Liao #define RT5640_PWR_ADC_SF_BIT 15 743997b0520SBard Liao #define RT5640_PWR_ADC_MF_L (0x1 << 14) 744997b0520SBard Liao #define RT5640_PWR_ADC_MF_L_BIT 14 745997b0520SBard Liao #define RT5640_PWR_ADC_MF_R (0x1 << 13) 746997b0520SBard Liao #define RT5640_PWR_ADC_MF_R_BIT 13 747997b0520SBard Liao #define RT5640_PWR_I2S_DSP (0x1 << 12) 748997b0520SBard Liao #define RT5640_PWR_I2S_DSP_BIT 12 749997b0520SBard Liao 750997b0520SBard Liao /* Power Management for Analog 1 (0x63) */ 751997b0520SBard Liao #define RT5640_PWR_VREF1 (0x1 << 15) 752997b0520SBard Liao #define RT5640_PWR_VREF1_BIT 15 753997b0520SBard Liao #define RT5640_PWR_FV1 (0x1 << 14) 754997b0520SBard Liao #define RT5640_PWR_FV1_BIT 14 755997b0520SBard Liao #define RT5640_PWR_MB (0x1 << 13) 756997b0520SBard Liao #define RT5640_PWR_MB_BIT 13 757997b0520SBard Liao #define RT5640_PWR_LM (0x1 << 12) 758997b0520SBard Liao #define RT5640_PWR_LM_BIT 12 759997b0520SBard Liao #define RT5640_PWR_BG (0x1 << 11) 760997b0520SBard Liao #define RT5640_PWR_BG_BIT 11 761997b0520SBard Liao #define RT5640_PWR_MM (0x1 << 10) 762997b0520SBard Liao #define RT5640_PWR_MM_BIT 10 763997b0520SBard Liao #define RT5640_PWR_MA (0x1 << 8) 764997b0520SBard Liao #define RT5640_PWR_MA_BIT 8 765997b0520SBard Liao #define RT5640_PWR_HP_L (0x1 << 7) 766997b0520SBard Liao #define RT5640_PWR_HP_L_BIT 7 767997b0520SBard Liao #define RT5640_PWR_HP_R (0x1 << 6) 768997b0520SBard Liao #define RT5640_PWR_HP_R_BIT 6 769997b0520SBard Liao #define RT5640_PWR_HA (0x1 << 5) 770997b0520SBard Liao #define RT5640_PWR_HA_BIT 5 771997b0520SBard Liao #define RT5640_PWR_VREF2 (0x1 << 4) 772997b0520SBard Liao #define RT5640_PWR_VREF2_BIT 4 773997b0520SBard Liao #define RT5640_PWR_FV2 (0x1 << 3) 774997b0520SBard Liao #define RT5640_PWR_FV2_BIT 3 775997b0520SBard Liao #define RT5640_PWR_LDO2 (0x1 << 2) 776997b0520SBard Liao #define RT5640_PWR_LDO2_BIT 2 777997b0520SBard Liao 778997b0520SBard Liao /* Power Management for Analog 2 (0x64) */ 779997b0520SBard Liao #define RT5640_PWR_BST1 (0x1 << 15) 780997b0520SBard Liao #define RT5640_PWR_BST1_BIT 15 781997b0520SBard Liao #define RT5640_PWR_BST2 (0x1 << 14) 782997b0520SBard Liao #define RT5640_PWR_BST2_BIT 14 783997b0520SBard Liao #define RT5640_PWR_BST3 (0x1 << 13) 784997b0520SBard Liao #define RT5640_PWR_BST3_BIT 13 785997b0520SBard Liao #define RT5640_PWR_BST4 (0x1 << 12) 786997b0520SBard Liao #define RT5640_PWR_BST4_BIT 12 787997b0520SBard Liao #define RT5640_PWR_MB1 (0x1 << 11) 788997b0520SBard Liao #define RT5640_PWR_MB1_BIT 11 789997b0520SBard Liao #define RT5640_PWR_PLL (0x1 << 9) 790997b0520SBard Liao #define RT5640_PWR_PLL_BIT 9 791997b0520SBard Liao 792997b0520SBard Liao /* Power Management for Mixer (0x65) */ 793997b0520SBard Liao #define RT5640_PWR_OM_L (0x1 << 15) 794997b0520SBard Liao #define RT5640_PWR_OM_L_BIT 15 795997b0520SBard Liao #define RT5640_PWR_OM_R (0x1 << 14) 796997b0520SBard Liao #define RT5640_PWR_OM_R_BIT 14 797997b0520SBard Liao #define RT5640_PWR_SM_L (0x1 << 13) 798997b0520SBard Liao #define RT5640_PWR_SM_L_BIT 13 799997b0520SBard Liao #define RT5640_PWR_SM_R (0x1 << 12) 800997b0520SBard Liao #define RT5640_PWR_SM_R_BIT 12 801997b0520SBard Liao #define RT5640_PWR_RM_L (0x1 << 11) 802997b0520SBard Liao #define RT5640_PWR_RM_L_BIT 11 803997b0520SBard Liao #define RT5640_PWR_RM_R (0x1 << 10) 804997b0520SBard Liao #define RT5640_PWR_RM_R_BIT 10 805997b0520SBard Liao 806997b0520SBard Liao /* Power Management for Volume (0x66) */ 807997b0520SBard Liao #define RT5640_PWR_SV_L (0x1 << 15) 808997b0520SBard Liao #define RT5640_PWR_SV_L_BIT 15 809997b0520SBard Liao #define RT5640_PWR_SV_R (0x1 << 14) 810997b0520SBard Liao #define RT5640_PWR_SV_R_BIT 14 811997b0520SBard Liao #define RT5640_PWR_OV_L (0x1 << 13) 812997b0520SBard Liao #define RT5640_PWR_OV_L_BIT 13 813997b0520SBard Liao #define RT5640_PWR_OV_R (0x1 << 12) 814997b0520SBard Liao #define RT5640_PWR_OV_R_BIT 12 815997b0520SBard Liao #define RT5640_PWR_HV_L (0x1 << 11) 816997b0520SBard Liao #define RT5640_PWR_HV_L_BIT 11 817997b0520SBard Liao #define RT5640_PWR_HV_R (0x1 << 10) 818997b0520SBard Liao #define RT5640_PWR_HV_R_BIT 10 819997b0520SBard Liao #define RT5640_PWR_IN_L (0x1 << 9) 820997b0520SBard Liao #define RT5640_PWR_IN_L_BIT 9 821997b0520SBard Liao #define RT5640_PWR_IN_R (0x1 << 8) 822997b0520SBard Liao #define RT5640_PWR_IN_R_BIT 8 823997b0520SBard Liao 824997b0520SBard Liao /* I2S1/2/3 Audio Serial Data Port Control (0x70 0x71 0x72) */ 825997b0520SBard Liao #define RT5640_I2S_MS_MASK (0x1 << 15) 826997b0520SBard Liao #define RT5640_I2S_MS_SFT 15 827997b0520SBard Liao #define RT5640_I2S_MS_M (0x0 << 15) 828997b0520SBard Liao #define RT5640_I2S_MS_S (0x1 << 15) 829997b0520SBard Liao #define RT5640_I2S_IF_MASK (0x7 << 12) 830997b0520SBard Liao #define RT5640_I2S_IF_SFT 12 831997b0520SBard Liao #define RT5640_I2S_O_CP_MASK (0x3 << 10) 832997b0520SBard Liao #define RT5640_I2S_O_CP_SFT 10 833997b0520SBard Liao #define RT5640_I2S_O_CP_OFF (0x0 << 10) 834997b0520SBard Liao #define RT5640_I2S_O_CP_U_LAW (0x1 << 10) 835997b0520SBard Liao #define RT5640_I2S_O_CP_A_LAW (0x2 << 10) 836997b0520SBard Liao #define RT5640_I2S_I_CP_MASK (0x3 << 8) 837997b0520SBard Liao #define RT5640_I2S_I_CP_SFT 8 838997b0520SBard Liao #define RT5640_I2S_I_CP_OFF (0x0 << 8) 839997b0520SBard Liao #define RT5640_I2S_I_CP_U_LAW (0x1 << 8) 840997b0520SBard Liao #define RT5640_I2S_I_CP_A_LAW (0x2 << 8) 841997b0520SBard Liao #define RT5640_I2S_BP_MASK (0x1 << 7) 842997b0520SBard Liao #define RT5640_I2S_BP_SFT 7 843997b0520SBard Liao #define RT5640_I2S_BP_NOR (0x0 << 7) 844997b0520SBard Liao #define RT5640_I2S_BP_INV (0x1 << 7) 845997b0520SBard Liao #define RT5640_I2S_DL_MASK (0x3 << 2) 846997b0520SBard Liao #define RT5640_I2S_DL_SFT 2 847997b0520SBard Liao #define RT5640_I2S_DL_16 (0x0 << 2) 848997b0520SBard Liao #define RT5640_I2S_DL_20 (0x1 << 2) 849997b0520SBard Liao #define RT5640_I2S_DL_24 (0x2 << 2) 850997b0520SBard Liao #define RT5640_I2S_DL_8 (0x3 << 2) 851997b0520SBard Liao #define RT5640_I2S_DF_MASK (0x3) 852997b0520SBard Liao #define RT5640_I2S_DF_SFT 0 853997b0520SBard Liao #define RT5640_I2S_DF_I2S (0x0) 854997b0520SBard Liao #define RT5640_I2S_DF_LEFT (0x1) 855997b0520SBard Liao #define RT5640_I2S_DF_PCM_A (0x2) 856997b0520SBard Liao #define RT5640_I2S_DF_PCM_B (0x3) 857997b0520SBard Liao 858997b0520SBard Liao /* I2S2 Audio Serial Data Port Control (0x71) */ 859997b0520SBard Liao #define RT5640_I2S2_SDI_MASK (0x1 << 6) 860997b0520SBard Liao #define RT5640_I2S2_SDI_SFT 6 861997b0520SBard Liao #define RT5640_I2S2_SDI_I2S1 (0x0 << 6) 862997b0520SBard Liao #define RT5640_I2S2_SDI_I2S2 (0x1 << 6) 863997b0520SBard Liao 864997b0520SBard Liao /* ADC/DAC Clock Control 1 (0x73) */ 865997b0520SBard Liao #define RT5640_I2S_BCLK_MS1_MASK (0x1 << 15) 866997b0520SBard Liao #define RT5640_I2S_BCLK_MS1_SFT 15 867997b0520SBard Liao #define RT5640_I2S_BCLK_MS1_32 (0x0 << 15) 868997b0520SBard Liao #define RT5640_I2S_BCLK_MS1_64 (0x1 << 15) 869997b0520SBard Liao #define RT5640_I2S_PD1_MASK (0x7 << 12) 870997b0520SBard Liao #define RT5640_I2S_PD1_SFT 12 871997b0520SBard Liao #define RT5640_I2S_PD1_1 (0x0 << 12) 872997b0520SBard Liao #define RT5640_I2S_PD1_2 (0x1 << 12) 873997b0520SBard Liao #define RT5640_I2S_PD1_3 (0x2 << 12) 874997b0520SBard Liao #define RT5640_I2S_PD1_4 (0x3 << 12) 875997b0520SBard Liao #define RT5640_I2S_PD1_6 (0x4 << 12) 876997b0520SBard Liao #define RT5640_I2S_PD1_8 (0x5 << 12) 877997b0520SBard Liao #define RT5640_I2S_PD1_12 (0x6 << 12) 878997b0520SBard Liao #define RT5640_I2S_PD1_16 (0x7 << 12) 879997b0520SBard Liao #define RT5640_I2S_BCLK_MS2_MASK (0x1 << 11) 880997b0520SBard Liao #define RT5640_I2S_BCLK_MS2_SFT 11 881997b0520SBard Liao #define RT5640_I2S_BCLK_MS2_32 (0x0 << 11) 882997b0520SBard Liao #define RT5640_I2S_BCLK_MS2_64 (0x1 << 11) 883997b0520SBard Liao #define RT5640_I2S_PD2_MASK (0x7 << 8) 884997b0520SBard Liao #define RT5640_I2S_PD2_SFT 8 885997b0520SBard Liao #define RT5640_I2S_PD2_1 (0x0 << 8) 886997b0520SBard Liao #define RT5640_I2S_PD2_2 (0x1 << 8) 887997b0520SBard Liao #define RT5640_I2S_PD2_3 (0x2 << 8) 888997b0520SBard Liao #define RT5640_I2S_PD2_4 (0x3 << 8) 889997b0520SBard Liao #define RT5640_I2S_PD2_6 (0x4 << 8) 890997b0520SBard Liao #define RT5640_I2S_PD2_8 (0x5 << 8) 891997b0520SBard Liao #define RT5640_I2S_PD2_12 (0x6 << 8) 892997b0520SBard Liao #define RT5640_I2S_PD2_16 (0x7 << 8) 893997b0520SBard Liao #define RT5640_I2S_BCLK_MS3_MASK (0x1 << 7) 894997b0520SBard Liao #define RT5640_I2S_BCLK_MS3_SFT 7 895997b0520SBard Liao #define RT5640_I2S_BCLK_MS3_32 (0x0 << 7) 896997b0520SBard Liao #define RT5640_I2S_BCLK_MS3_64 (0x1 << 7) 897997b0520SBard Liao #define RT5640_I2S_PD3_MASK (0x7 << 4) 898997b0520SBard Liao #define RT5640_I2S_PD3_SFT 4 899997b0520SBard Liao #define RT5640_I2S_PD3_1 (0x0 << 4) 900997b0520SBard Liao #define RT5640_I2S_PD3_2 (0x1 << 4) 901997b0520SBard Liao #define RT5640_I2S_PD3_3 (0x2 << 4) 902997b0520SBard Liao #define RT5640_I2S_PD3_4 (0x3 << 4) 903997b0520SBard Liao #define RT5640_I2S_PD3_6 (0x4 << 4) 904997b0520SBard Liao #define RT5640_I2S_PD3_8 (0x5 << 4) 905997b0520SBard Liao #define RT5640_I2S_PD3_12 (0x6 << 4) 906997b0520SBard Liao #define RT5640_I2S_PD3_16 (0x7 << 4) 907997b0520SBard Liao #define RT5640_DAC_OSR_MASK (0x3 << 2) 908997b0520SBard Liao #define RT5640_DAC_OSR_SFT 2 909997b0520SBard Liao #define RT5640_DAC_OSR_128 (0x0 << 2) 910997b0520SBard Liao #define RT5640_DAC_OSR_64 (0x1 << 2) 911997b0520SBard Liao #define RT5640_DAC_OSR_32 (0x2 << 2) 912997b0520SBard Liao #define RT5640_DAC_OSR_16 (0x3 << 2) 913997b0520SBard Liao #define RT5640_ADC_OSR_MASK (0x3) 914997b0520SBard Liao #define RT5640_ADC_OSR_SFT 0 915997b0520SBard Liao #define RT5640_ADC_OSR_128 (0x0) 916997b0520SBard Liao #define RT5640_ADC_OSR_64 (0x1) 917997b0520SBard Liao #define RT5640_ADC_OSR_32 (0x2) 918997b0520SBard Liao #define RT5640_ADC_OSR_16 (0x3) 919997b0520SBard Liao 920997b0520SBard Liao /* ADC/DAC Clock Control 2 (0x74) */ 921997b0520SBard Liao #define RT5640_DAC_L_OSR_MASK (0x3 << 14) 922997b0520SBard Liao #define RT5640_DAC_L_OSR_SFT 14 923997b0520SBard Liao #define RT5640_DAC_L_OSR_128 (0x0 << 14) 924997b0520SBard Liao #define RT5640_DAC_L_OSR_64 (0x1 << 14) 925997b0520SBard Liao #define RT5640_DAC_L_OSR_32 (0x2 << 14) 926997b0520SBard Liao #define RT5640_DAC_L_OSR_16 (0x3 << 14) 927997b0520SBard Liao #define RT5640_ADC_R_OSR_MASK (0x3 << 12) 928997b0520SBard Liao #define RT5640_ADC_R_OSR_SFT 12 929997b0520SBard Liao #define RT5640_ADC_R_OSR_128 (0x0 << 12) 930997b0520SBard Liao #define RT5640_ADC_R_OSR_64 (0x1 << 12) 931997b0520SBard Liao #define RT5640_ADC_R_OSR_32 (0x2 << 12) 932997b0520SBard Liao #define RT5640_ADC_R_OSR_16 (0x3 << 12) 933997b0520SBard Liao #define RT5640_DAHPF_EN (0x1 << 11) 934997b0520SBard Liao #define RT5640_DAHPF_EN_SFT 11 935997b0520SBard Liao #define RT5640_ADHPF_EN (0x1 << 10) 936997b0520SBard Liao #define RT5640_ADHPF_EN_SFT 10 937997b0520SBard Liao 938997b0520SBard Liao /* Digital Microphone Control (0x75) */ 939997b0520SBard Liao #define RT5640_DMIC_1_EN_MASK (0x1 << 15) 940997b0520SBard Liao #define RT5640_DMIC_1_EN_SFT 15 941997b0520SBard Liao #define RT5640_DMIC_1_DIS (0x0 << 15) 942997b0520SBard Liao #define RT5640_DMIC_1_EN (0x1 << 15) 943997b0520SBard Liao #define RT5640_DMIC_2_EN_MASK (0x1 << 14) 944997b0520SBard Liao #define RT5640_DMIC_2_EN_SFT 14 945997b0520SBard Liao #define RT5640_DMIC_2_DIS (0x0 << 14) 946997b0520SBard Liao #define RT5640_DMIC_2_EN (0x1 << 14) 947997b0520SBard Liao #define RT5640_DMIC_1L_LH_MASK (0x1 << 13) 948997b0520SBard Liao #define RT5640_DMIC_1L_LH_SFT 13 949997b0520SBard Liao #define RT5640_DMIC_1L_LH_FALLING (0x0 << 13) 950997b0520SBard Liao #define RT5640_DMIC_1L_LH_RISING (0x1 << 13) 951997b0520SBard Liao #define RT5640_DMIC_1R_LH_MASK (0x1 << 12) 952997b0520SBard Liao #define RT5640_DMIC_1R_LH_SFT 12 953997b0520SBard Liao #define RT5640_DMIC_1R_LH_FALLING (0x0 << 12) 954997b0520SBard Liao #define RT5640_DMIC_1R_LH_RISING (0x1 << 12) 955997b0520SBard Liao #define RT5640_DMIC_1_DP_MASK (0x1 << 11) 956997b0520SBard Liao #define RT5640_DMIC_1_DP_SFT 11 957997b0520SBard Liao #define RT5640_DMIC_1_DP_GPIO3 (0x0 << 11) 958997b0520SBard Liao #define RT5640_DMIC_1_DP_IN1P (0x1 << 11) 959997b0520SBard Liao #define RT5640_DMIC_2_DP_MASK (0x1 << 10) 960997b0520SBard Liao #define RT5640_DMIC_2_DP_SFT 10 961997b0520SBard Liao #define RT5640_DMIC_2_DP_GPIO4 (0x0 << 10) 962997b0520SBard Liao #define RT5640_DMIC_2_DP_IN1N (0x1 << 10) 963997b0520SBard Liao #define RT5640_DMIC_2L_LH_MASK (0x1 << 9) 964997b0520SBard Liao #define RT5640_DMIC_2L_LH_SFT 9 965997b0520SBard Liao #define RT5640_DMIC_2L_LH_FALLING (0x0 << 9) 966997b0520SBard Liao #define RT5640_DMIC_2L_LH_RISING (0x1 << 9) 967997b0520SBard Liao #define RT5640_DMIC_2R_LH_MASK (0x1 << 8) 968997b0520SBard Liao #define RT5640_DMIC_2R_LH_SFT 8 969997b0520SBard Liao #define RT5640_DMIC_2R_LH_FALLING (0x0 << 8) 970997b0520SBard Liao #define RT5640_DMIC_2R_LH_RISING (0x1 << 8) 971997b0520SBard Liao #define RT5640_DMIC_CLK_MASK (0x7 << 5) 972997b0520SBard Liao #define RT5640_DMIC_CLK_SFT 5 973997b0520SBard Liao 974997b0520SBard Liao /* Global Clock Control (0x80) */ 975997b0520SBard Liao #define RT5640_SCLK_SRC_MASK (0x3 << 14) 976997b0520SBard Liao #define RT5640_SCLK_SRC_SFT 14 977997b0520SBard Liao #define RT5640_SCLK_SRC_MCLK (0x0 << 14) 978997b0520SBard Liao #define RT5640_SCLK_SRC_PLL1 (0x1 << 14) 979997b0520SBard Liao #define RT5640_SCLK_SRC_PLL1T (0x2 << 14) 980997b0520SBard Liao #define RT5640_SCLK_SRC_RCCLK (0x3 << 14) /* 15MHz */ 981997b0520SBard Liao #define RT5640_PLL1_SRC_MASK (0x3 << 12) 982997b0520SBard Liao #define RT5640_PLL1_SRC_SFT 12 983997b0520SBard Liao #define RT5640_PLL1_SRC_MCLK (0x0 << 12) 984997b0520SBard Liao #define RT5640_PLL1_SRC_BCLK1 (0x1 << 12) 985997b0520SBard Liao #define RT5640_PLL1_SRC_BCLK2 (0x2 << 12) 986997b0520SBard Liao #define RT5640_PLL1_SRC_BCLK3 (0x3 << 12) 987997b0520SBard Liao #define RT5640_PLL1_PD_MASK (0x1 << 3) 988997b0520SBard Liao #define RT5640_PLL1_PD_SFT 3 989997b0520SBard Liao #define RT5640_PLL1_PD_1 (0x0 << 3) 990997b0520SBard Liao #define RT5640_PLL1_PD_2 (0x1 << 3) 991997b0520SBard Liao 992997b0520SBard Liao #define RT5640_PLL_INP_MAX 40000000 993997b0520SBard Liao #define RT5640_PLL_INP_MIN 256000 994997b0520SBard Liao /* PLL M/N/K Code Control 1 (0x81) */ 995997b0520SBard Liao #define RT5640_PLL_N_MAX 0x1ff 996997b0520SBard Liao #define RT5640_PLL_N_MASK (RT5640_PLL_N_MAX << 7) 997997b0520SBard Liao #define RT5640_PLL_N_SFT 7 998997b0520SBard Liao #define RT5640_PLL_K_MAX 0x1f 999997b0520SBard Liao #define RT5640_PLL_K_MASK (RT5640_PLL_K_MAX) 1000997b0520SBard Liao #define RT5640_PLL_K_SFT 0 1001997b0520SBard Liao 1002997b0520SBard Liao /* PLL M/N/K Code Control 2 (0x82) */ 1003997b0520SBard Liao #define RT5640_PLL_M_MAX 0xf 1004997b0520SBard Liao #define RT5640_PLL_M_MASK (RT5640_PLL_M_MAX << 12) 1005997b0520SBard Liao #define RT5640_PLL_M_SFT 12 1006997b0520SBard Liao #define RT5640_PLL_M_BP (0x1 << 11) 1007997b0520SBard Liao #define RT5640_PLL_M_BP_SFT 11 1008997b0520SBard Liao 1009997b0520SBard Liao /* ASRC Control 1 (0x83) */ 1010997b0520SBard Liao #define RT5640_STO_T_MASK (0x1 << 15) 1011997b0520SBard Liao #define RT5640_STO_T_SFT 15 1012997b0520SBard Liao #define RT5640_STO_T_SCLK (0x0 << 15) 1013997b0520SBard Liao #define RT5640_STO_T_LRCK1 (0x1 << 15) 1014997b0520SBard Liao #define RT5640_M1_T_MASK (0x1 << 14) 1015997b0520SBard Liao #define RT5640_M1_T_SFT 14 1016997b0520SBard Liao #define RT5640_M1_T_I2S2 (0x0 << 14) 1017997b0520SBard Liao #define RT5640_M1_T_I2S2_D3 (0x1 << 14) 1018997b0520SBard Liao #define RT5640_I2S2_F_MASK (0x1 << 12) 1019997b0520SBard Liao #define RT5640_I2S2_F_SFT 12 1020997b0520SBard Liao #define RT5640_I2S2_F_I2S2_D2 (0x0 << 12) 1021997b0520SBard Liao #define RT5640_I2S2_F_I2S1_TCLK (0x1 << 12) 1022997b0520SBard Liao #define RT5640_DMIC_1_M_MASK (0x1 << 9) 1023997b0520SBard Liao #define RT5640_DMIC_1_M_SFT 9 1024997b0520SBard Liao #define RT5640_DMIC_1_M_NOR (0x0 << 9) 1025997b0520SBard Liao #define RT5640_DMIC_1_M_ASYN (0x1 << 9) 1026997b0520SBard Liao #define RT5640_DMIC_2_M_MASK (0x1 << 8) 1027997b0520SBard Liao #define RT5640_DMIC_2_M_SFT 8 1028997b0520SBard Liao #define RT5640_DMIC_2_M_NOR (0x0 << 8) 1029997b0520SBard Liao #define RT5640_DMIC_2_M_ASYN (0x1 << 8) 1030997b0520SBard Liao 1031997b0520SBard Liao /* ASRC Control 2 (0x84) */ 1032997b0520SBard Liao #define RT5640_MDA_L_M_MASK (0x1 << 15) 1033997b0520SBard Liao #define RT5640_MDA_L_M_SFT 15 1034997b0520SBard Liao #define RT5640_MDA_L_M_NOR (0x0 << 15) 1035997b0520SBard Liao #define RT5640_MDA_L_M_ASYN (0x1 << 15) 1036997b0520SBard Liao #define RT5640_MDA_R_M_MASK (0x1 << 14) 1037997b0520SBard Liao #define RT5640_MDA_R_M_SFT 14 1038997b0520SBard Liao #define RT5640_MDA_R_M_NOR (0x0 << 14) 1039997b0520SBard Liao #define RT5640_MDA_R_M_ASYN (0x1 << 14) 1040997b0520SBard Liao #define RT5640_MAD_L_M_MASK (0x1 << 13) 1041997b0520SBard Liao #define RT5640_MAD_L_M_SFT 13 1042997b0520SBard Liao #define RT5640_MAD_L_M_NOR (0x0 << 13) 1043997b0520SBard Liao #define RT5640_MAD_L_M_ASYN (0x1 << 13) 1044997b0520SBard Liao #define RT5640_MAD_R_M_MASK (0x1 << 12) 1045997b0520SBard Liao #define RT5640_MAD_R_M_SFT 12 1046997b0520SBard Liao #define RT5640_MAD_R_M_NOR (0x0 << 12) 1047997b0520SBard Liao #define RT5640_MAD_R_M_ASYN (0x1 << 12) 1048997b0520SBard Liao #define RT5640_ADC_M_MASK (0x1 << 11) 1049997b0520SBard Liao #define RT5640_ADC_M_SFT 11 1050997b0520SBard Liao #define RT5640_ADC_M_NOR (0x0 << 11) 1051997b0520SBard Liao #define RT5640_ADC_M_ASYN (0x1 << 11) 1052997b0520SBard Liao #define RT5640_STO_DAC_M_MASK (0x1 << 5) 1053997b0520SBard Liao #define RT5640_STO_DAC_M_SFT 5 1054997b0520SBard Liao #define RT5640_STO_DAC_M_NOR (0x0 << 5) 1055997b0520SBard Liao #define RT5640_STO_DAC_M_ASYN (0x1 << 5) 1056997b0520SBard Liao #define RT5640_I2S1_R_D_MASK (0x1 << 4) 1057997b0520SBard Liao #define RT5640_I2S1_R_D_SFT 4 1058997b0520SBard Liao #define RT5640_I2S1_R_D_DIS (0x0 << 4) 1059997b0520SBard Liao #define RT5640_I2S1_R_D_EN (0x1 << 4) 1060997b0520SBard Liao #define RT5640_I2S2_R_D_MASK (0x1 << 3) 1061997b0520SBard Liao #define RT5640_I2S2_R_D_SFT 3 1062997b0520SBard Liao #define RT5640_I2S2_R_D_DIS (0x0 << 3) 1063997b0520SBard Liao #define RT5640_I2S2_R_D_EN (0x1 << 3) 1064997b0520SBard Liao #define RT5640_PRE_SCLK_MASK (0x3) 1065997b0520SBard Liao #define RT5640_PRE_SCLK_SFT 0 1066997b0520SBard Liao #define RT5640_PRE_SCLK_512 (0x0) 1067997b0520SBard Liao #define RT5640_PRE_SCLK_1024 (0x1) 1068997b0520SBard Liao #define RT5640_PRE_SCLK_2048 (0x2) 1069997b0520SBard Liao 1070997b0520SBard Liao /* ASRC Control 3 (0x85) */ 1071997b0520SBard Liao #define RT5640_I2S1_RATE_MASK (0xf << 12) 1072997b0520SBard Liao #define RT5640_I2S1_RATE_SFT 12 1073997b0520SBard Liao #define RT5640_I2S2_RATE_MASK (0xf << 8) 1074997b0520SBard Liao #define RT5640_I2S2_RATE_SFT 8 1075997b0520SBard Liao 1076997b0520SBard Liao /* ASRC Control 4 (0x89) */ 1077997b0520SBard Liao #define RT5640_I2S1_PD_MASK (0x7 << 12) 1078997b0520SBard Liao #define RT5640_I2S1_PD_SFT 12 1079997b0520SBard Liao #define RT5640_I2S2_PD_MASK (0x7 << 8) 1080997b0520SBard Liao #define RT5640_I2S2_PD_SFT 8 1081997b0520SBard Liao 1082997b0520SBard Liao /* HPOUT Over Current Detection (0x8b) */ 1083997b0520SBard Liao #define RT5640_HP_OVCD_MASK (0x1 << 10) 1084997b0520SBard Liao #define RT5640_HP_OVCD_SFT 10 1085997b0520SBard Liao #define RT5640_HP_OVCD_DIS (0x0 << 10) 1086997b0520SBard Liao #define RT5640_HP_OVCD_EN (0x1 << 10) 1087997b0520SBard Liao #define RT5640_HP_OC_TH_MASK (0x3 << 8) 1088997b0520SBard Liao #define RT5640_HP_OC_TH_SFT 8 1089997b0520SBard Liao #define RT5640_HP_OC_TH_90 (0x0 << 8) 1090997b0520SBard Liao #define RT5640_HP_OC_TH_105 (0x1 << 8) 1091997b0520SBard Liao #define RT5640_HP_OC_TH_120 (0x2 << 8) 1092997b0520SBard Liao #define RT5640_HP_OC_TH_135 (0x3 << 8) 1093997b0520SBard Liao 1094997b0520SBard Liao /* Class D Over Current Control (0x8c) */ 1095997b0520SBard Liao #define RT5640_CLSD_OC_MASK (0x1 << 9) 1096997b0520SBard Liao #define RT5640_CLSD_OC_SFT 9 1097997b0520SBard Liao #define RT5640_CLSD_OC_PU (0x0 << 9) 1098997b0520SBard Liao #define RT5640_CLSD_OC_PD (0x1 << 9) 1099997b0520SBard Liao #define RT5640_AUTO_PD_MASK (0x1 << 8) 1100997b0520SBard Liao #define RT5640_AUTO_PD_SFT 8 1101997b0520SBard Liao #define RT5640_AUTO_PD_DIS (0x0 << 8) 1102997b0520SBard Liao #define RT5640_AUTO_PD_EN (0x1 << 8) 1103997b0520SBard Liao #define RT5640_CLSD_OC_TH_MASK (0x3f) 1104997b0520SBard Liao #define RT5640_CLSD_OC_TH_SFT 0 1105997b0520SBard Liao 1106997b0520SBard Liao /* Class D Output Control (0x8d) */ 1107997b0520SBard Liao #define RT5640_CLSD_RATIO_MASK (0xf << 12) 1108997b0520SBard Liao #define RT5640_CLSD_RATIO_SFT 12 1109997b0520SBard Liao #define RT5640_CLSD_OM_MASK (0x1 << 11) 1110997b0520SBard Liao #define RT5640_CLSD_OM_SFT 11 1111997b0520SBard Liao #define RT5640_CLSD_OM_MONO (0x0 << 11) 1112997b0520SBard Liao #define RT5640_CLSD_OM_STO (0x1 << 11) 1113997b0520SBard Liao #define RT5640_CLSD_SCH_MASK (0x1 << 10) 1114997b0520SBard Liao #define RT5640_CLSD_SCH_SFT 10 1115997b0520SBard Liao #define RT5640_CLSD_SCH_L (0x0 << 10) 1116997b0520SBard Liao #define RT5640_CLSD_SCH_S (0x1 << 10) 1117997b0520SBard Liao 1118997b0520SBard Liao /* Depop Mode Control 1 (0x8e) */ 1119997b0520SBard Liao #define RT5640_SMT_TRIG_MASK (0x1 << 15) 1120997b0520SBard Liao #define RT5640_SMT_TRIG_SFT 15 1121997b0520SBard Liao #define RT5640_SMT_TRIG_DIS (0x0 << 15) 1122997b0520SBard Liao #define RT5640_SMT_TRIG_EN (0x1 << 15) 1123997b0520SBard Liao #define RT5640_HP_L_SMT_MASK (0x1 << 9) 1124997b0520SBard Liao #define RT5640_HP_L_SMT_SFT 9 1125997b0520SBard Liao #define RT5640_HP_L_SMT_DIS (0x0 << 9) 1126997b0520SBard Liao #define RT5640_HP_L_SMT_EN (0x1 << 9) 1127997b0520SBard Liao #define RT5640_HP_R_SMT_MASK (0x1 << 8) 1128997b0520SBard Liao #define RT5640_HP_R_SMT_SFT 8 1129997b0520SBard Liao #define RT5640_HP_R_SMT_DIS (0x0 << 8) 1130997b0520SBard Liao #define RT5640_HP_R_SMT_EN (0x1 << 8) 1131997b0520SBard Liao #define RT5640_HP_CD_PD_MASK (0x1 << 7) 1132997b0520SBard Liao #define RT5640_HP_CD_PD_SFT 7 1133997b0520SBard Liao #define RT5640_HP_CD_PD_DIS (0x0 << 7) 1134997b0520SBard Liao #define RT5640_HP_CD_PD_EN (0x1 << 7) 1135997b0520SBard Liao #define RT5640_RSTN_MASK (0x1 << 6) 1136997b0520SBard Liao #define RT5640_RSTN_SFT 6 1137997b0520SBard Liao #define RT5640_RSTN_DIS (0x0 << 6) 1138997b0520SBard Liao #define RT5640_RSTN_EN (0x1 << 6) 1139997b0520SBard Liao #define RT5640_RSTP_MASK (0x1 << 5) 1140997b0520SBard Liao #define RT5640_RSTP_SFT 5 1141997b0520SBard Liao #define RT5640_RSTP_DIS (0x0 << 5) 1142997b0520SBard Liao #define RT5640_RSTP_EN (0x1 << 5) 1143997b0520SBard Liao #define RT5640_HP_CO_MASK (0x1 << 4) 1144997b0520SBard Liao #define RT5640_HP_CO_SFT 4 1145997b0520SBard Liao #define RT5640_HP_CO_DIS (0x0 << 4) 1146997b0520SBard Liao #define RT5640_HP_CO_EN (0x1 << 4) 1147997b0520SBard Liao #define RT5640_HP_CP_MASK (0x1 << 3) 1148997b0520SBard Liao #define RT5640_HP_CP_SFT 3 1149997b0520SBard Liao #define RT5640_HP_CP_PD (0x0 << 3) 1150997b0520SBard Liao #define RT5640_HP_CP_PU (0x1 << 3) 1151997b0520SBard Liao #define RT5640_HP_SG_MASK (0x1 << 2) 1152997b0520SBard Liao #define RT5640_HP_SG_SFT 2 1153997b0520SBard Liao #define RT5640_HP_SG_DIS (0x0 << 2) 1154997b0520SBard Liao #define RT5640_HP_SG_EN (0x1 << 2) 1155997b0520SBard Liao #define RT5640_HP_DP_MASK (0x1 << 1) 1156997b0520SBard Liao #define RT5640_HP_DP_SFT 1 1157997b0520SBard Liao #define RT5640_HP_DP_PD (0x0 << 1) 1158997b0520SBard Liao #define RT5640_HP_DP_PU (0x1 << 1) 1159997b0520SBard Liao #define RT5640_HP_CB_MASK (0x1) 1160997b0520SBard Liao #define RT5640_HP_CB_SFT 0 1161997b0520SBard Liao #define RT5640_HP_CB_PD (0x0) 1162997b0520SBard Liao #define RT5640_HP_CB_PU (0x1) 1163997b0520SBard Liao 1164997b0520SBard Liao /* Depop Mode Control 2 (0x8f) */ 1165997b0520SBard Liao #define RT5640_DEPOP_MASK (0x1 << 13) 1166997b0520SBard Liao #define RT5640_DEPOP_SFT 13 1167997b0520SBard Liao #define RT5640_DEPOP_AUTO (0x0 << 13) 1168997b0520SBard Liao #define RT5640_DEPOP_MAN (0x1 << 13) 1169997b0520SBard Liao #define RT5640_RAMP_MASK (0x1 << 12) 1170997b0520SBard Liao #define RT5640_RAMP_SFT 12 1171997b0520SBard Liao #define RT5640_RAMP_DIS (0x0 << 12) 1172997b0520SBard Liao #define RT5640_RAMP_EN (0x1 << 12) 1173997b0520SBard Liao #define RT5640_BPS_MASK (0x1 << 11) 1174997b0520SBard Liao #define RT5640_BPS_SFT 11 1175997b0520SBard Liao #define RT5640_BPS_DIS (0x0 << 11) 1176997b0520SBard Liao #define RT5640_BPS_EN (0x1 << 11) 1177997b0520SBard Liao #define RT5640_FAST_UPDN_MASK (0x1 << 10) 1178997b0520SBard Liao #define RT5640_FAST_UPDN_SFT 10 1179997b0520SBard Liao #define RT5640_FAST_UPDN_DIS (0x0 << 10) 1180997b0520SBard Liao #define RT5640_FAST_UPDN_EN (0x1 << 10) 1181997b0520SBard Liao #define RT5640_MRES_MASK (0x3 << 8) 1182997b0520SBard Liao #define RT5640_MRES_SFT 8 1183997b0520SBard Liao #define RT5640_MRES_15MO (0x0 << 8) 1184997b0520SBard Liao #define RT5640_MRES_25MO (0x1 << 8) 1185997b0520SBard Liao #define RT5640_MRES_35MO (0x2 << 8) 1186997b0520SBard Liao #define RT5640_MRES_45MO (0x3 << 8) 1187997b0520SBard Liao #define RT5640_VLO_MASK (0x1 << 7) 1188997b0520SBard Liao #define RT5640_VLO_SFT 7 1189997b0520SBard Liao #define RT5640_VLO_3V (0x0 << 7) 1190997b0520SBard Liao #define RT5640_VLO_32V (0x1 << 7) 1191997b0520SBard Liao #define RT5640_DIG_DP_MASK (0x1 << 6) 1192997b0520SBard Liao #define RT5640_DIG_DP_SFT 6 1193997b0520SBard Liao #define RT5640_DIG_DP_DIS (0x0 << 6) 1194997b0520SBard Liao #define RT5640_DIG_DP_EN (0x1 << 6) 1195997b0520SBard Liao #define RT5640_DP_TH_MASK (0x3 << 4) 1196997b0520SBard Liao #define RT5640_DP_TH_SFT 4 1197997b0520SBard Liao 1198997b0520SBard Liao /* Depop Mode Control 3 (0x90) */ 1199997b0520SBard Liao #define RT5640_CP_SYS_MASK (0x7 << 12) 1200997b0520SBard Liao #define RT5640_CP_SYS_SFT 12 1201997b0520SBard Liao #define RT5640_CP_FQ1_MASK (0x7 << 8) 1202997b0520SBard Liao #define RT5640_CP_FQ1_SFT 8 1203997b0520SBard Liao #define RT5640_CP_FQ2_MASK (0x7 << 4) 1204997b0520SBard Liao #define RT5640_CP_FQ2_SFT 4 1205997b0520SBard Liao #define RT5640_CP_FQ3_MASK (0x7) 1206997b0520SBard Liao #define RT5640_CP_FQ3_SFT 0 1207*246693baSBard Liao #define RT5640_CP_FQ_1_5_KHZ 0 1208*246693baSBard Liao #define RT5640_CP_FQ_3_KHZ 1 1209*246693baSBard Liao #define RT5640_CP_FQ_6_KHZ 2 1210*246693baSBard Liao #define RT5640_CP_FQ_12_KHZ 3 1211*246693baSBard Liao #define RT5640_CP_FQ_24_KHZ 4 1212*246693baSBard Liao #define RT5640_CP_FQ_48_KHZ 5 1213*246693baSBard Liao #define RT5640_CP_FQ_96_KHZ 6 1214*246693baSBard Liao #define RT5640_CP_FQ_192_KHZ 7 1215997b0520SBard Liao 1216997b0520SBard Liao /* HPOUT charge pump (0x91) */ 1217997b0520SBard Liao #define RT5640_OSW_L_MASK (0x1 << 11) 1218997b0520SBard Liao #define RT5640_OSW_L_SFT 11 1219997b0520SBard Liao #define RT5640_OSW_L_DIS (0x0 << 11) 1220997b0520SBard Liao #define RT5640_OSW_L_EN (0x1 << 11) 1221997b0520SBard Liao #define RT5640_OSW_R_MASK (0x1 << 10) 1222997b0520SBard Liao #define RT5640_OSW_R_SFT 10 1223997b0520SBard Liao #define RT5640_OSW_R_DIS (0x0 << 10) 1224997b0520SBard Liao #define RT5640_OSW_R_EN (0x1 << 10) 1225997b0520SBard Liao #define RT5640_PM_HP_MASK (0x3 << 8) 1226997b0520SBard Liao #define RT5640_PM_HP_SFT 8 1227997b0520SBard Liao #define RT5640_PM_HP_LV (0x0 << 8) 1228997b0520SBard Liao #define RT5640_PM_HP_MV (0x1 << 8) 1229997b0520SBard Liao #define RT5640_PM_HP_HV (0x2 << 8) 1230997b0520SBard Liao #define RT5640_IB_HP_MASK (0x3 << 6) 1231997b0520SBard Liao #define RT5640_IB_HP_SFT 6 1232997b0520SBard Liao #define RT5640_IB_HP_125IL (0x0 << 6) 1233997b0520SBard Liao #define RT5640_IB_HP_25IL (0x1 << 6) 1234997b0520SBard Liao #define RT5640_IB_HP_5IL (0x2 << 6) 1235997b0520SBard Liao #define RT5640_IB_HP_1IL (0x3 << 6) 1236997b0520SBard Liao 1237997b0520SBard Liao /* PV detection and SPK gain control (0x92) */ 1238997b0520SBard Liao #define RT5640_PVDD_DET_MASK (0x1 << 15) 1239997b0520SBard Liao #define RT5640_PVDD_DET_SFT 15 1240997b0520SBard Liao #define RT5640_PVDD_DET_DIS (0x0 << 15) 1241997b0520SBard Liao #define RT5640_PVDD_DET_EN (0x1 << 15) 1242997b0520SBard Liao #define RT5640_SPK_AG_MASK (0x1 << 14) 1243997b0520SBard Liao #define RT5640_SPK_AG_SFT 14 1244997b0520SBard Liao #define RT5640_SPK_AG_DIS (0x0 << 14) 1245997b0520SBard Liao #define RT5640_SPK_AG_EN (0x1 << 14) 1246997b0520SBard Liao 1247997b0520SBard Liao /* Micbias Control (0x93) */ 1248997b0520SBard Liao #define RT5640_MIC1_BS_MASK (0x1 << 15) 1249997b0520SBard Liao #define RT5640_MIC1_BS_SFT 15 1250997b0520SBard Liao #define RT5640_MIC1_BS_9AV (0x0 << 15) 1251997b0520SBard Liao #define RT5640_MIC1_BS_75AV (0x1 << 15) 1252997b0520SBard Liao #define RT5640_MIC2_BS_MASK (0x1 << 14) 1253997b0520SBard Liao #define RT5640_MIC2_BS_SFT 14 1254997b0520SBard Liao #define RT5640_MIC2_BS_9AV (0x0 << 14) 1255997b0520SBard Liao #define RT5640_MIC2_BS_75AV (0x1 << 14) 1256997b0520SBard Liao #define RT5640_MIC1_CLK_MASK (0x1 << 13) 1257997b0520SBard Liao #define RT5640_MIC1_CLK_SFT 13 1258997b0520SBard Liao #define RT5640_MIC1_CLK_DIS (0x0 << 13) 1259997b0520SBard Liao #define RT5640_MIC1_CLK_EN (0x1 << 13) 1260997b0520SBard Liao #define RT5640_MIC2_CLK_MASK (0x1 << 12) 1261997b0520SBard Liao #define RT5640_MIC2_CLK_SFT 12 1262997b0520SBard Liao #define RT5640_MIC2_CLK_DIS (0x0 << 12) 1263997b0520SBard Liao #define RT5640_MIC2_CLK_EN (0x1 << 12) 1264997b0520SBard Liao #define RT5640_MIC1_OVCD_MASK (0x1 << 11) 1265997b0520SBard Liao #define RT5640_MIC1_OVCD_SFT 11 1266997b0520SBard Liao #define RT5640_MIC1_OVCD_DIS (0x0 << 11) 1267997b0520SBard Liao #define RT5640_MIC1_OVCD_EN (0x1 << 11) 1268997b0520SBard Liao #define RT5640_MIC1_OVTH_MASK (0x3 << 9) 1269997b0520SBard Liao #define RT5640_MIC1_OVTH_SFT 9 1270997b0520SBard Liao #define RT5640_MIC1_OVTH_600UA (0x0 << 9) 1271997b0520SBard Liao #define RT5640_MIC1_OVTH_1500UA (0x1 << 9) 1272997b0520SBard Liao #define RT5640_MIC1_OVTH_2000UA (0x2 << 9) 1273997b0520SBard Liao #define RT5640_MIC2_OVCD_MASK (0x1 << 8) 1274997b0520SBard Liao #define RT5640_MIC2_OVCD_SFT 8 1275997b0520SBard Liao #define RT5640_MIC2_OVCD_DIS (0x0 << 8) 1276997b0520SBard Liao #define RT5640_MIC2_OVCD_EN (0x1 << 8) 1277997b0520SBard Liao #define RT5640_MIC2_OVTH_MASK (0x3 << 6) 1278997b0520SBard Liao #define RT5640_MIC2_OVTH_SFT 6 1279997b0520SBard Liao #define RT5640_MIC2_OVTH_600UA (0x0 << 6) 1280997b0520SBard Liao #define RT5640_MIC2_OVTH_1500UA (0x1 << 6) 1281997b0520SBard Liao #define RT5640_MIC2_OVTH_2000UA (0x2 << 6) 1282997b0520SBard Liao #define RT5640_PWR_MB_MASK (0x1 << 5) 1283997b0520SBard Liao #define RT5640_PWR_MB_SFT 5 1284997b0520SBard Liao #define RT5640_PWR_MB_PD (0x0 << 5) 1285997b0520SBard Liao #define RT5640_PWR_MB_PU (0x1 << 5) 1286997b0520SBard Liao #define RT5640_PWR_CLK25M_MASK (0x1 << 4) 1287997b0520SBard Liao #define RT5640_PWR_CLK25M_SFT 4 1288997b0520SBard Liao #define RT5640_PWR_CLK25M_PD (0x0 << 4) 1289997b0520SBard Liao #define RT5640_PWR_CLK25M_PU (0x1 << 4) 1290997b0520SBard Liao 1291997b0520SBard Liao /* EQ Control 1 (0xb0) */ 1292997b0520SBard Liao #define RT5640_EQ_SRC_MASK (0x1 << 15) 1293997b0520SBard Liao #define RT5640_EQ_SRC_SFT 15 1294997b0520SBard Liao #define RT5640_EQ_SRC_DAC (0x0 << 15) 1295997b0520SBard Liao #define RT5640_EQ_SRC_ADC (0x1 << 15) 1296997b0520SBard Liao #define RT5640_EQ_UPD (0x1 << 14) 1297997b0520SBard Liao #define RT5640_EQ_UPD_BIT 14 1298997b0520SBard Liao #define RT5640_EQ_CD_MASK (0x1 << 13) 1299997b0520SBard Liao #define RT5640_EQ_CD_SFT 13 1300997b0520SBard Liao #define RT5640_EQ_CD_DIS (0x0 << 13) 1301997b0520SBard Liao #define RT5640_EQ_CD_EN (0x1 << 13) 1302997b0520SBard Liao #define RT5640_EQ_DITH_MASK (0x3 << 8) 1303997b0520SBard Liao #define RT5640_EQ_DITH_SFT 8 1304997b0520SBard Liao #define RT5640_EQ_DITH_NOR (0x0 << 8) 1305997b0520SBard Liao #define RT5640_EQ_DITH_LSB (0x1 << 8) 1306997b0520SBard Liao #define RT5640_EQ_DITH_LSB_1 (0x2 << 8) 1307997b0520SBard Liao #define RT5640_EQ_DITH_LSB_2 (0x3 << 8) 1308997b0520SBard Liao 1309997b0520SBard Liao /* EQ Control 2 (0xb1) */ 1310997b0520SBard Liao #define RT5640_EQ_HPF1_M_MASK (0x1 << 8) 1311997b0520SBard Liao #define RT5640_EQ_HPF1_M_SFT 8 1312997b0520SBard Liao #define RT5640_EQ_HPF1_M_HI (0x0 << 8) 1313997b0520SBard Liao #define RT5640_EQ_HPF1_M_1ST (0x1 << 8) 1314997b0520SBard Liao #define RT5640_EQ_LPF1_M_MASK (0x1 << 7) 1315997b0520SBard Liao #define RT5640_EQ_LPF1_M_SFT 7 1316997b0520SBard Liao #define RT5640_EQ_LPF1_M_LO (0x0 << 7) 1317997b0520SBard Liao #define RT5640_EQ_LPF1_M_1ST (0x1 << 7) 1318997b0520SBard Liao #define RT5640_EQ_HPF2_MASK (0x1 << 6) 1319997b0520SBard Liao #define RT5640_EQ_HPF2_SFT 6 1320997b0520SBard Liao #define RT5640_EQ_HPF2_DIS (0x0 << 6) 1321997b0520SBard Liao #define RT5640_EQ_HPF2_EN (0x1 << 6) 1322997b0520SBard Liao #define RT5640_EQ_HPF1_MASK (0x1 << 5) 1323997b0520SBard Liao #define RT5640_EQ_HPF1_SFT 5 1324997b0520SBard Liao #define RT5640_EQ_HPF1_DIS (0x0 << 5) 1325997b0520SBard Liao #define RT5640_EQ_HPF1_EN (0x1 << 5) 1326997b0520SBard Liao #define RT5640_EQ_BPF4_MASK (0x1 << 4) 1327997b0520SBard Liao #define RT5640_EQ_BPF4_SFT 4 1328997b0520SBard Liao #define RT5640_EQ_BPF4_DIS (0x0 << 4) 1329997b0520SBard Liao #define RT5640_EQ_BPF4_EN (0x1 << 4) 1330997b0520SBard Liao #define RT5640_EQ_BPF3_MASK (0x1 << 3) 1331997b0520SBard Liao #define RT5640_EQ_BPF3_SFT 3 1332997b0520SBard Liao #define RT5640_EQ_BPF3_DIS (0x0 << 3) 1333997b0520SBard Liao #define RT5640_EQ_BPF3_EN (0x1 << 3) 1334997b0520SBard Liao #define RT5640_EQ_BPF2_MASK (0x1 << 2) 1335997b0520SBard Liao #define RT5640_EQ_BPF2_SFT 2 1336997b0520SBard Liao #define RT5640_EQ_BPF2_DIS (0x0 << 2) 1337997b0520SBard Liao #define RT5640_EQ_BPF2_EN (0x1 << 2) 1338997b0520SBard Liao #define RT5640_EQ_BPF1_MASK (0x1 << 1) 1339997b0520SBard Liao #define RT5640_EQ_BPF1_SFT 1 1340997b0520SBard Liao #define RT5640_EQ_BPF1_DIS (0x0 << 1) 1341997b0520SBard Liao #define RT5640_EQ_BPF1_EN (0x1 << 1) 1342997b0520SBard Liao #define RT5640_EQ_LPF_MASK (0x1) 1343997b0520SBard Liao #define RT5640_EQ_LPF_SFT 0 1344997b0520SBard Liao #define RT5640_EQ_LPF_DIS (0x0) 1345997b0520SBard Liao #define RT5640_EQ_LPF_EN (0x1) 1346997b0520SBard Liao 1347997b0520SBard Liao /* Memory Test (0xb2) */ 1348997b0520SBard Liao #define RT5640_MT_MASK (0x1 << 15) 1349997b0520SBard Liao #define RT5640_MT_SFT 15 1350997b0520SBard Liao #define RT5640_MT_DIS (0x0 << 15) 1351997b0520SBard Liao #define RT5640_MT_EN (0x1 << 15) 1352997b0520SBard Liao 1353997b0520SBard Liao /* DRC/AGC Control 1 (0xb4) */ 1354997b0520SBard Liao #define RT5640_DRC_AGC_P_MASK (0x1 << 15) 1355997b0520SBard Liao #define RT5640_DRC_AGC_P_SFT 15 1356997b0520SBard Liao #define RT5640_DRC_AGC_P_DAC (0x0 << 15) 1357997b0520SBard Liao #define RT5640_DRC_AGC_P_ADC (0x1 << 15) 1358997b0520SBard Liao #define RT5640_DRC_AGC_MASK (0x1 << 14) 1359997b0520SBard Liao #define RT5640_DRC_AGC_SFT 14 1360997b0520SBard Liao #define RT5640_DRC_AGC_DIS (0x0 << 14) 1361997b0520SBard Liao #define RT5640_DRC_AGC_EN (0x1 << 14) 1362997b0520SBard Liao #define RT5640_DRC_AGC_UPD (0x1 << 13) 1363997b0520SBard Liao #define RT5640_DRC_AGC_UPD_BIT 13 1364997b0520SBard Liao #define RT5640_DRC_AGC_AR_MASK (0x1f << 8) 1365997b0520SBard Liao #define RT5640_DRC_AGC_AR_SFT 8 1366997b0520SBard Liao #define RT5640_DRC_AGC_R_MASK (0x7 << 5) 1367997b0520SBard Liao #define RT5640_DRC_AGC_R_SFT 5 1368997b0520SBard Liao #define RT5640_DRC_AGC_R_48K (0x1 << 5) 1369997b0520SBard Liao #define RT5640_DRC_AGC_R_96K (0x2 << 5) 1370997b0520SBard Liao #define RT5640_DRC_AGC_R_192K (0x3 << 5) 1371997b0520SBard Liao #define RT5640_DRC_AGC_R_441K (0x5 << 5) 1372997b0520SBard Liao #define RT5640_DRC_AGC_R_882K (0x6 << 5) 1373997b0520SBard Liao #define RT5640_DRC_AGC_R_1764K (0x7 << 5) 1374997b0520SBard Liao #define RT5640_DRC_AGC_RC_MASK (0x1f) 1375997b0520SBard Liao #define RT5640_DRC_AGC_RC_SFT 0 1376997b0520SBard Liao 1377997b0520SBard Liao /* DRC/AGC Control 2 (0xb5) */ 1378997b0520SBard Liao #define RT5640_DRC_AGC_POB_MASK (0x3f << 8) 1379997b0520SBard Liao #define RT5640_DRC_AGC_POB_SFT 8 1380997b0520SBard Liao #define RT5640_DRC_AGC_CP_MASK (0x1 << 7) 1381997b0520SBard Liao #define RT5640_DRC_AGC_CP_SFT 7 1382997b0520SBard Liao #define RT5640_DRC_AGC_CP_DIS (0x0 << 7) 1383997b0520SBard Liao #define RT5640_DRC_AGC_CP_EN (0x1 << 7) 1384997b0520SBard Liao #define RT5640_DRC_AGC_CPR_MASK (0x3 << 5) 1385997b0520SBard Liao #define RT5640_DRC_AGC_CPR_SFT 5 1386997b0520SBard Liao #define RT5640_DRC_AGC_CPR_1_1 (0x0 << 5) 1387997b0520SBard Liao #define RT5640_DRC_AGC_CPR_1_2 (0x1 << 5) 1388997b0520SBard Liao #define RT5640_DRC_AGC_CPR_1_3 (0x2 << 5) 1389997b0520SBard Liao #define RT5640_DRC_AGC_CPR_1_4 (0x3 << 5) 1390997b0520SBard Liao #define RT5640_DRC_AGC_PRB_MASK (0x1f) 1391997b0520SBard Liao #define RT5640_DRC_AGC_PRB_SFT 0 1392997b0520SBard Liao 1393997b0520SBard Liao /* DRC/AGC Control 3 (0xb6) */ 1394997b0520SBard Liao #define RT5640_DRC_AGC_NGB_MASK (0xf << 12) 1395997b0520SBard Liao #define RT5640_DRC_AGC_NGB_SFT 12 1396997b0520SBard Liao #define RT5640_DRC_AGC_TAR_MASK (0x1f << 7) 1397997b0520SBard Liao #define RT5640_DRC_AGC_TAR_SFT 7 1398997b0520SBard Liao #define RT5640_DRC_AGC_NG_MASK (0x1 << 6) 1399997b0520SBard Liao #define RT5640_DRC_AGC_NG_SFT 6 1400997b0520SBard Liao #define RT5640_DRC_AGC_NG_DIS (0x0 << 6) 1401997b0520SBard Liao #define RT5640_DRC_AGC_NG_EN (0x1 << 6) 1402997b0520SBard Liao #define RT5640_DRC_AGC_NGH_MASK (0x1 << 5) 1403997b0520SBard Liao #define RT5640_DRC_AGC_NGH_SFT 5 1404997b0520SBard Liao #define RT5640_DRC_AGC_NGH_DIS (0x0 << 5) 1405997b0520SBard Liao #define RT5640_DRC_AGC_NGH_EN (0x1 << 5) 1406997b0520SBard Liao #define RT5640_DRC_AGC_NGT_MASK (0x1f) 1407997b0520SBard Liao #define RT5640_DRC_AGC_NGT_SFT 0 1408997b0520SBard Liao 1409997b0520SBard Liao /* ANC Control 1 (0xb8) */ 1410997b0520SBard Liao #define RT5640_ANC_M_MASK (0x1 << 15) 1411997b0520SBard Liao #define RT5640_ANC_M_SFT 15 1412997b0520SBard Liao #define RT5640_ANC_M_NOR (0x0 << 15) 1413997b0520SBard Liao #define RT5640_ANC_M_REV (0x1 << 15) 1414997b0520SBard Liao #define RT5640_ANC_MASK (0x1 << 14) 1415997b0520SBard Liao #define RT5640_ANC_SFT 14 1416997b0520SBard Liao #define RT5640_ANC_DIS (0x0 << 14) 1417997b0520SBard Liao #define RT5640_ANC_EN (0x1 << 14) 1418997b0520SBard Liao #define RT5640_ANC_MD_MASK (0x3 << 12) 1419997b0520SBard Liao #define RT5640_ANC_MD_SFT 12 1420997b0520SBard Liao #define RT5640_ANC_MD_DIS (0x0 << 12) 1421997b0520SBard Liao #define RT5640_ANC_MD_67MS (0x1 << 12) 1422997b0520SBard Liao #define RT5640_ANC_MD_267MS (0x2 << 12) 1423997b0520SBard Liao #define RT5640_ANC_MD_1067MS (0x3 << 12) 1424997b0520SBard Liao #define RT5640_ANC_SN_MASK (0x1 << 11) 1425997b0520SBard Liao #define RT5640_ANC_SN_SFT 11 1426997b0520SBard Liao #define RT5640_ANC_SN_DIS (0x0 << 11) 1427997b0520SBard Liao #define RT5640_ANC_SN_EN (0x1 << 11) 1428997b0520SBard Liao #define RT5640_ANC_CLK_MASK (0x1 << 10) 1429997b0520SBard Liao #define RT5640_ANC_CLK_SFT 10 1430997b0520SBard Liao #define RT5640_ANC_CLK_ANC (0x0 << 10) 1431997b0520SBard Liao #define RT5640_ANC_CLK_REG (0x1 << 10) 1432997b0520SBard Liao #define RT5640_ANC_ZCD_MASK (0x3 << 8) 1433997b0520SBard Liao #define RT5640_ANC_ZCD_SFT 8 1434997b0520SBard Liao #define RT5640_ANC_ZCD_DIS (0x0 << 8) 1435997b0520SBard Liao #define RT5640_ANC_ZCD_T1 (0x1 << 8) 1436997b0520SBard Liao #define RT5640_ANC_ZCD_T2 (0x2 << 8) 1437997b0520SBard Liao #define RT5640_ANC_ZCD_WT (0x3 << 8) 1438997b0520SBard Liao #define RT5640_ANC_CS_MASK (0x1 << 7) 1439997b0520SBard Liao #define RT5640_ANC_CS_SFT 7 1440997b0520SBard Liao #define RT5640_ANC_CS_DIS (0x0 << 7) 1441997b0520SBard Liao #define RT5640_ANC_CS_EN (0x1 << 7) 1442997b0520SBard Liao #define RT5640_ANC_SW_MASK (0x1 << 6) 1443997b0520SBard Liao #define RT5640_ANC_SW_SFT 6 1444997b0520SBard Liao #define RT5640_ANC_SW_NOR (0x0 << 6) 1445997b0520SBard Liao #define RT5640_ANC_SW_AUTO (0x1 << 6) 1446997b0520SBard Liao #define RT5640_ANC_CO_L_MASK (0x3f) 1447997b0520SBard Liao #define RT5640_ANC_CO_L_SFT 0 1448997b0520SBard Liao 1449997b0520SBard Liao /* ANC Control 2 (0xb6) */ 1450997b0520SBard Liao #define RT5640_ANC_FG_R_MASK (0xf << 12) 1451997b0520SBard Liao #define RT5640_ANC_FG_R_SFT 12 1452997b0520SBard Liao #define RT5640_ANC_FG_L_MASK (0xf << 8) 1453997b0520SBard Liao #define RT5640_ANC_FG_L_SFT 8 1454997b0520SBard Liao #define RT5640_ANC_CG_R_MASK (0xf << 4) 1455997b0520SBard Liao #define RT5640_ANC_CG_R_SFT 4 1456997b0520SBard Liao #define RT5640_ANC_CG_L_MASK (0xf) 1457997b0520SBard Liao #define RT5640_ANC_CG_L_SFT 0 1458997b0520SBard Liao 1459997b0520SBard Liao /* ANC Control 3 (0xb6) */ 1460997b0520SBard Liao #define RT5640_ANC_CD_MASK (0x1 << 6) 1461997b0520SBard Liao #define RT5640_ANC_CD_SFT 6 1462997b0520SBard Liao #define RT5640_ANC_CD_BOTH (0x0 << 6) 1463997b0520SBard Liao #define RT5640_ANC_CD_IND (0x1 << 6) 1464997b0520SBard Liao #define RT5640_ANC_CO_R_MASK (0x3f) 1465997b0520SBard Liao #define RT5640_ANC_CO_R_SFT 0 1466997b0520SBard Liao 1467997b0520SBard Liao /* Jack Detect Control (0xbb) */ 1468997b0520SBard Liao #define RT5640_JD_MASK (0x7 << 13) 1469997b0520SBard Liao #define RT5640_JD_SFT 13 1470997b0520SBard Liao #define RT5640_JD_DIS (0x0 << 13) 1471997b0520SBard Liao #define RT5640_JD_GPIO1 (0x1 << 13) 1472997b0520SBard Liao #define RT5640_JD_JD1_IN4P (0x2 << 13) 1473997b0520SBard Liao #define RT5640_JD_JD2_IN4N (0x3 << 13) 1474997b0520SBard Liao #define RT5640_JD_GPIO2 (0x4 << 13) 1475997b0520SBard Liao #define RT5640_JD_GPIO3 (0x5 << 13) 1476997b0520SBard Liao #define RT5640_JD_GPIO4 (0x6 << 13) 1477997b0520SBard Liao #define RT5640_JD_HP_MASK (0x1 << 11) 1478997b0520SBard Liao #define RT5640_JD_HP_SFT 11 1479997b0520SBard Liao #define RT5640_JD_HP_DIS (0x0 << 11) 1480997b0520SBard Liao #define RT5640_JD_HP_EN (0x1 << 11) 1481997b0520SBard Liao #define RT5640_JD_HP_TRG_MASK (0x1 << 10) 1482997b0520SBard Liao #define RT5640_JD_HP_TRG_SFT 10 1483997b0520SBard Liao #define RT5640_JD_HP_TRG_LO (0x0 << 10) 1484997b0520SBard Liao #define RT5640_JD_HP_TRG_HI (0x1 << 10) 1485997b0520SBard Liao #define RT5640_JD_SPL_MASK (0x1 << 9) 1486997b0520SBard Liao #define RT5640_JD_SPL_SFT 9 1487997b0520SBard Liao #define RT5640_JD_SPL_DIS (0x0 << 9) 1488997b0520SBard Liao #define RT5640_JD_SPL_EN (0x1 << 9) 1489997b0520SBard Liao #define RT5640_JD_SPL_TRG_MASK (0x1 << 8) 1490997b0520SBard Liao #define RT5640_JD_SPL_TRG_SFT 8 1491997b0520SBard Liao #define RT5640_JD_SPL_TRG_LO (0x0 << 8) 1492997b0520SBard Liao #define RT5640_JD_SPL_TRG_HI (0x1 << 8) 1493997b0520SBard Liao #define RT5640_JD_SPR_MASK (0x1 << 7) 1494997b0520SBard Liao #define RT5640_JD_SPR_SFT 7 1495997b0520SBard Liao #define RT5640_JD_SPR_DIS (0x0 << 7) 1496997b0520SBard Liao #define RT5640_JD_SPR_EN (0x1 << 7) 1497997b0520SBard Liao #define RT5640_JD_SPR_TRG_MASK (0x1 << 6) 1498997b0520SBard Liao #define RT5640_JD_SPR_TRG_SFT 6 1499997b0520SBard Liao #define RT5640_JD_SPR_TRG_LO (0x0 << 6) 1500997b0520SBard Liao #define RT5640_JD_SPR_TRG_HI (0x1 << 6) 1501997b0520SBard Liao #define RT5640_JD_MO_MASK (0x1 << 5) 1502997b0520SBard Liao #define RT5640_JD_MO_SFT 5 1503997b0520SBard Liao #define RT5640_JD_MO_DIS (0x0 << 5) 1504997b0520SBard Liao #define RT5640_JD_MO_EN (0x1 << 5) 1505997b0520SBard Liao #define RT5640_JD_MO_TRG_MASK (0x1 << 4) 1506997b0520SBard Liao #define RT5640_JD_MO_TRG_SFT 4 1507997b0520SBard Liao #define RT5640_JD_MO_TRG_LO (0x0 << 4) 1508997b0520SBard Liao #define RT5640_JD_MO_TRG_HI (0x1 << 4) 1509997b0520SBard Liao #define RT5640_JD_LO_MASK (0x1 << 3) 1510997b0520SBard Liao #define RT5640_JD_LO_SFT 3 1511997b0520SBard Liao #define RT5640_JD_LO_DIS (0x0 << 3) 1512997b0520SBard Liao #define RT5640_JD_LO_EN (0x1 << 3) 1513997b0520SBard Liao #define RT5640_JD_LO_TRG_MASK (0x1 << 2) 1514997b0520SBard Liao #define RT5640_JD_LO_TRG_SFT 2 1515997b0520SBard Liao #define RT5640_JD_LO_TRG_LO (0x0 << 2) 1516997b0520SBard Liao #define RT5640_JD_LO_TRG_HI (0x1 << 2) 1517997b0520SBard Liao #define RT5640_JD1_IN4P_MASK (0x1 << 1) 1518997b0520SBard Liao #define RT5640_JD1_IN4P_SFT 1 1519997b0520SBard Liao #define RT5640_JD1_IN4P_DIS (0x0 << 1) 1520997b0520SBard Liao #define RT5640_JD1_IN4P_EN (0x1 << 1) 1521997b0520SBard Liao #define RT5640_JD2_IN4N_MASK (0x1) 1522997b0520SBard Liao #define RT5640_JD2_IN4N_SFT 0 1523997b0520SBard Liao #define RT5640_JD2_IN4N_DIS (0x0) 1524997b0520SBard Liao #define RT5640_JD2_IN4N_EN (0x1) 1525997b0520SBard Liao 1526997b0520SBard Liao /* Jack detect for ANC (0xbc) */ 1527997b0520SBard Liao #define RT5640_ANC_DET_MASK (0x3 << 4) 1528997b0520SBard Liao #define RT5640_ANC_DET_SFT 4 1529997b0520SBard Liao #define RT5640_ANC_DET_DIS (0x0 << 4) 1530997b0520SBard Liao #define RT5640_ANC_DET_MB1 (0x1 << 4) 1531997b0520SBard Liao #define RT5640_ANC_DET_MB2 (0x2 << 4) 1532997b0520SBard Liao #define RT5640_ANC_DET_JD (0x3 << 4) 1533997b0520SBard Liao #define RT5640_AD_TRG_MASK (0x1 << 3) 1534997b0520SBard Liao #define RT5640_AD_TRG_SFT 3 1535997b0520SBard Liao #define RT5640_AD_TRG_LO (0x0 << 3) 1536997b0520SBard Liao #define RT5640_AD_TRG_HI (0x1 << 3) 1537997b0520SBard Liao #define RT5640_ANCM_DET_MASK (0x3 << 4) 1538997b0520SBard Liao #define RT5640_ANCM_DET_SFT 4 1539997b0520SBard Liao #define RT5640_ANCM_DET_DIS (0x0 << 4) 1540997b0520SBard Liao #define RT5640_ANCM_DET_MB1 (0x1 << 4) 1541997b0520SBard Liao #define RT5640_ANCM_DET_MB2 (0x2 << 4) 1542997b0520SBard Liao #define RT5640_ANCM_DET_JD (0x3 << 4) 1543997b0520SBard Liao #define RT5640_AMD_TRG_MASK (0x1 << 3) 1544997b0520SBard Liao #define RT5640_AMD_TRG_SFT 3 1545997b0520SBard Liao #define RT5640_AMD_TRG_LO (0x0 << 3) 1546997b0520SBard Liao #define RT5640_AMD_TRG_HI (0x1 << 3) 1547997b0520SBard Liao 1548997b0520SBard Liao /* IRQ Control 1 (0xbd) */ 1549997b0520SBard Liao #define RT5640_IRQ_JD_MASK (0x1 << 15) 1550997b0520SBard Liao #define RT5640_IRQ_JD_SFT 15 1551997b0520SBard Liao #define RT5640_IRQ_JD_BP (0x0 << 15) 1552997b0520SBard Liao #define RT5640_IRQ_JD_NOR (0x1 << 15) 1553997b0520SBard Liao #define RT5640_IRQ_OT_MASK (0x1 << 14) 1554997b0520SBard Liao #define RT5640_IRQ_OT_SFT 14 1555997b0520SBard Liao #define RT5640_IRQ_OT_BP (0x0 << 14) 1556997b0520SBard Liao #define RT5640_IRQ_OT_NOR (0x1 << 14) 1557997b0520SBard Liao #define RT5640_JD_STKY_MASK (0x1 << 13) 1558997b0520SBard Liao #define RT5640_JD_STKY_SFT 13 1559997b0520SBard Liao #define RT5640_JD_STKY_DIS (0x0 << 13) 1560997b0520SBard Liao #define RT5640_JD_STKY_EN (0x1 << 13) 1561997b0520SBard Liao #define RT5640_OT_STKY_MASK (0x1 << 12) 1562997b0520SBard Liao #define RT5640_OT_STKY_SFT 12 1563997b0520SBard Liao #define RT5640_OT_STKY_DIS (0x0 << 12) 1564997b0520SBard Liao #define RT5640_OT_STKY_EN (0x1 << 12) 1565997b0520SBard Liao #define RT5640_JD_P_MASK (0x1 << 11) 1566997b0520SBard Liao #define RT5640_JD_P_SFT 11 1567997b0520SBard Liao #define RT5640_JD_P_NOR (0x0 << 11) 1568997b0520SBard Liao #define RT5640_JD_P_INV (0x1 << 11) 1569997b0520SBard Liao #define RT5640_OT_P_MASK (0x1 << 10) 1570997b0520SBard Liao #define RT5640_OT_P_SFT 10 1571997b0520SBard Liao #define RT5640_OT_P_NOR (0x0 << 10) 1572997b0520SBard Liao #define RT5640_OT_P_INV (0x1 << 10) 1573997b0520SBard Liao 1574997b0520SBard Liao /* IRQ Control 2 (0xbe) */ 1575997b0520SBard Liao #define RT5640_IRQ_MB1_OC_MASK (0x1 << 15) 1576997b0520SBard Liao #define RT5640_IRQ_MB1_OC_SFT 15 1577997b0520SBard Liao #define RT5640_IRQ_MB1_OC_BP (0x0 << 15) 1578997b0520SBard Liao #define RT5640_IRQ_MB1_OC_NOR (0x1 << 15) 1579997b0520SBard Liao #define RT5640_IRQ_MB2_OC_MASK (0x1 << 14) 1580997b0520SBard Liao #define RT5640_IRQ_MB2_OC_SFT 14 1581997b0520SBard Liao #define RT5640_IRQ_MB2_OC_BP (0x0 << 14) 1582997b0520SBard Liao #define RT5640_IRQ_MB2_OC_NOR (0x1 << 14) 1583997b0520SBard Liao #define RT5640_MB1_OC_STKY_MASK (0x1 << 11) 1584997b0520SBard Liao #define RT5640_MB1_OC_STKY_SFT 11 1585997b0520SBard Liao #define RT5640_MB1_OC_STKY_DIS (0x0 << 11) 1586997b0520SBard Liao #define RT5640_MB1_OC_STKY_EN (0x1 << 11) 1587997b0520SBard Liao #define RT5640_MB2_OC_STKY_MASK (0x1 << 10) 1588997b0520SBard Liao #define RT5640_MB2_OC_STKY_SFT 10 1589997b0520SBard Liao #define RT5640_MB2_OC_STKY_DIS (0x0 << 10) 1590997b0520SBard Liao #define RT5640_MB2_OC_STKY_EN (0x1 << 10) 1591997b0520SBard Liao #define RT5640_MB1_OC_P_MASK (0x1 << 7) 1592997b0520SBard Liao #define RT5640_MB1_OC_P_SFT 7 1593997b0520SBard Liao #define RT5640_MB1_OC_P_NOR (0x0 << 7) 1594997b0520SBard Liao #define RT5640_MB1_OC_P_INV (0x1 << 7) 1595997b0520SBard Liao #define RT5640_MB2_OC_P_MASK (0x1 << 6) 1596997b0520SBard Liao #define RT5640_MB2_OC_P_SFT 6 1597997b0520SBard Liao #define RT5640_MB2_OC_P_NOR (0x0 << 6) 1598997b0520SBard Liao #define RT5640_MB2_OC_P_INV (0x1 << 6) 1599997b0520SBard Liao #define RT5640_MB1_OC_CLR (0x1 << 3) 1600997b0520SBard Liao #define RT5640_MB1_OC_CLR_SFT 3 1601997b0520SBard Liao #define RT5640_MB2_OC_CLR (0x1 << 2) 1602997b0520SBard Liao #define RT5640_MB2_OC_CLR_SFT 2 1603997b0520SBard Liao 1604997b0520SBard Liao /* GPIO Control 1 (0xc0) */ 1605997b0520SBard Liao #define RT5640_GP1_PIN_MASK (0x1 << 15) 1606997b0520SBard Liao #define RT5640_GP1_PIN_SFT 15 1607997b0520SBard Liao #define RT5640_GP1_PIN_GPIO1 (0x0 << 15) 1608997b0520SBard Liao #define RT5640_GP1_PIN_IRQ (0x1 << 15) 1609997b0520SBard Liao #define RT5640_GP2_PIN_MASK (0x1 << 14) 1610997b0520SBard Liao #define RT5640_GP2_PIN_SFT 14 1611997b0520SBard Liao #define RT5640_GP2_PIN_GPIO2 (0x0 << 14) 1612997b0520SBard Liao #define RT5640_GP2_PIN_DMIC1_SCL (0x1 << 14) 1613997b0520SBard Liao #define RT5640_GP3_PIN_MASK (0x3 << 12) 1614997b0520SBard Liao #define RT5640_GP3_PIN_SFT 12 1615997b0520SBard Liao #define RT5640_GP3_PIN_GPIO3 (0x0 << 12) 1616997b0520SBard Liao #define RT5640_GP3_PIN_DMIC1_SDA (0x1 << 12) 1617997b0520SBard Liao #define RT5640_GP3_PIN_IRQ (0x2 << 12) 1618997b0520SBard Liao #define RT5640_GP4_PIN_MASK (0x1 << 11) 1619997b0520SBard Liao #define RT5640_GP4_PIN_SFT 11 1620997b0520SBard Liao #define RT5640_GP4_PIN_GPIO4 (0x0 << 11) 1621997b0520SBard Liao #define RT5640_GP4_PIN_DMIC2_SDA (0x1 << 11) 1622997b0520SBard Liao #define RT5640_DP_SIG_MASK (0x1 << 10) 1623997b0520SBard Liao #define RT5640_DP_SIG_SFT 10 1624997b0520SBard Liao #define RT5640_DP_SIG_TEST (0x0 << 10) 1625997b0520SBard Liao #define RT5640_DP_SIG_AP (0x1 << 10) 1626997b0520SBard Liao #define RT5640_GPIO_M_MASK (0x1 << 9) 1627997b0520SBard Liao #define RT5640_GPIO_M_SFT 9 1628997b0520SBard Liao #define RT5640_GPIO_M_FLT (0x0 << 9) 1629997b0520SBard Liao #define RT5640_GPIO_M_PH (0x1 << 9) 1630997b0520SBard Liao 1631997b0520SBard Liao /* GPIO Control 3 (0xc2) */ 1632997b0520SBard Liao #define RT5640_GP4_PF_MASK (0x1 << 11) 1633997b0520SBard Liao #define RT5640_GP4_PF_SFT 11 1634997b0520SBard Liao #define RT5640_GP4_PF_IN (0x0 << 11) 1635997b0520SBard Liao #define RT5640_GP4_PF_OUT (0x1 << 11) 1636997b0520SBard Liao #define RT5640_GP4_OUT_MASK (0x1 << 10) 1637997b0520SBard Liao #define RT5640_GP4_OUT_SFT 10 1638997b0520SBard Liao #define RT5640_GP4_OUT_LO (0x0 << 10) 1639997b0520SBard Liao #define RT5640_GP4_OUT_HI (0x1 << 10) 1640997b0520SBard Liao #define RT5640_GP4_P_MASK (0x1 << 9) 1641997b0520SBard Liao #define RT5640_GP4_P_SFT 9 1642997b0520SBard Liao #define RT5640_GP4_P_NOR (0x0 << 9) 1643997b0520SBard Liao #define RT5640_GP4_P_INV (0x1 << 9) 1644997b0520SBard Liao #define RT5640_GP3_PF_MASK (0x1 << 8) 1645997b0520SBard Liao #define RT5640_GP3_PF_SFT 8 1646997b0520SBard Liao #define RT5640_GP3_PF_IN (0x0 << 8) 1647997b0520SBard Liao #define RT5640_GP3_PF_OUT (0x1 << 8) 1648997b0520SBard Liao #define RT5640_GP3_OUT_MASK (0x1 << 7) 1649997b0520SBard Liao #define RT5640_GP3_OUT_SFT 7 1650997b0520SBard Liao #define RT5640_GP3_OUT_LO (0x0 << 7) 1651997b0520SBard Liao #define RT5640_GP3_OUT_HI (0x1 << 7) 1652997b0520SBard Liao #define RT5640_GP3_P_MASK (0x1 << 6) 1653997b0520SBard Liao #define RT5640_GP3_P_SFT 6 1654997b0520SBard Liao #define RT5640_GP3_P_NOR (0x0 << 6) 1655997b0520SBard Liao #define RT5640_GP3_P_INV (0x1 << 6) 1656997b0520SBard Liao #define RT5640_GP2_PF_MASK (0x1 << 5) 1657997b0520SBard Liao #define RT5640_GP2_PF_SFT 5 1658997b0520SBard Liao #define RT5640_GP2_PF_IN (0x0 << 5) 1659997b0520SBard Liao #define RT5640_GP2_PF_OUT (0x1 << 5) 1660997b0520SBard Liao #define RT5640_GP2_OUT_MASK (0x1 << 4) 1661997b0520SBard Liao #define RT5640_GP2_OUT_SFT 4 1662997b0520SBard Liao #define RT5640_GP2_OUT_LO (0x0 << 4) 1663997b0520SBard Liao #define RT5640_GP2_OUT_HI (0x1 << 4) 1664997b0520SBard Liao #define RT5640_GP2_P_MASK (0x1 << 3) 1665997b0520SBard Liao #define RT5640_GP2_P_SFT 3 1666997b0520SBard Liao #define RT5640_GP2_P_NOR (0x0 << 3) 1667997b0520SBard Liao #define RT5640_GP2_P_INV (0x1 << 3) 1668997b0520SBard Liao #define RT5640_GP1_PF_MASK (0x1 << 2) 1669997b0520SBard Liao #define RT5640_GP1_PF_SFT 2 1670997b0520SBard Liao #define RT5640_GP1_PF_IN (0x0 << 2) 1671997b0520SBard Liao #define RT5640_GP1_PF_OUT (0x1 << 2) 1672997b0520SBard Liao #define RT5640_GP1_OUT_MASK (0x1 << 1) 1673997b0520SBard Liao #define RT5640_GP1_OUT_SFT 1 1674997b0520SBard Liao #define RT5640_GP1_OUT_LO (0x0 << 1) 1675997b0520SBard Liao #define RT5640_GP1_OUT_HI (0x1 << 1) 1676997b0520SBard Liao #define RT5640_GP1_P_MASK (0x1) 1677997b0520SBard Liao #define RT5640_GP1_P_SFT 0 1678997b0520SBard Liao #define RT5640_GP1_P_NOR (0x0) 1679997b0520SBard Liao #define RT5640_GP1_P_INV (0x1) 1680997b0520SBard Liao 1681997b0520SBard Liao /* FM34-500 Register Control 1 (0xc4) */ 1682997b0520SBard Liao #define RT5640_DSP_ADD_SFT 0 1683997b0520SBard Liao 1684997b0520SBard Liao /* FM34-500 Register Control 2 (0xc5) */ 1685997b0520SBard Liao #define RT5640_DSP_DAT_SFT 0 1686997b0520SBard Liao 1687997b0520SBard Liao /* FM34-500 Register Control 3 (0xc6) */ 1688997b0520SBard Liao #define RT5640_DSP_BUSY_MASK (0x1 << 15) 1689997b0520SBard Liao #define RT5640_DSP_BUSY_BIT 15 1690997b0520SBard Liao #define RT5640_DSP_DS_MASK (0x1 << 14) 1691997b0520SBard Liao #define RT5640_DSP_DS_SFT 14 1692997b0520SBard Liao #define RT5640_DSP_DS_FM3010 (0x1 << 14) 1693997b0520SBard Liao #define RT5640_DSP_DS_TEMP (0x1 << 14) 1694997b0520SBard Liao #define RT5640_DSP_CLK_MASK (0x3 << 12) 1695997b0520SBard Liao #define RT5640_DSP_CLK_SFT 12 1696997b0520SBard Liao #define RT5640_DSP_CLK_384K (0x0 << 12) 1697997b0520SBard Liao #define RT5640_DSP_CLK_192K (0x1 << 12) 1698997b0520SBard Liao #define RT5640_DSP_CLK_96K (0x2 << 12) 1699997b0520SBard Liao #define RT5640_DSP_CLK_64K (0x3 << 12) 1700997b0520SBard Liao #define RT5640_DSP_PD_PIN_MASK (0x1 << 11) 1701997b0520SBard Liao #define RT5640_DSP_PD_PIN_SFT 11 1702997b0520SBard Liao #define RT5640_DSP_PD_PIN_LO (0x0 << 11) 1703997b0520SBard Liao #define RT5640_DSP_PD_PIN_HI (0x1 << 11) 1704997b0520SBard Liao #define RT5640_DSP_RST_PIN_MASK (0x1 << 10) 1705997b0520SBard Liao #define RT5640_DSP_RST_PIN_SFT 10 1706997b0520SBard Liao #define RT5640_DSP_RST_PIN_LO (0x0 << 10) 1707997b0520SBard Liao #define RT5640_DSP_RST_PIN_HI (0x1 << 10) 1708997b0520SBard Liao #define RT5640_DSP_R_EN (0x1 << 9) 1709997b0520SBard Liao #define RT5640_DSP_R_EN_BIT 9 1710997b0520SBard Liao #define RT5640_DSP_W_EN (0x1 << 8) 1711997b0520SBard Liao #define RT5640_DSP_W_EN_BIT 8 1712997b0520SBard Liao #define RT5640_DSP_CMD_MASK (0xff) 1713997b0520SBard Liao #define RT5640_DSP_CMD_SFT 0 1714997b0520SBard Liao #define RT5640_DSP_CMD_MW (0x3B) /* Memory Write */ 1715997b0520SBard Liao #define RT5640_DSP_CMD_MR (0x37) /* Memory Read */ 1716997b0520SBard Liao #define RT5640_DSP_CMD_RR (0x60) /* Register Read */ 1717997b0520SBard Liao #define RT5640_DSP_CMD_RW (0x68) /* Register Write */ 1718997b0520SBard Liao 1719997b0520SBard Liao /* Programmable Register Array Control 1 (0xc8) */ 1720997b0520SBard Liao #define RT5640_REG_SEQ_MASK (0xf << 12) 1721997b0520SBard Liao #define RT5640_REG_SEQ_SFT 12 1722997b0520SBard Liao #define RT5640_SEQ1_ST_MASK (0x1 << 11) /*RO*/ 1723997b0520SBard Liao #define RT5640_SEQ1_ST_SFT 11 1724997b0520SBard Liao #define RT5640_SEQ1_ST_RUN (0x0 << 11) 1725997b0520SBard Liao #define RT5640_SEQ1_ST_FIN (0x1 << 11) 1726997b0520SBard Liao #define RT5640_SEQ2_ST_MASK (0x1 << 10) /*RO*/ 1727997b0520SBard Liao #define RT5640_SEQ2_ST_SFT 10 1728997b0520SBard Liao #define RT5640_SEQ2_ST_RUN (0x0 << 10) 1729997b0520SBard Liao #define RT5640_SEQ2_ST_FIN (0x1 << 10) 1730997b0520SBard Liao #define RT5640_REG_LV_MASK (0x1 << 9) 1731997b0520SBard Liao #define RT5640_REG_LV_SFT 9 1732997b0520SBard Liao #define RT5640_REG_LV_MX (0x0 << 9) 1733997b0520SBard Liao #define RT5640_REG_LV_PR (0x1 << 9) 1734997b0520SBard Liao #define RT5640_SEQ_2_PT_MASK (0x1 << 8) 1735997b0520SBard Liao #define RT5640_SEQ_2_PT_BIT 8 1736997b0520SBard Liao #define RT5640_REG_IDX_MASK (0xff) 1737997b0520SBard Liao #define RT5640_REG_IDX_SFT 0 1738997b0520SBard Liao 1739997b0520SBard Liao /* Programmable Register Array Control 2 (0xc9) */ 1740997b0520SBard Liao #define RT5640_REG_DAT_MASK (0xffff) 1741997b0520SBard Liao #define RT5640_REG_DAT_SFT 0 1742997b0520SBard Liao 1743997b0520SBard Liao /* Programmable Register Array Control 3 (0xca) */ 1744997b0520SBard Liao #define RT5640_SEQ_DLY_MASK (0xff << 8) 1745997b0520SBard Liao #define RT5640_SEQ_DLY_SFT 8 1746997b0520SBard Liao #define RT5640_PROG_MASK (0x1 << 7) 1747997b0520SBard Liao #define RT5640_PROG_SFT 7 1748997b0520SBard Liao #define RT5640_PROG_DIS (0x0 << 7) 1749997b0520SBard Liao #define RT5640_PROG_EN (0x1 << 7) 1750997b0520SBard Liao #define RT5640_SEQ1_PT_RUN (0x1 << 6) 1751997b0520SBard Liao #define RT5640_SEQ1_PT_RUN_BIT 6 1752997b0520SBard Liao #define RT5640_SEQ2_PT_RUN (0x1 << 5) 1753997b0520SBard Liao #define RT5640_SEQ2_PT_RUN_BIT 5 1754997b0520SBard Liao 1755997b0520SBard Liao /* Programmable Register Array Control 4 (0xcb) */ 1756997b0520SBard Liao #define RT5640_SEQ1_START_MASK (0xf << 8) 1757997b0520SBard Liao #define RT5640_SEQ1_START_SFT 8 1758997b0520SBard Liao #define RT5640_SEQ1_END_MASK (0xf) 1759997b0520SBard Liao #define RT5640_SEQ1_END_SFT 0 1760997b0520SBard Liao 1761997b0520SBard Liao /* Programmable Register Array Control 5 (0xcc) */ 1762997b0520SBard Liao #define RT5640_SEQ2_START_MASK (0xf << 8) 1763997b0520SBard Liao #define RT5640_SEQ2_START_SFT 8 1764997b0520SBard Liao #define RT5640_SEQ2_END_MASK (0xf) 1765997b0520SBard Liao #define RT5640_SEQ2_END_SFT 0 1766997b0520SBard Liao 1767997b0520SBard Liao /* Scramble Function (0xcd) */ 1768997b0520SBard Liao #define RT5640_SCB_KEY_MASK (0xff) 1769997b0520SBard Liao #define RT5640_SCB_KEY_SFT 0 1770997b0520SBard Liao 1771997b0520SBard Liao /* Scramble Control (0xce) */ 1772997b0520SBard Liao #define RT5640_SCB_SWAP_MASK (0x1 << 15) 1773997b0520SBard Liao #define RT5640_SCB_SWAP_SFT 15 1774997b0520SBard Liao #define RT5640_SCB_SWAP_DIS (0x0 << 15) 1775997b0520SBard Liao #define RT5640_SCB_SWAP_EN (0x1 << 15) 1776997b0520SBard Liao #define RT5640_SCB_MASK (0x1 << 14) 1777997b0520SBard Liao #define RT5640_SCB_SFT 14 1778997b0520SBard Liao #define RT5640_SCB_DIS (0x0 << 14) 1779997b0520SBard Liao #define RT5640_SCB_EN (0x1 << 14) 1780997b0520SBard Liao 1781997b0520SBard Liao /* Baseback Control (0xcf) */ 1782997b0520SBard Liao #define RT5640_BB_MASK (0x1 << 15) 1783997b0520SBard Liao #define RT5640_BB_SFT 15 1784997b0520SBard Liao #define RT5640_BB_DIS (0x0 << 15) 1785997b0520SBard Liao #define RT5640_BB_EN (0x1 << 15) 1786997b0520SBard Liao #define RT5640_BB_CT_MASK (0x7 << 12) 1787997b0520SBard Liao #define RT5640_BB_CT_SFT 12 1788997b0520SBard Liao #define RT5640_BB_CT_A (0x0 << 12) 1789997b0520SBard Liao #define RT5640_BB_CT_B (0x1 << 12) 1790997b0520SBard Liao #define RT5640_BB_CT_C (0x2 << 12) 1791997b0520SBard Liao #define RT5640_BB_CT_D (0x3 << 12) 1792997b0520SBard Liao #define RT5640_M_BB_L_MASK (0x1 << 9) 1793997b0520SBard Liao #define RT5640_M_BB_L_SFT 9 1794997b0520SBard Liao #define RT5640_M_BB_R_MASK (0x1 << 8) 1795997b0520SBard Liao #define RT5640_M_BB_R_SFT 8 1796997b0520SBard Liao #define RT5640_M_BB_HPF_L_MASK (0x1 << 7) 1797997b0520SBard Liao #define RT5640_M_BB_HPF_L_SFT 7 1798997b0520SBard Liao #define RT5640_M_BB_HPF_R_MASK (0x1 << 6) 1799997b0520SBard Liao #define RT5640_M_BB_HPF_R_SFT 6 1800997b0520SBard Liao #define RT5640_G_BB_BST_MASK (0x3f) 1801997b0520SBard Liao #define RT5640_G_BB_BST_SFT 0 1802997b0520SBard Liao 1803997b0520SBard Liao /* MP3 Plus Control 1 (0xd0) */ 1804997b0520SBard Liao #define RT5640_M_MP3_L_MASK (0x1 << 15) 1805997b0520SBard Liao #define RT5640_M_MP3_L_SFT 15 1806997b0520SBard Liao #define RT5640_M_MP3_R_MASK (0x1 << 14) 1807997b0520SBard Liao #define RT5640_M_MP3_R_SFT 14 1808997b0520SBard Liao #define RT5640_M_MP3_MASK (0x1 << 13) 1809997b0520SBard Liao #define RT5640_M_MP3_SFT 13 1810997b0520SBard Liao #define RT5640_M_MP3_DIS (0x0 << 13) 1811997b0520SBard Liao #define RT5640_M_MP3_EN (0x1 << 13) 1812997b0520SBard Liao #define RT5640_EG_MP3_MASK (0x1f << 8) 1813997b0520SBard Liao #define RT5640_EG_MP3_SFT 8 1814997b0520SBard Liao #define RT5640_MP3_HLP_MASK (0x1 << 7) 1815997b0520SBard Liao #define RT5640_MP3_HLP_SFT 7 1816997b0520SBard Liao #define RT5640_MP3_HLP_DIS (0x0 << 7) 1817997b0520SBard Liao #define RT5640_MP3_HLP_EN (0x1 << 7) 1818997b0520SBard Liao #define RT5640_M_MP3_ORG_L_MASK (0x1 << 6) 1819997b0520SBard Liao #define RT5640_M_MP3_ORG_L_SFT 6 1820997b0520SBard Liao #define RT5640_M_MP3_ORG_R_MASK (0x1 << 5) 1821997b0520SBard Liao #define RT5640_M_MP3_ORG_R_SFT 5 1822997b0520SBard Liao 1823997b0520SBard Liao /* MP3 Plus Control 2 (0xd1) */ 1824997b0520SBard Liao #define RT5640_MP3_WT_MASK (0x1 << 13) 1825997b0520SBard Liao #define RT5640_MP3_WT_SFT 13 1826997b0520SBard Liao #define RT5640_MP3_WT_1_4 (0x0 << 13) 1827997b0520SBard Liao #define RT5640_MP3_WT_1_2 (0x1 << 13) 1828997b0520SBard Liao #define RT5640_OG_MP3_MASK (0x1f << 8) 1829997b0520SBard Liao #define RT5640_OG_MP3_SFT 8 1830997b0520SBard Liao #define RT5640_HG_MP3_MASK (0x3f) 1831997b0520SBard Liao #define RT5640_HG_MP3_SFT 0 1832997b0520SBard Liao 1833997b0520SBard Liao /* 3D HP Control 1 (0xd2) */ 1834997b0520SBard Liao #define RT5640_3D_CF_MASK (0x1 << 15) 1835997b0520SBard Liao #define RT5640_3D_CF_SFT 15 1836997b0520SBard Liao #define RT5640_3D_CF_DIS (0x0 << 15) 1837997b0520SBard Liao #define RT5640_3D_CF_EN (0x1 << 15) 1838997b0520SBard Liao #define RT5640_3D_HP_MASK (0x1 << 14) 1839997b0520SBard Liao #define RT5640_3D_HP_SFT 14 1840997b0520SBard Liao #define RT5640_3D_HP_DIS (0x0 << 14) 1841997b0520SBard Liao #define RT5640_3D_HP_EN (0x1 << 14) 1842997b0520SBard Liao #define RT5640_3D_BT_MASK (0x1 << 13) 1843997b0520SBard Liao #define RT5640_3D_BT_SFT 13 1844997b0520SBard Liao #define RT5640_3D_BT_DIS (0x0 << 13) 1845997b0520SBard Liao #define RT5640_3D_BT_EN (0x1 << 13) 1846997b0520SBard Liao #define RT5640_3D_1F_MIX_MASK (0x3 << 11) 1847997b0520SBard Liao #define RT5640_3D_1F_MIX_SFT 11 1848997b0520SBard Liao #define RT5640_3D_HP_M_MASK (0x1 << 10) 1849997b0520SBard Liao #define RT5640_3D_HP_M_SFT 10 1850997b0520SBard Liao #define RT5640_3D_HP_M_SUR (0x0 << 10) 1851997b0520SBard Liao #define RT5640_3D_HP_M_FRO (0x1 << 10) 1852997b0520SBard Liao #define RT5640_M_3D_HRTF_MASK (0x1 << 9) 1853997b0520SBard Liao #define RT5640_M_3D_HRTF_SFT 9 1854997b0520SBard Liao #define RT5640_M_3D_D2H_MASK (0x1 << 8) 1855997b0520SBard Liao #define RT5640_M_3D_D2H_SFT 8 1856997b0520SBard Liao #define RT5640_M_3D_D2R_MASK (0x1 << 7) 1857997b0520SBard Liao #define RT5640_M_3D_D2R_SFT 7 1858997b0520SBard Liao #define RT5640_M_3D_REVB_MASK (0x1 << 6) 1859997b0520SBard Liao #define RT5640_M_3D_REVB_SFT 6 1860997b0520SBard Liao 1861997b0520SBard Liao /* Adjustable high pass filter control 1 (0xd3) */ 1862997b0520SBard Liao #define RT5640_2ND_HPF_MASK (0x1 << 15) 1863997b0520SBard Liao #define RT5640_2ND_HPF_SFT 15 1864997b0520SBard Liao #define RT5640_2ND_HPF_DIS (0x0 << 15) 1865997b0520SBard Liao #define RT5640_2ND_HPF_EN (0x1 << 15) 1866997b0520SBard Liao #define RT5640_HPF_CF_L_MASK (0x7 << 12) 1867997b0520SBard Liao #define RT5640_HPF_CF_L_SFT 12 1868997b0520SBard Liao #define RT5640_1ST_HPF_MASK (0x1 << 11) 1869997b0520SBard Liao #define RT5640_1ST_HPF_SFT 11 1870997b0520SBard Liao #define RT5640_1ST_HPF_DIS (0x0 << 11) 1871997b0520SBard Liao #define RT5640_1ST_HPF_EN (0x1 << 11) 1872997b0520SBard Liao #define RT5640_HPF_CF_R_MASK (0x7 << 8) 1873997b0520SBard Liao #define RT5640_HPF_CF_R_SFT 8 1874997b0520SBard Liao #define RT5640_ZD_T_MASK (0x3 << 6) 1875997b0520SBard Liao #define RT5640_ZD_T_SFT 6 1876997b0520SBard Liao #define RT5640_ZD_F_MASK (0x3 << 4) 1877997b0520SBard Liao #define RT5640_ZD_F_SFT 4 1878997b0520SBard Liao #define RT5640_ZD_F_IM (0x0 << 4) 1879997b0520SBard Liao #define RT5640_ZD_F_ZC_IM (0x1 << 4) 1880997b0520SBard Liao #define RT5640_ZD_F_ZC_IOD (0x2 << 4) 1881997b0520SBard Liao #define RT5640_ZD_F_UN (0x3 << 4) 1882997b0520SBard Liao 1883997b0520SBard Liao /* HP calibration control and Amp detection (0xd6) */ 1884997b0520SBard Liao #define RT5640_SI_DAC_MASK (0x1 << 11) 1885997b0520SBard Liao #define RT5640_SI_DAC_SFT 11 1886997b0520SBard Liao #define RT5640_SI_DAC_AUTO (0x0 << 11) 1887997b0520SBard Liao #define RT5640_SI_DAC_TEST (0x1 << 11) 1888997b0520SBard Liao #define RT5640_DC_CAL_M_MASK (0x1 << 10) 1889997b0520SBard Liao #define RT5640_DC_CAL_M_SFT 10 1890997b0520SBard Liao #define RT5640_DC_CAL_M_CAL (0x0 << 10) 1891997b0520SBard Liao #define RT5640_DC_CAL_M_NOR (0x1 << 10) 1892997b0520SBard Liao #define RT5640_DC_CAL_MASK (0x1 << 9) 1893997b0520SBard Liao #define RT5640_DC_CAL_SFT 9 1894997b0520SBard Liao #define RT5640_DC_CAL_DIS (0x0 << 9) 1895997b0520SBard Liao #define RT5640_DC_CAL_EN (0x1 << 9) 1896997b0520SBard Liao #define RT5640_HPD_RCV_MASK (0x7 << 6) 1897997b0520SBard Liao #define RT5640_HPD_RCV_SFT 6 1898997b0520SBard Liao #define RT5640_HPD_PS_MASK (0x1 << 5) 1899997b0520SBard Liao #define RT5640_HPD_PS_SFT 5 1900997b0520SBard Liao #define RT5640_HPD_PS_DIS (0x0 << 5) 1901997b0520SBard Liao #define RT5640_HPD_PS_EN (0x1 << 5) 1902997b0520SBard Liao #define RT5640_CAL_M_MASK (0x1 << 4) 1903997b0520SBard Liao #define RT5640_CAL_M_SFT 4 1904997b0520SBard Liao #define RT5640_CAL_M_DEP (0x0 << 4) 1905997b0520SBard Liao #define RT5640_CAL_M_CAL (0x1 << 4) 1906997b0520SBard Liao #define RT5640_CAL_MASK (0x1 << 3) 1907997b0520SBard Liao #define RT5640_CAL_SFT 3 1908997b0520SBard Liao #define RT5640_CAL_DIS (0x0 << 3) 1909997b0520SBard Liao #define RT5640_CAL_EN (0x1 << 3) 1910997b0520SBard Liao #define RT5640_CAL_TEST_MASK (0x1 << 2) 1911997b0520SBard Liao #define RT5640_CAL_TEST_SFT 2 1912997b0520SBard Liao #define RT5640_CAL_TEST_DIS (0x0 << 2) 1913997b0520SBard Liao #define RT5640_CAL_TEST_EN (0x1 << 2) 1914997b0520SBard Liao #define RT5640_CAL_P_MASK (0x3) 1915997b0520SBard Liao #define RT5640_CAL_P_SFT 0 1916997b0520SBard Liao #define RT5640_CAL_P_NONE (0x0) 1917997b0520SBard Liao #define RT5640_CAL_P_CAL (0x1) 1918997b0520SBard Liao #define RT5640_CAL_P_DAC_CAL (0x2) 1919997b0520SBard Liao 1920997b0520SBard Liao /* Soft volume and zero cross control 1 (0xd9) */ 1921997b0520SBard Liao #define RT5640_SV_MASK (0x1 << 15) 1922997b0520SBard Liao #define RT5640_SV_SFT 15 1923997b0520SBard Liao #define RT5640_SV_DIS (0x0 << 15) 1924997b0520SBard Liao #define RT5640_SV_EN (0x1 << 15) 1925997b0520SBard Liao #define RT5640_SPO_SV_MASK (0x1 << 14) 1926997b0520SBard Liao #define RT5640_SPO_SV_SFT 14 1927997b0520SBard Liao #define RT5640_SPO_SV_DIS (0x0 << 14) 1928997b0520SBard Liao #define RT5640_SPO_SV_EN (0x1 << 14) 1929997b0520SBard Liao #define RT5640_OUT_SV_MASK (0x1 << 13) 1930997b0520SBard Liao #define RT5640_OUT_SV_SFT 13 1931997b0520SBard Liao #define RT5640_OUT_SV_DIS (0x0 << 13) 1932997b0520SBard Liao #define RT5640_OUT_SV_EN (0x1 << 13) 1933997b0520SBard Liao #define RT5640_HP_SV_MASK (0x1 << 12) 1934997b0520SBard Liao #define RT5640_HP_SV_SFT 12 1935997b0520SBard Liao #define RT5640_HP_SV_DIS (0x0 << 12) 1936997b0520SBard Liao #define RT5640_HP_SV_EN (0x1 << 12) 1937997b0520SBard Liao #define RT5640_ZCD_DIG_MASK (0x1 << 11) 1938997b0520SBard Liao #define RT5640_ZCD_DIG_SFT 11 1939997b0520SBard Liao #define RT5640_ZCD_DIG_DIS (0x0 << 11) 1940997b0520SBard Liao #define RT5640_ZCD_DIG_EN (0x1 << 11) 1941997b0520SBard Liao #define RT5640_ZCD_MASK (0x1 << 10) 1942997b0520SBard Liao #define RT5640_ZCD_SFT 10 1943997b0520SBard Liao #define RT5640_ZCD_PD (0x0 << 10) 1944997b0520SBard Liao #define RT5640_ZCD_PU (0x1 << 10) 1945997b0520SBard Liao #define RT5640_M_ZCD_MASK (0x3f << 4) 1946997b0520SBard Liao #define RT5640_M_ZCD_SFT 4 1947997b0520SBard Liao #define RT5640_M_ZCD_RM_L (0x1 << 9) 1948997b0520SBard Liao #define RT5640_M_ZCD_RM_R (0x1 << 8) 1949997b0520SBard Liao #define RT5640_M_ZCD_SM_L (0x1 << 7) 1950997b0520SBard Liao #define RT5640_M_ZCD_SM_R (0x1 << 6) 1951997b0520SBard Liao #define RT5640_M_ZCD_OM_L (0x1 << 5) 1952997b0520SBard Liao #define RT5640_M_ZCD_OM_R (0x1 << 4) 1953997b0520SBard Liao #define RT5640_SV_DLY_MASK (0xf) 1954997b0520SBard Liao #define RT5640_SV_DLY_SFT 0 1955997b0520SBard Liao 1956997b0520SBard Liao /* Soft volume and zero cross control 2 (0xda) */ 1957997b0520SBard Liao #define RT5640_ZCD_HP_MASK (0x1 << 15) 1958997b0520SBard Liao #define RT5640_ZCD_HP_SFT 15 1959997b0520SBard Liao #define RT5640_ZCD_HP_DIS (0x0 << 15) 1960997b0520SBard Liao #define RT5640_ZCD_HP_EN (0x1 << 15) 1961997b0520SBard Liao 1962997b0520SBard Liao 1963997b0520SBard Liao /* Codec Private Register definition */ 1964997b0520SBard Liao /* 3D Speaker Control (0x63) */ 1965997b0520SBard Liao #define RT5640_3D_SPK_MASK (0x1 << 15) 1966997b0520SBard Liao #define RT5640_3D_SPK_SFT 15 1967997b0520SBard Liao #define RT5640_3D_SPK_DIS (0x0 << 15) 1968997b0520SBard Liao #define RT5640_3D_SPK_EN (0x1 << 15) 1969997b0520SBard Liao #define RT5640_3D_SPK_M_MASK (0x3 << 13) 1970997b0520SBard Liao #define RT5640_3D_SPK_M_SFT 13 1971997b0520SBard Liao #define RT5640_3D_SPK_CG_MASK (0x1f << 8) 1972997b0520SBard Liao #define RT5640_3D_SPK_CG_SFT 8 1973997b0520SBard Liao #define RT5640_3D_SPK_SG_MASK (0x1f) 1974997b0520SBard Liao #define RT5640_3D_SPK_SG_SFT 0 1975997b0520SBard Liao 1976997b0520SBard Liao /* Wind Noise Detection Control 1 (0x6c) */ 1977997b0520SBard Liao #define RT5640_WND_MASK (0x1 << 15) 1978997b0520SBard Liao #define RT5640_WND_SFT 15 1979997b0520SBard Liao #define RT5640_WND_DIS (0x0 << 15) 1980997b0520SBard Liao #define RT5640_WND_EN (0x1 << 15) 1981997b0520SBard Liao 1982997b0520SBard Liao /* Wind Noise Detection Control 2 (0x6d) */ 1983997b0520SBard Liao #define RT5640_WND_FC_NW_MASK (0x3f << 10) 1984997b0520SBard Liao #define RT5640_WND_FC_NW_SFT 10 1985997b0520SBard Liao #define RT5640_WND_FC_WK_MASK (0x3f << 4) 1986997b0520SBard Liao #define RT5640_WND_FC_WK_SFT 4 1987997b0520SBard Liao 1988997b0520SBard Liao /* Wind Noise Detection Control 3 (0x6e) */ 1989997b0520SBard Liao #define RT5640_HPF_FC_MASK (0x3f << 6) 1990997b0520SBard Liao #define RT5640_HPF_FC_SFT 6 1991997b0520SBard Liao #define RT5640_WND_FC_ST_MASK (0x3f) 1992997b0520SBard Liao #define RT5640_WND_FC_ST_SFT 0 1993997b0520SBard Liao 1994997b0520SBard Liao /* Wind Noise Detection Control 4 (0x6f) */ 1995997b0520SBard Liao #define RT5640_WND_TH_LO_MASK (0x3ff) 1996997b0520SBard Liao #define RT5640_WND_TH_LO_SFT 0 1997997b0520SBard Liao 1998997b0520SBard Liao /* Wind Noise Detection Control 5 (0x70) */ 1999997b0520SBard Liao #define RT5640_WND_TH_HI_MASK (0x3ff) 2000997b0520SBard Liao #define RT5640_WND_TH_HI_SFT 0 2001997b0520SBard Liao 2002997b0520SBard Liao /* Wind Noise Detection Control 8 (0x73) */ 2003997b0520SBard Liao #define RT5640_WND_WIND_MASK (0x1 << 13) /* Read-Only */ 2004997b0520SBard Liao #define RT5640_WND_WIND_SFT 13 2005997b0520SBard Liao #define RT5640_WND_STRONG_MASK (0x1 << 12) /* Read-Only */ 2006997b0520SBard Liao #define RT5640_WND_STRONG_SFT 12 2007997b0520SBard Liao enum { 2008997b0520SBard Liao RT5640_NO_WIND, 2009997b0520SBard Liao RT5640_BREEZE, 2010997b0520SBard Liao RT5640_STORM, 2011997b0520SBard Liao }; 2012997b0520SBard Liao 2013997b0520SBard Liao /* Dipole Speaker Interface (0x75) */ 2014997b0520SBard Liao #define RT5640_DP_ATT_MASK (0x3 << 14) 2015997b0520SBard Liao #define RT5640_DP_ATT_SFT 14 2016997b0520SBard Liao #define RT5640_DP_SPK_MASK (0x1 << 10) 2017997b0520SBard Liao #define RT5640_DP_SPK_SFT 10 2018997b0520SBard Liao #define RT5640_DP_SPK_DIS (0x0 << 10) 2019997b0520SBard Liao #define RT5640_DP_SPK_EN (0x1 << 10) 2020997b0520SBard Liao 2021997b0520SBard Liao /* EQ Pre Volume Control (0xb3) */ 2022997b0520SBard Liao #define RT5640_EQ_PRE_VOL_MASK (0xffff) 2023997b0520SBard Liao #define RT5640_EQ_PRE_VOL_SFT 0 2024997b0520SBard Liao 2025997b0520SBard Liao /* EQ Post Volume Control (0xb4) */ 2026997b0520SBard Liao #define RT5640_EQ_PST_VOL_MASK (0xffff) 2027997b0520SBard Liao #define RT5640_EQ_PST_VOL_SFT 0 2028997b0520SBard Liao 2029997b0520SBard Liao #define RT5640_NO_JACK BIT(0) 2030997b0520SBard Liao #define RT5640_HEADSET_DET BIT(1) 2031997b0520SBard Liao #define RT5640_HEADPHO_DET BIT(2) 2032997b0520SBard Liao 2033997b0520SBard Liao /* System Clock Source */ 2034997b0520SBard Liao #define RT5640_SCLK_S_MCLK 0 2035997b0520SBard Liao #define RT5640_SCLK_S_PLL1 1 2036997b0520SBard Liao #define RT5640_SCLK_S_PLL1_TK 2 2037997b0520SBard Liao #define RT5640_SCLK_S_RCCLK 3 2038997b0520SBard Liao 2039997b0520SBard Liao /* PLL1 Source */ 2040997b0520SBard Liao #define RT5640_PLL1_S_MCLK 0 2041997b0520SBard Liao #define RT5640_PLL1_S_BCLK1 1 2042997b0520SBard Liao #define RT5640_PLL1_S_BCLK2 2 2043997b0520SBard Liao #define RT5640_PLL1_S_BCLK3 3 2044997b0520SBard Liao 2045997b0520SBard Liao 2046997b0520SBard Liao enum { 2047997b0520SBard Liao RT5640_AIF1, 2048997b0520SBard Liao RT5640_AIF2, 2049997b0520SBard Liao RT5640_AIF3, 2050997b0520SBard Liao RT5640_AIFS, 2051997b0520SBard Liao }; 2052997b0520SBard Liao 2053997b0520SBard Liao enum { 2054997b0520SBard Liao RT5640_U_IF1 = 0x1, 2055997b0520SBard Liao RT5640_U_IF2 = 0x2, 2056997b0520SBard Liao RT5640_U_IF3 = 0x4, 2057997b0520SBard Liao }; 2058997b0520SBard Liao 2059997b0520SBard Liao enum { 2060997b0520SBard Liao RT5640_IF_123, 2061997b0520SBard Liao RT5640_IF_132, 2062997b0520SBard Liao RT5640_IF_312, 2063997b0520SBard Liao RT5640_IF_321, 2064997b0520SBard Liao RT5640_IF_231, 2065997b0520SBard Liao RT5640_IF_213, 2066997b0520SBard Liao RT5640_IF_113, 2067997b0520SBard Liao RT5640_IF_223, 2068997b0520SBard Liao RT5640_IF_ALL, 2069997b0520SBard Liao }; 2070997b0520SBard Liao 2071997b0520SBard Liao enum { 2072997b0520SBard Liao RT5640_DMIC_DIS, 2073997b0520SBard Liao RT5640_DMIC1, 2074997b0520SBard Liao RT5640_DMIC2, 2075997b0520SBard Liao }; 2076997b0520SBard Liao 2077997b0520SBard Liao struct rt5640_pll_code { 2078997b0520SBard Liao bool m_bp; /* Indicates bypass m code or not. */ 2079997b0520SBard Liao int m_code; 2080997b0520SBard Liao int n_code; 2081997b0520SBard Liao int k_code; 2082997b0520SBard Liao }; 2083997b0520SBard Liao 2084997b0520SBard Liao struct rt5640_priv { 2085997b0520SBard Liao struct snd_soc_codec *codec; 2086997b0520SBard Liao struct rt5640_platform_data pdata; 2087997b0520SBard Liao struct regmap *regmap; 2088997b0520SBard Liao 2089997b0520SBard Liao int sysclk; 2090997b0520SBard Liao int sysclk_src; 2091997b0520SBard Liao int lrck[RT5640_AIFS]; 2092997b0520SBard Liao int bclk[RT5640_AIFS]; 2093997b0520SBard Liao int master[RT5640_AIFS]; 2094997b0520SBard Liao 2095997b0520SBard Liao struct rt5640_pll_code pll_code; 2096997b0520SBard Liao int pll_src; 2097997b0520SBard Liao int pll_in; 2098997b0520SBard Liao int pll_out; 2099997b0520SBard Liao 2100997b0520SBard Liao int dmic_en; 2101*246693baSBard Liao bool hp_mute; 2102997b0520SBard Liao }; 2103997b0520SBard Liao 2104997b0520SBard Liao #endif 2105