1*4afb7f9cSSugar Zhang /* SPDX-License-Identifier: GPL-2.0+ */ 2*4afb7f9cSSugar Zhang /* 3*4afb7f9cSSugar Zhang * (C) Copyright 2018 Rockchip Electronics Co., Ltd 4*4afb7f9cSSugar Zhang */ 5*4afb7f9cSSugar Zhang 6*4afb7f9cSSugar Zhang #ifndef __RK817_CODEC_H__ 7*4afb7f9cSSugar Zhang #define __RK817_CODEC_H__ 8*4afb7f9cSSugar Zhang 9*4afb7f9cSSugar Zhang /* codec register */ 10*4afb7f9cSSugar Zhang #define RK817_CODEC_BASE 0x0000 11*4afb7f9cSSugar Zhang 12*4afb7f9cSSugar Zhang #define RK817_CODEC_DTOP_VUCTL (RK817_CODEC_BASE + 0x12) 13*4afb7f9cSSugar Zhang #define RK817_CODEC_DTOP_VUCTIME (RK817_CODEC_BASE + 0x13) 14*4afb7f9cSSugar Zhang #define RK817_CODEC_DTOP_LPT_SRST (RK817_CODEC_BASE + 0x14) 15*4afb7f9cSSugar Zhang #define RK817_CODEC_DTOP_DIGEN_CLKE (RK817_CODEC_BASE + 0x15) 16*4afb7f9cSSugar Zhang #define RK817_CODEC_AREF_RTCFG0 (RK817_CODEC_BASE + 0x16) 17*4afb7f9cSSugar Zhang #define RK817_CODEC_AREF_RTCFG1 (RK817_CODEC_BASE + 0x17) 18*4afb7f9cSSugar Zhang #define RK817_CODEC_AADC_CFG0 (RK817_CODEC_BASE + 0x18) 19*4afb7f9cSSugar Zhang #define RK817_CODEC_AADC_CFG1 (RK817_CODEC_BASE + 0x19) 20*4afb7f9cSSugar Zhang #define RK817_CODEC_DADC_VOLL (RK817_CODEC_BASE + 0x1a) 21*4afb7f9cSSugar Zhang #define RK817_CODEC_DADC_VOLR (RK817_CODEC_BASE + 0x1b) 22*4afb7f9cSSugar Zhang #define RK817_CODEC_DADC_SR_ACL0 (RK817_CODEC_BASE + 0x1e) 23*4afb7f9cSSugar Zhang #define RK817_CODEC_DADC_ALC1 (RK817_CODEC_BASE + 0x1f) 24*4afb7f9cSSugar Zhang #define RK817_CODEC_DADC_ALC2 (RK817_CODEC_BASE + 0x20) 25*4afb7f9cSSugar Zhang #define RK817_CODEC_DADC_NG (RK817_CODEC_BASE + 0x21) 26*4afb7f9cSSugar Zhang #define RK817_CODEC_DADC_HPF (RK817_CODEC_BASE + 0x22) 27*4afb7f9cSSugar Zhang #define RK817_CODEC_DADC_RVOLL (RK817_CODEC_BASE + 0x23) 28*4afb7f9cSSugar Zhang #define RK817_CODEC_DADC_RVOLR (RK817_CODEC_BASE + 0x24) 29*4afb7f9cSSugar Zhang #define RK817_CODEC_AMIC_CFG0 (RK817_CODEC_BASE + 0x27) 30*4afb7f9cSSugar Zhang #define RK817_CODEC_AMIC_CFG1 (RK817_CODEC_BASE + 0x28) 31*4afb7f9cSSugar Zhang #define RK817_CODEC_DMIC_PGA_GAIN (RK817_CODEC_BASE + 0x29) 32*4afb7f9cSSugar Zhang #define RK817_CODEC_DMIC_LMT1 (RK817_CODEC_BASE + 0x2a) 33*4afb7f9cSSugar Zhang #define RK817_CODEC_DMIC_LMT2 (RK817_CODEC_BASE + 0x2b) 34*4afb7f9cSSugar Zhang #define RK817_CODEC_DMIC_NG1 (RK817_CODEC_BASE + 0x2c) 35*4afb7f9cSSugar Zhang #define RK817_CODEC_DMIC_NG2 (RK817_CODEC_BASE + 0x2d) 36*4afb7f9cSSugar Zhang #define RK817_CODEC_ADAC_CFG0 (RK817_CODEC_BASE + 0x2e) 37*4afb7f9cSSugar Zhang #define RK817_CODEC_ADAC_CFG1 (RK817_CODEC_BASE + 0x2f) 38*4afb7f9cSSugar Zhang #define RK817_CODEC_DDAC_POPD_DACST (RK817_CODEC_BASE + 0x30) 39*4afb7f9cSSugar Zhang #define RK817_CODEC_DDAC_VOLL (RK817_CODEC_BASE + 0x31) 40*4afb7f9cSSugar Zhang #define RK817_CODEC_DDAC_VOLR (RK817_CODEC_BASE + 0x32) 41*4afb7f9cSSugar Zhang #define RK817_CODEC_DDAC_SR_LMT0 (RK817_CODEC_BASE + 0x35) 42*4afb7f9cSSugar Zhang #define RK817_CODEC_DDAC_LMT1 (RK817_CODEC_BASE + 0x36) 43*4afb7f9cSSugar Zhang #define RK817_CODEC_DDAC_LMT2 (RK817_CODEC_BASE + 0x37) 44*4afb7f9cSSugar Zhang #define RK817_CODEC_DDAC_MUTE_MIXCTL (RK817_CODEC_BASE + 0x38) 45*4afb7f9cSSugar Zhang #define RK817_CODEC_DDAC_RVOLL (RK817_CODEC_BASE + 0x39) 46*4afb7f9cSSugar Zhang #define RK817_CODEC_DDAC_RVOLR (RK817_CODEC_BASE + 0x3a) 47*4afb7f9cSSugar Zhang #define RK817_CODEC_AHP_ANTI0 (RK817_CODEC_BASE + 0x3b) 48*4afb7f9cSSugar Zhang #define RK817_CODEC_AHP_ANTI1 (RK817_CODEC_BASE + 0x3c) 49*4afb7f9cSSugar Zhang #define RK817_CODEC_AHP_CFG0 (RK817_CODEC_BASE + 0x3d) 50*4afb7f9cSSugar Zhang #define RK817_CODEC_AHP_CFG1 (RK817_CODEC_BASE + 0x3e) 51*4afb7f9cSSugar Zhang #define RK817_CODEC_AHP_CP (RK817_CODEC_BASE + 0x3f) 52*4afb7f9cSSugar Zhang #define RK817_CODEC_ACLASSD_CFG1 (RK817_CODEC_BASE + 0x40) 53*4afb7f9cSSugar Zhang #define RK817_CODEC_ACLASSD_CFG2 (RK817_CODEC_BASE + 0x41) 54*4afb7f9cSSugar Zhang #define RK817_CODEC_APLL_CFG0 (RK817_CODEC_BASE + 0x42) 55*4afb7f9cSSugar Zhang #define RK817_CODEC_APLL_CFG1 (RK817_CODEC_BASE + 0x43) 56*4afb7f9cSSugar Zhang #define RK817_CODEC_APLL_CFG2 (RK817_CODEC_BASE + 0x44) 57*4afb7f9cSSugar Zhang #define RK817_CODEC_APLL_CFG3 (RK817_CODEC_BASE + 0x45) 58*4afb7f9cSSugar Zhang #define RK817_CODEC_APLL_CFG4 (RK817_CODEC_BASE + 0x46) 59*4afb7f9cSSugar Zhang #define RK817_CODEC_APLL_CFG5 (RK817_CODEC_BASE + 0x47) 60*4afb7f9cSSugar Zhang #define RK817_CODEC_DI2S_CKM (RK817_CODEC_BASE + 0x48) 61*4afb7f9cSSugar Zhang #define RK817_CODEC_DI2S_RSD (RK817_CODEC_BASE + 0x49) 62*4afb7f9cSSugar Zhang #define RK817_CODEC_DI2S_RXCR1 (RK817_CODEC_BASE + 0x4a) 63*4afb7f9cSSugar Zhang #define RK817_CODEC_DI2S_RXCR2 (RK817_CODEC_BASE + 0x4b) 64*4afb7f9cSSugar Zhang #define RK817_CODEC_DI2S_RXCMD_TSD (RK817_CODEC_BASE + 0x4c) 65*4afb7f9cSSugar Zhang #define RK817_CODEC_DI2S_TXCR1 (RK817_CODEC_BASE + 0x4d) 66*4afb7f9cSSugar Zhang #define RK817_CODEC_DI2S_TXCR2 (RK817_CODEC_BASE + 0x4e) 67*4afb7f9cSSugar Zhang #define RK817_CODEC_DI2S_TXCR3_TXCMD (RK817_CODEC_BASE + 0x4f) 68*4afb7f9cSSugar Zhang 69*4afb7f9cSSugar Zhang /* RK817_CODEC_DTOP_DIGEN_CLKE */ 70*4afb7f9cSSugar Zhang #define ADC_DIG_CLK_MASK (0xf << 4) 71*4afb7f9cSSugar Zhang #define ADC_DIG_CLK_SFT 4 72*4afb7f9cSSugar Zhang #define ADC_DIG_CLK_DIS (0x0 << 4) 73*4afb7f9cSSugar Zhang #define ADC_DIG_CLK_EN (0xf << 4) 74*4afb7f9cSSugar Zhang 75*4afb7f9cSSugar Zhang #define DAC_DIG_CLK_MASK (0xf << 0) 76*4afb7f9cSSugar Zhang #define DAC_DIG_CLK_SFT 0 77*4afb7f9cSSugar Zhang #define DAC_DIG_CLK_DIS (0x0 << 0) 78*4afb7f9cSSugar Zhang #define DAC_DIG_CLK_EN (0xf << 0) 79*4afb7f9cSSugar Zhang 80*4afb7f9cSSugar Zhang /* RK817_CODEC_APLL_CFG5 */ 81*4afb7f9cSSugar Zhang #define PLL_PW_DOWN (0x01 << 0) 82*4afb7f9cSSugar Zhang #define PLL_PW_UP (0x00 << 0) 83*4afb7f9cSSugar Zhang 84*4afb7f9cSSugar Zhang /* RK817_CODEC_DI2S_CKM */ 85*4afb7f9cSSugar Zhang #define PDM_EN_MASK (0x1 << 3) 86*4afb7f9cSSugar Zhang #define PDM_EN_SFT 3 87*4afb7f9cSSugar Zhang #define PDM_EN_DISABLE (0x0 << 3) 88*4afb7f9cSSugar Zhang #define PDM_EN_ENABLE (0x1 << 3) 89*4afb7f9cSSugar Zhang 90*4afb7f9cSSugar Zhang #define SCK_EN_ENABLE (0x1 << 2) 91*4afb7f9cSSugar Zhang #define SCK_EN_DISABLE (0x0 << 2) 92*4afb7f9cSSugar Zhang 93*4afb7f9cSSugar Zhang #define RK817_I2S_MODE_MASK (0x1 << 0) 94*4afb7f9cSSugar Zhang #define RK817_I2S_MODE_SFT 0 95*4afb7f9cSSugar Zhang #define RK817_I2S_MODE_MST (0x1 << 0) 96*4afb7f9cSSugar Zhang #define RK817_I2S_MODE_SLV (0x0 << 0) 97*4afb7f9cSSugar Zhang 98*4afb7f9cSSugar Zhang /* RK817_CODEC_DDAC_MUTE_MIXCTL */ 99*4afb7f9cSSugar Zhang #define DACMT_ENABLE (0x1 << 0) 100*4afb7f9cSSugar Zhang #define DACMT_DISABLE (0x0 << 0) 101*4afb7f9cSSugar Zhang 102*4afb7f9cSSugar Zhang /* RK817_CODEC_DI2S_RXCR2 */ 103*4afb7f9cSSugar Zhang #define VDW_RX_24BITS (0x17) 104*4afb7f9cSSugar Zhang #define VDW_RX_16BITS (0x0f) 105*4afb7f9cSSugar Zhang /* RK817_CODEC_DI2S_TXCR2 */ 106*4afb7f9cSSugar Zhang #define VDW_TX_24BITS (0x17) 107*4afb7f9cSSugar Zhang #define VDW_TX_16BITS (0x0f) 108*4afb7f9cSSugar Zhang 109*4afb7f9cSSugar Zhang /* RK817_CODEC_AHP_CFG1 */ 110*4afb7f9cSSugar Zhang #define HP_ANTIPOP_ENABLE (0x1 << 4) 111*4afb7f9cSSugar Zhang #define HP_ANTIPOP_DISABLE (0x0 << 4) 112*4afb7f9cSSugar Zhang 113*4afb7f9cSSugar Zhang /* RK817_CODEC_ADAC_CFG1 */ 114*4afb7f9cSSugar Zhang #define PWD_DACBIAS_MASK (0x1 << 3) 115*4afb7f9cSSugar Zhang #define PWD_DACBIAS_SFT 3 116*4afb7f9cSSugar Zhang #define PWD_DACBIAS_DOWN (0x1 << 3) 117*4afb7f9cSSugar Zhang #define PWD_DACBIAS_ON (0x0 << 3) 118*4afb7f9cSSugar Zhang 119*4afb7f9cSSugar Zhang #define PWD_DACD_MASK (0x1 << 2) 120*4afb7f9cSSugar Zhang #define PWD_DACD_SFT 2 121*4afb7f9cSSugar Zhang #define PWD_DACD_DOWN (0x1 << 2) 122*4afb7f9cSSugar Zhang #define PWD_DACD_ON (0x0 << 2) 123*4afb7f9cSSugar Zhang 124*4afb7f9cSSugar Zhang #define PWD_DACL_MASK (0x1 << 1) 125*4afb7f9cSSugar Zhang #define PWD_DACL_SFT 1 126*4afb7f9cSSugar Zhang #define PWD_DACL_DOWN (0x1 << 1) 127*4afb7f9cSSugar Zhang #define PWD_DACL_ON (0x0 << 1) 128*4afb7f9cSSugar Zhang 129*4afb7f9cSSugar Zhang #define PWD_DACR_MASK (0x1 << 0) 130*4afb7f9cSSugar Zhang #define PWD_DACR_SFT 0 131*4afb7f9cSSugar Zhang #define PWD_DACR_DOWN (0x1 << 0) 132*4afb7f9cSSugar Zhang #define PWD_DACR_ON (0x0 << 0) 133*4afb7f9cSSugar Zhang 134*4afb7f9cSSugar Zhang /* RK817_CODEC_AADC_CFG0 */ 135*4afb7f9cSSugar Zhang #define ADC_L_PWD_MASK (0x1 << 7) 136*4afb7f9cSSugar Zhang #define ADC_L_PWD_SFT 7 137*4afb7f9cSSugar Zhang #define ADC_L_PWD_DIS (0x0 << 7) 138*4afb7f9cSSugar Zhang #define ADC_L_PWD_EN (0x1 << 7) 139*4afb7f9cSSugar Zhang 140*4afb7f9cSSugar Zhang #define ADC_R_PWD_MASK (0x1 << 6) 141*4afb7f9cSSugar Zhang #define ADC_R_PWD_SFT 6 142*4afb7f9cSSugar Zhang #define ADC_R_PWD_DIS (0x0 << 6) 143*4afb7f9cSSugar Zhang #define ADC_R_PWD_EN (0x1 << 6) 144*4afb7f9cSSugar Zhang 145*4afb7f9cSSugar Zhang /* RK817_CODEC_AMIC_CFG0 */ 146*4afb7f9cSSugar Zhang #define MIC_DIFF_MASK (0x1 << 7) 147*4afb7f9cSSugar Zhang #define MIC_DIFF_SFT 7 148*4afb7f9cSSugar Zhang #define MIC_DIFF_DIS (0x0 << 7) 149*4afb7f9cSSugar Zhang #define MIC_DIFF_EN (0x1 << 7) 150*4afb7f9cSSugar Zhang 151*4afb7f9cSSugar Zhang #define PWD_PGA_L_MASK (0x1 << 5) 152*4afb7f9cSSugar Zhang #define PWD_PGA_L_SFT 5 153*4afb7f9cSSugar Zhang #define PWD_PGA_L_DIS (0x0 << 5) 154*4afb7f9cSSugar Zhang #define PWD_PGA_L_EN (0x1 << 5) 155*4afb7f9cSSugar Zhang 156*4afb7f9cSSugar Zhang #define PWD_PGA_R_MASK (0x1 << 4) 157*4afb7f9cSSugar Zhang #define PWD_PGA_R_SFT 4 158*4afb7f9cSSugar Zhang #define PWD_PGA_R_DIS (0x0 << 4) 159*4afb7f9cSSugar Zhang #define PWD_PGA_R_EN (0x1 << 4) 160*4afb7f9cSSugar Zhang 161*4afb7f9cSSugar Zhang enum { 162*4afb7f9cSSugar Zhang RK817_HIFI, 163*4afb7f9cSSugar Zhang RK817_VOICE, 164*4afb7f9cSSugar Zhang }; 165*4afb7f9cSSugar Zhang 166*4afb7f9cSSugar Zhang enum { 167*4afb7f9cSSugar Zhang RK817_MONO = 1, 168*4afb7f9cSSugar Zhang RK817_STEREO, 169*4afb7f9cSSugar Zhang }; 170*4afb7f9cSSugar Zhang 171*4afb7f9cSSugar Zhang enum { 172*4afb7f9cSSugar Zhang OFF, 173*4afb7f9cSSugar Zhang RCV, 174*4afb7f9cSSugar Zhang SPK_PATH, 175*4afb7f9cSSugar Zhang HP_PATH, 176*4afb7f9cSSugar Zhang HP_NO_MIC, 177*4afb7f9cSSugar Zhang BT, 178*4afb7f9cSSugar Zhang SPK_HP, 179*4afb7f9cSSugar Zhang RING_SPK, 180*4afb7f9cSSugar Zhang RING_HP, 181*4afb7f9cSSugar Zhang RING_HP_NO_MIC, 182*4afb7f9cSSugar Zhang RING_SPK_HP, 183*4afb7f9cSSugar Zhang }; 184*4afb7f9cSSugar Zhang 185*4afb7f9cSSugar Zhang enum { 186*4afb7f9cSSugar Zhang MIC_OFF, 187*4afb7f9cSSugar Zhang MAIN_MIC, 188*4afb7f9cSSugar Zhang HANDS_FREE_MIC, 189*4afb7f9cSSugar Zhang BT_SCO_MIC, 190*4afb7f9cSSugar Zhang }; 191*4afb7f9cSSugar Zhang 192*4afb7f9cSSugar Zhang struct rk817_reg_val_typ { 193*4afb7f9cSSugar Zhang unsigned int reg; 194*4afb7f9cSSugar Zhang unsigned int value; 195*4afb7f9cSSugar Zhang }; 196*4afb7f9cSSugar Zhang 197*4afb7f9cSSugar Zhang struct rk817_init_bit_typ { 198*4afb7f9cSSugar Zhang unsigned int reg; 199*4afb7f9cSSugar Zhang unsigned int power_bit; 200*4afb7f9cSSugar Zhang unsigned int init_bit; 201*4afb7f9cSSugar Zhang }; 202*4afb7f9cSSugar Zhang 203*4afb7f9cSSugar Zhang #endif /* __RK817_CODEC_H__ */ 204