1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * rk3036.h -- RK312x CODEC ALSA SoC audio driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright 2013 Rockship 6*4882a593Smuzhiyun * Author: chenjq <chenjq@rock-chips.com> 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef __RK312x_CODEC_H__ 11*4882a593Smuzhiyun #define __RK312x_CODEC_H__ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* codec register */ 16*4882a593Smuzhiyun #define RK312x_CODEC_BASE (0x0) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #define RK312x_RESET (RK312x_CODEC_BASE + 0x00) 19*4882a593Smuzhiyun #define RK312x_ADC_INT_CTL1 (RK312x_CODEC_BASE + 0x08) 20*4882a593Smuzhiyun #define RK312x_ADC_INT_CTL2 (RK312x_CODEC_BASE + 0x0c) 21*4882a593Smuzhiyun #define RK312x_DAC_INT_CTL1 (RK312x_CODEC_BASE + 0x10) 22*4882a593Smuzhiyun #define RK312x_DAC_INT_CTL2 (RK312x_CODEC_BASE + 0x14) 23*4882a593Smuzhiyun #define RK312x_DAC_INT_CTL3 (RK312x_CODEC_BASE + 0x18) 24*4882a593Smuzhiyun #define RK312x_ALC_CTL (RK312x_CODEC_BASE + 0x28) 25*4882a593Smuzhiyun #define RK312x_ADC_MIC_CTL (RK312x_CODEC_BASE + 0x88) 26*4882a593Smuzhiyun #define RK312x_BST_CTL (RK312x_CODEC_BASE + 0x8c) 27*4882a593Smuzhiyun #define RK312x_ALC_MUNIN_CTL (RK312x_CODEC_BASE + 0x90) 28*4882a593Smuzhiyun #define RK312x_BSTL_ALCL_CTL (RK312x_CODEC_BASE + 0x94) 29*4882a593Smuzhiyun #define RK312x_ALCR_GAIN_CTL (RK312x_CODEC_BASE + 0x98) 30*4882a593Smuzhiyun #define RK312x_ADC_ENABLE (RK312x_CODEC_BASE + 0x9c) 31*4882a593Smuzhiyun #define RK312x_DAC_CTL (RK312x_CODEC_BASE + 0xa0) 32*4882a593Smuzhiyun #define RK312x_DAC_ENABLE (RK312x_CODEC_BASE + 0xa4) 33*4882a593Smuzhiyun #define RK312x_HPMIX_CTL (RK312x_CODEC_BASE + 0xa8) 34*4882a593Smuzhiyun #define RK312x_HPMIX_S_SELECT (RK312x_CODEC_BASE + 0xac) 35*4882a593Smuzhiyun #define RK312x_HPOUT_CTL (RK312x_CODEC_BASE + 0xB0) 36*4882a593Smuzhiyun #define RK312x_HPOUTL_GAIN (RK312x_CODEC_BASE + 0xB4) 37*4882a593Smuzhiyun #define RK312x_HPOUTR_GAIN (RK312x_CODEC_BASE + 0xB8) 38*4882a593Smuzhiyun #define RK312x_SELECT_CURRENT (RK312x_CODEC_BASE + 0xBC) 39*4882a593Smuzhiyun #define RK312x_PGAL_AGC_CTL1 (RK312x_CODEC_BASE + 0x100) 40*4882a593Smuzhiyun #define RK312x_PGAL_AGC_CTL2 (RK312x_CODEC_BASE + 0x104) 41*4882a593Smuzhiyun #define RK312x_PGAL_AGC_CTL3 (RK312x_CODEC_BASE + 0x108) 42*4882a593Smuzhiyun #define RK312x_PGAL_AGC_CTL4 (RK312x_CODEC_BASE + 0x10c) 43*4882a593Smuzhiyun #define RK312x_PGAL_ASR_CTL (RK312x_CODEC_BASE + 0x110) 44*4882a593Smuzhiyun #define RK312x_PGAL_AGC_MAX_H (RK312x_CODEC_BASE + 0x114) 45*4882a593Smuzhiyun #define RK312x_PGAL_AGC_MAX_L (RK312x_CODEC_BASE + 0x118) 46*4882a593Smuzhiyun #define RK312x_PGAL_AGC_MIN_H (RK312x_CODEC_BASE + 0x11c) 47*4882a593Smuzhiyun #define RK312x_PGAL_AGC_MIN_L (RK312x_CODEC_BASE + 0x120) 48*4882a593Smuzhiyun #define RK312x_PGAL_AGC_CTL5 (RK312x_CODEC_BASE + 0x124) 49*4882a593Smuzhiyun #define RK312x_PGAR_AGC_CTL1 (RK312x_CODEC_BASE + 0x140) 50*4882a593Smuzhiyun #define RK312x_PGAR_AGC_CTL2 (RK312x_CODEC_BASE + 0x144) 51*4882a593Smuzhiyun #define RK312x_PGAR_AGC_CTL3 (RK312x_CODEC_BASE + 0x148) 52*4882a593Smuzhiyun #define RK312x_PGAR_AGC_CTL4 (RK312x_CODEC_BASE + 0x14c) 53*4882a593Smuzhiyun #define RK312x_PGAR_ASR_CTL (RK312x_CODEC_BASE + 0x150) 54*4882a593Smuzhiyun #define RK312x_PGAR_AGC_MAX_H (RK312x_CODEC_BASE + 0x154) 55*4882a593Smuzhiyun #define RK312x_PGAR_AGC_MAX_L (RK312x_CODEC_BASE + 0x158) 56*4882a593Smuzhiyun #define RK312x_PGAR_AGC_MIN_H (RK312x_CODEC_BASE + 0x15c) 57*4882a593Smuzhiyun #define RK312x_PGAR_AGC_MIN_L (RK312x_CODEC_BASE + 0x160) 58*4882a593Smuzhiyun #define RK312x_PGAR_AGC_CTL5 (RK312x_CODEC_BASE + 0x164) 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun /* ADC Interface Control 1 (0x08) */ 61*4882a593Smuzhiyun #define RK312x_ALRCK_POL_MASK (0x1 << 7) 62*4882a593Smuzhiyun #define RK312x_ALRCK_POL_SFT 7 63*4882a593Smuzhiyun #define RK312x_ALRCK_POL_EN (0x1 << 7) 64*4882a593Smuzhiyun #define RK312x_ALRCK_POL_DIS (0x0 << 7) 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #define RK312x_ADC_VWL_MASK (0x3 << 5) 67*4882a593Smuzhiyun #define RK312x_ADC_VWL_SFT 5 68*4882a593Smuzhiyun #define RK312x_ADC_VWL_32 (0x3 << 5) 69*4882a593Smuzhiyun #define RK312x_ADC_VWL_24 (0x2 << 5) 70*4882a593Smuzhiyun #define RK312x_ADC_VWL_20 (0x1 << 5) 71*4882a593Smuzhiyun #define RK312x_ADC_VWL_16 (0x0 << 5) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define RK312x_ADC_DF_MASK (0x3 << 3) 74*4882a593Smuzhiyun #define RK312x_ADC_DF_SFT 3 75*4882a593Smuzhiyun #define RK312x_ADC_DF_PCM (0x3 << 3) 76*4882a593Smuzhiyun #define RK312x_ADC_DF_I2S (0x2 << 3) 77*4882a593Smuzhiyun #define RK312x_ADC_DF_LJ (0x1 << 3) 78*4882a593Smuzhiyun #define RK312x_ADC_DF_RJ (0x0 << 3) 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #define RK312x_ADC_SWAP_MASK (0x1 << 1) 81*4882a593Smuzhiyun #define RK312x_ADC_SWAP_SFT 1 82*4882a593Smuzhiyun #define RK312x_ADC_SWAP_EN (0x1 << 1) 83*4882a593Smuzhiyun #define RK312x_ADC_SWAP_DIS (0x0 << 1) 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun #define RK312x_ADC_TYPE_MASK 0x1 86*4882a593Smuzhiyun #define RK312x_ADC_TYPE_SFT 0 87*4882a593Smuzhiyun #define RK312x_ADC_TYPE_MONO 0x1 88*4882a593Smuzhiyun #define RK312x_ADC_TYPE_STEREO 0x0 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun /* ADC Interface Control 2 (0x0c) */ 91*4882a593Smuzhiyun #define RK312x_I2S_MODE_MASK (0x1 << 4) 92*4882a593Smuzhiyun #define RK312x_I2S_MODE_SFT (4) 93*4882a593Smuzhiyun #define RK312x_I2S_MODE_MST (0x1 << 4) 94*4882a593Smuzhiyun #define RK312x_I2S_MODE_SLV (0x0 << 4) 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #define RK312x_ADC_WL_MASK (0x3 << 2) 97*4882a593Smuzhiyun #define RK312x_ADC_WL_SFT (2) 98*4882a593Smuzhiyun #define RK312x_ADC_WL_32 (0x3 << 2) 99*4882a593Smuzhiyun #define RK312x_ADC_WL_24 (0x2 << 2) 100*4882a593Smuzhiyun #define RK312x_ADC_WL_20 (0x1 << 2) 101*4882a593Smuzhiyun #define RK312x_ADC_WL_16 (0x0 << 2) 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun #define RK312x_ADC_RST_MASK (0x1 << 1) 104*4882a593Smuzhiyun #define RK312x_ADC_RST_SFT (1) 105*4882a593Smuzhiyun #define RK312x_ADC_RST_DIS (0x1 << 1) 106*4882a593Smuzhiyun #define RK312x_ADC_RST_EN (0x0 << 1) 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun #define RK312x_ABCLK_POL_MASK 0x1 109*4882a593Smuzhiyun #define RK312x_ABCLK_POL_SFT 0 110*4882a593Smuzhiyun #define RK312x_ABCLK_POL_EN 0x1 111*4882a593Smuzhiyun #define RK312x_ABCLK_POL_DIS 0x0 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* DAC Interface Control 1 (0x10) */ 114*4882a593Smuzhiyun #define RK312x_DLRCK_POL_MASK (0x1 << 7) 115*4882a593Smuzhiyun #define RK312x_DLRCK_POL_SFT 7 116*4882a593Smuzhiyun #define RK312x_DLRCK_POL_EN (0x1 << 7) 117*4882a593Smuzhiyun #define RK312x_DLRCK_POL_DIS (0x0 << 7) 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun #define RK312x_DAC_VWL_MASK (0x3 << 5) 120*4882a593Smuzhiyun #define RK312x_DAC_VWL_SFT 5 121*4882a593Smuzhiyun #define RK312x_DAC_VWL_32 (0x3 << 5) 122*4882a593Smuzhiyun #define RK312x_DAC_VWL_24 (0x2 << 5) 123*4882a593Smuzhiyun #define RK312x_DAC_VWL_20 (0x1 << 5) 124*4882a593Smuzhiyun #define RK312x_DAC_VWL_16 (0x0 << 5) 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun #define RK312x_DAC_DF_MASK (0x3 << 3) 127*4882a593Smuzhiyun #define RK312x_DAC_DF_SFT 3 128*4882a593Smuzhiyun #define RK312x_DAC_DF_PCM (0x3 << 3) 129*4882a593Smuzhiyun #define RK312x_DAC_DF_I2S (0x2 << 3) 130*4882a593Smuzhiyun #define RK312x_DAC_DF_LJ (0x1 << 3) 131*4882a593Smuzhiyun #define RK312x_DAC_DF_RJ (0x0 << 3) 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun #define RK312x_DAC_SWAP_MASK (0x1 << 2) 134*4882a593Smuzhiyun #define RK312x_DAC_SWAP_SFT 2 135*4882a593Smuzhiyun #define RK312x_DAC_SWAP_EN (0x1 << 2) 136*4882a593Smuzhiyun #define RK312x_DAC_SWAP_DIS (0x0 << 2) 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun /* DAC Interface Control 2 (0x14) */ 139*4882a593Smuzhiyun #define RK312x_DAC_WL_MASK (0x3 << 2) 140*4882a593Smuzhiyun #define RK312x_DAC_WL_SFT 2 141*4882a593Smuzhiyun #define RK312x_DAC_WL_32 (0x3 << 2) 142*4882a593Smuzhiyun #define RK312x_DAC_WL_24 (0x2 << 2) 143*4882a593Smuzhiyun #define RK312x_DAC_WL_20 (0x1 << 2) 144*4882a593Smuzhiyun #define RK312x_DAC_WL_16 (0x0 << 2) 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun #define RK312x_DAC_RST_MASK (0x1 << 1) 147*4882a593Smuzhiyun #define RK312x_DAC_RST_SFT 1 148*4882a593Smuzhiyun #define RK312x_DAC_RST_DIS (0x1 << 1) 149*4882a593Smuzhiyun #define RK312x_DAC_RST_EN (0x0 << 1) 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #define RK312x_DBCLK_POL_MASK 0x1 152*4882a593Smuzhiyun #define RK312x_DBCLK_POL_SFT 0 153*4882a593Smuzhiyun #define RK312x_DBCLK_POL_EN 0x1 154*4882a593Smuzhiyun #define RK312x_DBCLK_POL_DIS 0x0 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun /* ADC & MICBIAS (0x88) */ 157*4882a593Smuzhiyun #define RK312x_ADC_CURRENT_ENABLE (0x1 << 7) 158*4882a593Smuzhiyun #define RK312x_ADC_CURRENT_DISABLE (0x0 << 7) 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun #define RK312x_MICBIAS_VOL_ENABLE (6) 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun #define RK312x_ADCL_ZERO_DET_EN_SFT (5) 163*4882a593Smuzhiyun #define RK312x_ADCL_ZERO_DET_EN (0x1 << 5) 164*4882a593Smuzhiyun #define RK312x_ADCL_ZERO_DET_DIS (0x0 << 5) 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun #define RK312x_ADCR_ZERO_DET_EN_SFT (4) 167*4882a593Smuzhiyun #define RK312x_ADCR_ZERO_DET_EN (0x1 << 4) 168*4882a593Smuzhiyun #define RK312x_ADCR_ZERO_DET_DIS (0x0 << 4) 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun #define RK312x_MICBIAS_VOL_SHT 0 171*4882a593Smuzhiyun #define RK312x_MICBIAS_VOL_MSK 7 172*4882a593Smuzhiyun #define RK312x_MICBIAS_VOL_MIN (0x0 << 0) 173*4882a593Smuzhiyun #define RK312x_MICBIAS_VOL_MAX (0x7 << 0) 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun /* BST_L BST_R CONTROL (0x8C) */ 176*4882a593Smuzhiyun #define RK312x_BSTL_PWRD_SFT (6) 177*4882a593Smuzhiyun #define RK312x_BSTL_EN (0x1 << 6) 178*4882a593Smuzhiyun #define RK312x_BSTL_DIS (0x0 << 6) 179*4882a593Smuzhiyun #define RK312x_BSTL_GAIN_SHT (5) 180*4882a593Smuzhiyun #define RK312x_BSTL_GAIN_20 (0x1 << 5) 181*4882a593Smuzhiyun #define RK312x_BSTL_GAIN_0 (0x0 << 5) 182*4882a593Smuzhiyun #define RK312x_BSTL_MUTE_SHT (4) 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun #define RK312x_BSTR_PWRD_SFT (2) 185*4882a593Smuzhiyun #define RK312x_BSTR_EN (0x1 << 2) 186*4882a593Smuzhiyun #define RK312x_BSTR_DIS (0x0 << 2) 187*4882a593Smuzhiyun #define RK312x_BSTR_GAIN_SHT (1) 188*4882a593Smuzhiyun #define RK312x_BSTR_GAIN_20 (0x1 << 1) 189*4882a593Smuzhiyun #define RK312x_BSTR_GAIN_0 (0x0 << 1) 190*4882a593Smuzhiyun #define RK312x_BSTR_MUTE_SHT (0) 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun /* MUXINL ALCL MUXINR ALCR (0x90) */ 194*4882a593Smuzhiyun #define RK312x_MUXINL_F_SHT (6) 195*4882a593Smuzhiyun #define RK312x_MUXINL_F_MSK (0x03 << 6) 196*4882a593Smuzhiyun #define RK312x_MUXINL_F_INL (0x02 << 6) 197*4882a593Smuzhiyun #define RK312x_MUXINL_F_BSTL (0x01 << 6) 198*4882a593Smuzhiyun #define RK312x_ALCL_PWR_SHT (5) 199*4882a593Smuzhiyun #define RK312x_ALCL_EN (0x1 << 5) 200*4882a593Smuzhiyun #define RK312x_ALCL_DIS (0x0 << 5) 201*4882a593Smuzhiyun #define RK312x_ALCL_MUTE_SHT (4) 202*4882a593Smuzhiyun #define RK312x_MUXINR_F_SHT (2) 203*4882a593Smuzhiyun #define RK312x_MUXINR_F_MSK (0x03 << 2) 204*4882a593Smuzhiyun #define RK312x_MUXINR_F_INR (0x02 << 2) 205*4882a593Smuzhiyun #define RK312x_MUXINR_F_BSTR (0x01 << 2) 206*4882a593Smuzhiyun #define RK312x_ALCR_PWR_SHT (1) 207*4882a593Smuzhiyun #define RK312x_ALCR_EN (0x1 << 1) 208*4882a593Smuzhiyun #define RK312x_ALCR_DIS (0x0 << 1) 209*4882a593Smuzhiyun #define RK312x_ALCR_MUTE_SHT (0) 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun /* BST_L MODE & ALC_L GAIN (0x94) */ 212*4882a593Smuzhiyun #define RK312x_BSTL_MODE_SFT (5) 213*4882a593Smuzhiyun #define RK312x_BSTL_MODE_SINGLE (0x1 << 5) 214*4882a593Smuzhiyun #define RK312x_BSTL_MODE_DIFF (0x0 << 5) 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun #define RK312x_ALCL_GAIN_SHT (0) 217*4882a593Smuzhiyun #define RK312x_ALCL_GAIN_MSK (0x1f) 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun /* ALC_R GAIN (0x98) */ 220*4882a593Smuzhiyun #define RK312x_ALCR_GAIN_SHT (0) 221*4882a593Smuzhiyun #define RK312x_ALCR_GAIN_MSK (0x1f) 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun /* ADC control (0x9C) */ 224*4882a593Smuzhiyun #define RK312x_ADCL_REF_VOL_EN_SFT (3) 225*4882a593Smuzhiyun #define RK312x_ADCL_REF_VOL_EN (0x1 << 7) 226*4882a593Smuzhiyun #define RK312x_ADCL_REF_VOL_DIS (0x0 << 7) 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun #define RK312x_ADCL_CLK_EN_SFT (6) 229*4882a593Smuzhiyun #define RK312x_ADCL_CLK_EN (0x1 << 6) 230*4882a593Smuzhiyun #define RK312x_ADCL_CLK_DIS (0x0 << 6) 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun #define RK312x_ADCL_AMP_EN_SFT (5) 233*4882a593Smuzhiyun #define RK312x_ADCL_AMP_EN (0x1 << 5) 234*4882a593Smuzhiyun #define RK312x_ADCL_AMP_DIS (0x0 << 5) 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun #define RK312x_ADCL_RST_EN (0x1 << 4) 237*4882a593Smuzhiyun #define RK312x_ADCL_RST_DIS (0x0 << 4) 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun #define RK312x_ADCR_REF_VOL_EN_SFT (3) 240*4882a593Smuzhiyun #define RK312x_ADCR_REF_VOL_EN (0x1 << 3) 241*4882a593Smuzhiyun #define RK312x_ADCR_REF_VOL_DIS (0x0 << 3) 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun #define RK312x_ADCR_CLK_EN_SFT (2) 244*4882a593Smuzhiyun #define RK312x_ADCR_CLK_EN (0x1 << 2) 245*4882a593Smuzhiyun #define RK312x_ADCR_CLK_DIS (0x0 << 2) 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun #define RK312x_ADCR_AMP_EN_SFT (1) 248*4882a593Smuzhiyun #define RK312x_ADCR_AMP_EN (0x1 << 1) 249*4882a593Smuzhiyun #define RK312x_ADCR_AMP_DIS (0x0 << 1) 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun #define RK312x_ADCR_RST_EN (0x1 << 0) 252*4882a593Smuzhiyun #define RK312x_ADCR_RST_DIS (0x0 << 0) 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun /* DAC & VOUT Control (0xa0) */ 255*4882a593Smuzhiyun #define RK312x_CURRENT_EN (0x1 << 6) 256*4882a593Smuzhiyun #define RK312x_CURRENT_DIS (0x0 << 6) 257*4882a593Smuzhiyun #define RK312x_REF_VOL_DACL_EN_SFT (5) 258*4882a593Smuzhiyun #define RK312x_REF_VOL_DACL_EN (0x1 << 5) 259*4882a593Smuzhiyun #define RK312x_REF_VOL_DACL_DIS (0x0 << 5) 260*4882a593Smuzhiyun #define RK312x_ZO_DET_VOUTL_SFT (4) 261*4882a593Smuzhiyun #define RK312x_ZO_DET_VOUTL_EN (0x1 << 4) 262*4882a593Smuzhiyun #define RK312x_ZO_DET_VOUTL_DIS (0x0 << 4) 263*4882a593Smuzhiyun #define RK312x_DET_ERAPHONE_DIS (0x0 << 3) 264*4882a593Smuzhiyun #define RK312x_DET_ERAPHONE_EN (0x1 << 3) 265*4882a593Smuzhiyun #define RK312x_REF_VOL_DACR_EN_SFT (1) 266*4882a593Smuzhiyun #define RK312x_REF_VOL_DACR_EN (0x1 << 1) 267*4882a593Smuzhiyun #define RK312x_REF_VOL_DACR_DIS (0x0 << 1) 268*4882a593Smuzhiyun #define RK312x_ZO_DET_VOUTR_SFT (0) 269*4882a593Smuzhiyun #define RK312x_ZO_DET_VOUTR_EN (0x1 << 0) 270*4882a593Smuzhiyun #define RK312x_ZO_DET_VOUTR_DIS (0x0 << 0) 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun /* DAC control (0xa4) */ 273*4882a593Smuzhiyun #define RK312x_DACL_REF_VOL_EN_SFT (7) 274*4882a593Smuzhiyun #define RK312x_DACL_REF_VOL_EN (0x1 << 7) 275*4882a593Smuzhiyun #define RK312x_DACL_REF_VOL_DIS (0x0 << 7) 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun #define RK312x_DACL_CLK_EN (0x1 << 6) 278*4882a593Smuzhiyun #define RK312x_DACL_CLK_DIS (0x0 << 6) 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun #define RK312x_DACL_EN (0x1 << 5) 281*4882a593Smuzhiyun #define RK312x_DACL_DIS (0x0 << 5) 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun #define RK312x_DACL_INIT (0x0 << 4) 284*4882a593Smuzhiyun #define RK312x_DACL_WORK (0x1 << 4) 285*4882a593Smuzhiyun 286*4882a593Smuzhiyun #define RK312x_DACR_REF_VOL_EN_SFT (3) 287*4882a593Smuzhiyun #define RK312x_DACR_REF_VOL_EN (0x1 << 3) 288*4882a593Smuzhiyun #define RK312x_DACR_REF_VOL_DIS (0x0 << 3) 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun #define RK312x_DACR_CLK_EN (0x1 << 2) 291*4882a593Smuzhiyun #define RK312x_DACR_CLK_DIS (0x0 << 2) 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun #define RK312x_DACR_EN (0x1 << 1) 294*4882a593Smuzhiyun #define RK312x_DACR_DIS (0x0 << 1) 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun #define RK312x_DACR_INIT (0x0 << 0) 297*4882a593Smuzhiyun #define RK312x_DACR_WORK (0x1 << 0) 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun /* HPMIXL HPMIXR Control (0xa8) */ 300*4882a593Smuzhiyun #define RK312x_HPMIXL_SFT (6) 301*4882a593Smuzhiyun #define RK312x_HPMIXL_EN (0x1 << 6) 302*4882a593Smuzhiyun #define RK312x_HPMIXL_DIS (0x0 << 6) 303*4882a593Smuzhiyun #define RK312x_HPMIXL_INIT1 (0x0 << 5) 304*4882a593Smuzhiyun #define RK312x_HPMIXL_WORK1 (0x1 << 5) 305*4882a593Smuzhiyun #define RK312x_HPMIXL_INIT2 (0x0 << 4) 306*4882a593Smuzhiyun #define RK312x_HPMIXL_WORK2 (0x1 << 4) 307*4882a593Smuzhiyun #define RK312x_HPMIXR_SFT (2) 308*4882a593Smuzhiyun #define RK312x_HPMIXR_EN (0x1 << 2) 309*4882a593Smuzhiyun #define RK312x_HPMIXR_DIS (0x0 << 2) 310*4882a593Smuzhiyun #define RK312x_HPMIXR_INIT1 (0x0 << 1) 311*4882a593Smuzhiyun #define RK312x_HPMIXR_WORK1 (0x1 << 1) 312*4882a593Smuzhiyun #define RK312x_HPMIXR_INIT2 (0x0 << 0) 313*4882a593Smuzhiyun #define RK312x_HPMIXR_WORK2 (0x1 << 0) 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun /* HPMIXL Control (0xac) */ 316*4882a593Smuzhiyun #define RK312x_HPMIXL_BYPASS_SFT (7) 317*4882a593Smuzhiyun #define RK312x_HPMIXL_SEL_ALCL_SFT (6) 318*4882a593Smuzhiyun #define RK312x_HPMIXL_SEL_ALCR_SFT (5) 319*4882a593Smuzhiyun #define RK312x_HPMIXL_SEL_DACL_SFT (4) 320*4882a593Smuzhiyun #define RK312x_HPMIXR_BYPASS_SFT (3) 321*4882a593Smuzhiyun #define RK312x_HPMIXR_SEL_ALCL_SFT (2) 322*4882a593Smuzhiyun #define RK312x_HPMIXR_SEL_ALCR_SFT (1) 323*4882a593Smuzhiyun #define RK312x_HPMIXR_SEL_DACR_SFT (0) 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun /* HPOUT Control (0xb0) */ 326*4882a593Smuzhiyun #define RK312x_HPOUTL_PWR_SHT (7) 327*4882a593Smuzhiyun #define RK312x_HPOUTL_MSK (0x1 << 7) 328*4882a593Smuzhiyun #define RK312x_HPOUTL_EN (0x1 << 7) 329*4882a593Smuzhiyun #define RK312x_HPOUTL_DIS (0x0 << 7) 330*4882a593Smuzhiyun #define RK312x_HPOUTL_INIT_MSK (0x1 << 6) 331*4882a593Smuzhiyun #define RK312x_HPOUTL_INIT (0x0 << 6) 332*4882a593Smuzhiyun #define RK312x_HPOUTL_WORK (0x1 << 6) 333*4882a593Smuzhiyun #define RK312x_HPOUTL_MUTE_SHT (5) 334*4882a593Smuzhiyun #define RK312x_HPOUTL_MUTE_MSK (0x1 << 5) 335*4882a593Smuzhiyun #define RK312x_HPOUTL_MUTE_EN (0x0 << 5) 336*4882a593Smuzhiyun #define RK312x_HPOUTL_MUTE_DIS (0x1 << 5) 337*4882a593Smuzhiyun #define RK312x_HPOUTR_PWR_SHT (4) 338*4882a593Smuzhiyun #define RK312x_HPOUTR_MSK (0x1 << 4) 339*4882a593Smuzhiyun #define RK312x_HPOUTR_EN (0x1 << 4) 340*4882a593Smuzhiyun #define RK312x_HPOUTR_DIS (0x0 << 4) 341*4882a593Smuzhiyun #define RK312x_HPOUTR_INIT_MSK (0x1 << 3) 342*4882a593Smuzhiyun #define RK312x_HPOUTR_WORK (0x1 << 3) 343*4882a593Smuzhiyun #define RK312x_HPOUTR_INIT (0x0 << 3) 344*4882a593Smuzhiyun #define RK312x_HPOUTR_MUTE_SHT (2) 345*4882a593Smuzhiyun #define RK312x_HPOUTR_MUTE_MSK (0x1 << 2) 346*4882a593Smuzhiyun #define RK312x_HPOUTR_MUTE_EN (0x0 << 2) 347*4882a593Smuzhiyun #define RK312x_HPOUTR_MUTE_DIS (0x1 << 2) 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun #define RK312x_HPVREF_PWR_SHT (1) 350*4882a593Smuzhiyun #define RK312x_HPVREF_EN (0x1 << 1) 351*4882a593Smuzhiyun #define RK312x_HPVREF_DIS (0x0 << 1) 352*4882a593Smuzhiyun #define RK312x_HPVREF_WORK (0x1 << 0) 353*4882a593Smuzhiyun #define RK312x_HPVREF_INIT (0x0 << 0) 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun /* HPOUT GAIN (0xb4 0xb8) */ 356*4882a593Smuzhiyun #define RK312x_HPOUT_GAIN_SFT (0) 357*4882a593Smuzhiyun 358*4882a593Smuzhiyun /* SELECT CURR prechagrge/discharge (0xbc) */ 359*4882a593Smuzhiyun #define RK312x_PRE_HPOUT (0x1 << 5) 360*4882a593Smuzhiyun #define RK312x_DIS_HPOUT (0x0 << 5) 361*4882a593Smuzhiyun #define RK312x_CUR_10UA_EN (0x0 << 4) 362*4882a593Smuzhiyun #define RK312x_CUR_10UA_DIS (0x1 << 4) 363*4882a593Smuzhiyun #define RK312x_CUR_I_EN (0x0 << 3) 364*4882a593Smuzhiyun #define RK312x_CUR_I_DIS (0x1 << 3) 365*4882a593Smuzhiyun #define RK312x_CUR_2I_EN (0x0 << 2) 366*4882a593Smuzhiyun #define RK312x_CUR_2I_DIS (0x1 << 2) 367*4882a593Smuzhiyun #define RK312x_CUR_4I_EN (0x0 << 0) 368*4882a593Smuzhiyun #define RK312x_CUR_4I_DIS (0x3 << 0) 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun /* PGA AGC control 1 (0xc0 0x100) */ 371*4882a593Smuzhiyun #define RK312x_PGA_AGC_WAY_MASK (0x1 << 6) 372*4882a593Smuzhiyun #define RK312x_PGA_AGC_WAY_SFT 6 373*4882a593Smuzhiyun #define RK312x_PGA_AGC_WAY_JACK (0x1 << 6) 374*4882a593Smuzhiyun #define RK312x_PGA_AGC_WAY_NOR (0x0 << 6) 375*4882a593Smuzhiyun 376*4882a593Smuzhiyun #define RK312x_PGA_AGC_BK_WAY_SFT 4 377*4882a593Smuzhiyun #define RK312x_PGA_AGC_BK_WAY_JACK1 (0x1 << 4) 378*4882a593Smuzhiyun #define RK312x_PGA_AGC_BK_WAY_NOR (0x0 << 4) 379*4882a593Smuzhiyun #define RK312x_PGA_AGC_BK_WAY_JACK2 (0x2 << 4) 380*4882a593Smuzhiyun #define RK312x_PGA_AGC_BK_WAY_JACK3 (0x3 << 4) 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_MASK 0xf 383*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_SFT 0 384*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_1024 0xa 385*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_512 0x9 386*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_256 0x8 387*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_128 0x7 388*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_64 0x6 389*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_32 0x5 390*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_16 0x4 391*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_8 0x3 392*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_4 0x2 393*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_2 0x1 394*4882a593Smuzhiyun #define RK312x_PGA_AGC_HOLD_T_0 0x0 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun /* PGA AGC control 2 (0xc4 0x104) */ 397*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_MASK (0xf << 4) 398*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_SFT 4 399*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_512 (0xa << 4) 400*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_256 (0x9 << 4) 401*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_128 (0x8 << 4) 402*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_64 (0x7 << 4) 403*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_32 (0x6 << 4) 404*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_16 (0x5 << 4) 405*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_8 (0x4 << 4) 406*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_4 (0x3 << 4) 407*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_2 (0x2 << 4) 408*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_1 (0x1 << 4) 409*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRU_T_0_5 (0x0 << 4) 410*4882a593Smuzhiyun 411*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_MASK 0xf 412*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_SFT 0 413*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_128_32 0xa 414*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_64_16 0x9 415*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_32_8 0x8 416*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_16_4 0x7 417*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_8_2 0x6 418*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_4_1 0x5 419*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_2_0_512 0x4 420*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_1_0_256 0x3 421*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_0_500_128 0x2 422*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_0_250_64 0x1 423*4882a593Smuzhiyun #define RK312x_PGA_AGC_GRD_T_0_125_32 0x0 424*4882a593Smuzhiyun 425*4882a593Smuzhiyun /* PGA AGC control 3 (0xc8 0x108) */ 426*4882a593Smuzhiyun #define RK312x_PGA_AGC_MODE_MASK (0x1 << 7) 427*4882a593Smuzhiyun #define RK312x_PGA_AGC_MODE_SFT 7 428*4882a593Smuzhiyun #define RK312x_PGA_AGC_MODE_LIMIT (0x1 << 7) 429*4882a593Smuzhiyun #define RK312x_PGA_AGC_MODE_NOR (0x0 << 7) 430*4882a593Smuzhiyun 431*4882a593Smuzhiyun #define RK312x_PGA_AGC_ZO_MASK (0x1 << 6) 432*4882a593Smuzhiyun #define RK312x_PGA_AGC_ZO_SFT 6 433*4882a593Smuzhiyun #define RK312x_PGA_AGC_ZO_EN (0x1 << 6) 434*4882a593Smuzhiyun #define RK312x_PGA_AGC_ZO_DIS (0x0 << 6) 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun #define RK312x_PGA_AGC_REC_MODE_MASK (0x1 << 5) 437*4882a593Smuzhiyun #define RK312x_PGA_AGC_REC_MODE_SFT 5 438*4882a593Smuzhiyun #define RK312x_PGA_AGC_REC_MODE_AC (0x1 << 5) 439*4882a593Smuzhiyun #define RK312x_PGA_AGC_REC_MODE_RN (0x0 << 5) 440*4882a593Smuzhiyun 441*4882a593Smuzhiyun #define RK312x_PGA_AGC_FAST_D_MASK (0x1 << 4) 442*4882a593Smuzhiyun #define RK312x_PGA_AGC_FAST_D_SFT 4 443*4882a593Smuzhiyun #define RK312x_PGA_AGC_FAST_D_EN (0x1 << 4) 444*4882a593Smuzhiyun #define RK312x_PGA_AGC_FAST_D_DIS (0x0 << 4) 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_MASK (0x1 << 3) 447*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_SFT 3 448*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_EN (0x1 << 3) 449*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_DIS (0x0 << 3) 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_MASK 0x7 452*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_SFT 0 453*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_N81DB 0x7 454*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_N75DB 0x6 455*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_N69DB 0x5 456*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_N63DB 0x4 457*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_N57DB 0x3 458*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_N51DB 0x2 459*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_N45DB 0x1 460*4882a593Smuzhiyun #define RK312x_PGA_AGC_NG_THR_N39DB 0x0 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun /* PGA AGC Control 4 (0xcc 0x10c) */ 463*4882a593Smuzhiyun #define RK312x_PGA_AGC_ZO_MODE_MASK (0x1 << 5) 464*4882a593Smuzhiyun #define RK312x_PGA_AGC_ZO_MODE_SFT 5 465*4882a593Smuzhiyun #define RK312x_PGA_AGC_ZO_MODE_UWRC (0x1 << 5) 466*4882a593Smuzhiyun #define RK312x_PGA_AGC_ZO_MODE_UARC (0x0 << 5) 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun #define RK312x_PGA_AGC_VOL_MASK 0x1f 469*4882a593Smuzhiyun #define RK312x_PGA_AGC_VOL_SFT 0 470*4882a593Smuzhiyun 471*4882a593Smuzhiyun /* PGA ASR Control (0xd0 0x110) */ 472*4882a593Smuzhiyun #define RK312x_PGA_SLOW_CLK_MASK (0x1 << 3) 473*4882a593Smuzhiyun #define RK312x_PGA_SLOW_CLK_SFT 3 474*4882a593Smuzhiyun #define RK312x_PGA_SLOW_CLK_EN (0x1 << 3) 475*4882a593Smuzhiyun #define RK312x_PGA_SLOW_CLK_DIS (0x0 << 3) 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun #define RK312x_PGA_ASR_MASK 0x7 478*4882a593Smuzhiyun #define RK312x_PGA_ASR_SFT 0 479*4882a593Smuzhiyun #define RK312x_PGA_ASR_8KHz 0x7 480*4882a593Smuzhiyun #define RK312x_PGA_ASR_12KHz 0x6 481*4882a593Smuzhiyun #define RK312x_PGA_ASR_16KHz 0x5 482*4882a593Smuzhiyun #define RK312x_PGA_ASR_24KHz 0x4 483*4882a593Smuzhiyun #define RK312x_PGA_ASR_32KHz 0x3 484*4882a593Smuzhiyun #define RK312x_PGA_ASR_441KHz 0x2 485*4882a593Smuzhiyun #define RK312x_PGA_ASR_48KHz 0x1 486*4882a593Smuzhiyun #define RK312x_PGA_ASR_96KHz 0x0 487*4882a593Smuzhiyun 488*4882a593Smuzhiyun /* PGA AGC Control 5 (0xe4 0x124) */ 489*4882a593Smuzhiyun #define RK312x_PGA_AGC_MASK (0x1 << 6) 490*4882a593Smuzhiyun #define RK312x_PGA_AGC_SFT 6 491*4882a593Smuzhiyun #define RK312x_PGA_AGC_EN (0x1 << 6) 492*4882a593Smuzhiyun #define RK312x_PGA_AGC_DIS (0x0 << 6) 493*4882a593Smuzhiyun 494*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_MASK (0x7 << 3) 495*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_SFT 3 496*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_28_5DB (0x7 << 3) 497*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_22_5DB (0x6 << 3) 498*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_16_5DB (0x5 << 3) 499*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_10_5DB (0x4 << 3) 500*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_4_5DB (0x3 << 3) 501*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_N1_5DB (0x2 << 3) 502*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_N7_5DB (0x1 << 3) 503*4882a593Smuzhiyun #define RK312x_PGA_AGC_MAX_G_N13_5DB (0x0 << 3) 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_MASK 0x7 506*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_SFT 0 507*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_24DB 0x7 508*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_18DB 0x6 509*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_12DB 0x5 510*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_6DB 0x4 511*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_0DB 0x3 512*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_N6DB 0x2 513*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_N12DB 0x1 514*4882a593Smuzhiyun #define RK312x_PGA_AGC_MIN_G_N18DB 0x0 515*4882a593Smuzhiyun 516*4882a593Smuzhiyun enum { 517*4882a593Smuzhiyun RK312x_HIFI, 518*4882a593Smuzhiyun RK312x_VOICE, 519*4882a593Smuzhiyun }; 520*4882a593Smuzhiyun 521*4882a593Smuzhiyun enum { 522*4882a593Smuzhiyun RK312x_MONO = 1, 523*4882a593Smuzhiyun RK312x_STEREO, 524*4882a593Smuzhiyun }; 525*4882a593Smuzhiyun 526*4882a593Smuzhiyun enum { 527*4882a593Smuzhiyun OFF, 528*4882a593Smuzhiyun RCV, 529*4882a593Smuzhiyun SPK_PATH, 530*4882a593Smuzhiyun HP_PATH, 531*4882a593Smuzhiyun HP_NO_MIC, 532*4882a593Smuzhiyun BT, 533*4882a593Smuzhiyun SPK_HP, 534*4882a593Smuzhiyun RING_SPK, 535*4882a593Smuzhiyun RING_HP, 536*4882a593Smuzhiyun RING_HP_NO_MIC, 537*4882a593Smuzhiyun RING_SPK_HP, 538*4882a593Smuzhiyun }; 539*4882a593Smuzhiyun 540*4882a593Smuzhiyun enum { 541*4882a593Smuzhiyun MIC_OFF, 542*4882a593Smuzhiyun Main_Mic, 543*4882a593Smuzhiyun Hands_Free_Mic, 544*4882a593Smuzhiyun BT_Sco_Mic, 545*4882a593Smuzhiyun }; 546*4882a593Smuzhiyun 547*4882a593Smuzhiyun struct rk312x_reg_val_typ { 548*4882a593Smuzhiyun unsigned int reg; 549*4882a593Smuzhiyun unsigned int value; 550*4882a593Smuzhiyun }; 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun struct rk312x_init_bit_typ { 553*4882a593Smuzhiyun unsigned int reg; 554*4882a593Smuzhiyun unsigned int power_bit; 555*4882a593Smuzhiyun unsigned int init2_bit; 556*4882a593Smuzhiyun unsigned int init1_bit; 557*4882a593Smuzhiyun unsigned int init0_bit; 558*4882a593Smuzhiyun }; 559*4882a593Smuzhiyun 560*4882a593Smuzhiyun struct rk312x_codec_pdata { 561*4882a593Smuzhiyun int spk_ctl_gpio; 562*4882a593Smuzhiyun int hp_ctl_gpio; 563*4882a593Smuzhiyun int delay_time; 564*4882a593Smuzhiyun }; 565*4882a593Smuzhiyun 566*4882a593Smuzhiyun #endif /* __RK312x_CODEC_H__ */ 567