1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * da7213.h - DA7213 ASoC Codec Driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2013 Dialog Semiconductor 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Author: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef _DA7213_H 11*4882a593Smuzhiyun #define _DA7213_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #include <linux/clk.h> 14*4882a593Smuzhiyun #include <linux/regmap.h> 15*4882a593Smuzhiyun #include <linux/regulator/consumer.h> 16*4882a593Smuzhiyun #include <sound/da7213.h> 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* 19*4882a593Smuzhiyun * Registers 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun /* Status Registers */ 23*4882a593Smuzhiyun #define DA7213_STATUS1 0x02 24*4882a593Smuzhiyun #define DA7213_PLL_STATUS 0x03 25*4882a593Smuzhiyun #define DA7213_AUX_L_GAIN_STATUS 0x04 26*4882a593Smuzhiyun #define DA7213_AUX_R_GAIN_STATUS 0x05 27*4882a593Smuzhiyun #define DA7213_MIC_1_GAIN_STATUS 0x06 28*4882a593Smuzhiyun #define DA7213_MIC_2_GAIN_STATUS 0x07 29*4882a593Smuzhiyun #define DA7213_MIXIN_L_GAIN_STATUS 0x08 30*4882a593Smuzhiyun #define DA7213_MIXIN_R_GAIN_STATUS 0x09 31*4882a593Smuzhiyun #define DA7213_ADC_L_GAIN_STATUS 0x0A 32*4882a593Smuzhiyun #define DA7213_ADC_R_GAIN_STATUS 0x0B 33*4882a593Smuzhiyun #define DA7213_DAC_L_GAIN_STATUS 0x0C 34*4882a593Smuzhiyun #define DA7213_DAC_R_GAIN_STATUS 0x0D 35*4882a593Smuzhiyun #define DA7213_HP_L_GAIN_STATUS 0x0E 36*4882a593Smuzhiyun #define DA7213_HP_R_GAIN_STATUS 0x0F 37*4882a593Smuzhiyun #define DA7213_LINE_GAIN_STATUS 0x10 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun /* System Initialisation Registers */ 40*4882a593Smuzhiyun #define DA7213_DIG_ROUTING_DAI 0x21 41*4882a593Smuzhiyun #define DA7213_SR 0x22 42*4882a593Smuzhiyun #define DA7213_REFERENCES 0x23 43*4882a593Smuzhiyun #define DA7213_PLL_FRAC_TOP 0x24 44*4882a593Smuzhiyun #define DA7213_PLL_FRAC_BOT 0x25 45*4882a593Smuzhiyun #define DA7213_PLL_INTEGER 0x26 46*4882a593Smuzhiyun #define DA7213_PLL_CTRL 0x27 47*4882a593Smuzhiyun #define DA7213_DAI_CLK_MODE 0x28 48*4882a593Smuzhiyun #define DA7213_DAI_CTRL 0x29 49*4882a593Smuzhiyun #define DA7213_DIG_ROUTING_DAC 0x2A 50*4882a593Smuzhiyun #define DA7213_ALC_CTRL1 0x2B 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* Input - Gain, Select and Filter Registers */ 53*4882a593Smuzhiyun #define DA7213_AUX_L_GAIN 0x30 54*4882a593Smuzhiyun #define DA7213_AUX_R_GAIN 0x31 55*4882a593Smuzhiyun #define DA7213_MIXIN_L_SELECT 0x32 56*4882a593Smuzhiyun #define DA7213_MIXIN_R_SELECT 0x33 57*4882a593Smuzhiyun #define DA7213_MIXIN_L_GAIN 0x34 58*4882a593Smuzhiyun #define DA7213_MIXIN_R_GAIN 0x35 59*4882a593Smuzhiyun #define DA7213_ADC_L_GAIN 0x36 60*4882a593Smuzhiyun #define DA7213_ADC_R_GAIN 0x37 61*4882a593Smuzhiyun #define DA7213_ADC_FILTERS1 0x38 62*4882a593Smuzhiyun #define DA7213_MIC_1_GAIN 0x39 63*4882a593Smuzhiyun #define DA7213_MIC_2_GAIN 0x3A 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* Output - Gain, Select and Filter Registers */ 66*4882a593Smuzhiyun #define DA7213_DAC_FILTERS5 0x40 67*4882a593Smuzhiyun #define DA7213_DAC_FILTERS2 0x41 68*4882a593Smuzhiyun #define DA7213_DAC_FILTERS3 0x42 69*4882a593Smuzhiyun #define DA7213_DAC_FILTERS4 0x43 70*4882a593Smuzhiyun #define DA7213_DAC_FILTERS1 0x44 71*4882a593Smuzhiyun #define DA7213_DAC_L_GAIN 0x45 72*4882a593Smuzhiyun #define DA7213_DAC_R_GAIN 0x46 73*4882a593Smuzhiyun #define DA7213_CP_CTRL 0x47 74*4882a593Smuzhiyun #define DA7213_HP_L_GAIN 0x48 75*4882a593Smuzhiyun #define DA7213_HP_R_GAIN 0x49 76*4882a593Smuzhiyun #define DA7213_LINE_GAIN 0x4A 77*4882a593Smuzhiyun #define DA7213_MIXOUT_L_SELECT 0x4B 78*4882a593Smuzhiyun #define DA7213_MIXOUT_R_SELECT 0x4C 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun /* System Controller Registers */ 81*4882a593Smuzhiyun #define DA7213_SYSTEM_MODES_INPUT 0x50 82*4882a593Smuzhiyun #define DA7213_SYSTEM_MODES_OUTPUT 0x51 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* Control Registers */ 85*4882a593Smuzhiyun #define DA7213_AUX_L_CTRL 0x60 86*4882a593Smuzhiyun #define DA7213_AUX_R_CTRL 0x61 87*4882a593Smuzhiyun #define DA7213_MICBIAS_CTRL 0x62 88*4882a593Smuzhiyun #define DA7213_MIC_1_CTRL 0x63 89*4882a593Smuzhiyun #define DA7213_MIC_2_CTRL 0x64 90*4882a593Smuzhiyun #define DA7213_MIXIN_L_CTRL 0x65 91*4882a593Smuzhiyun #define DA7213_MIXIN_R_CTRL 0x66 92*4882a593Smuzhiyun #define DA7213_ADC_L_CTRL 0x67 93*4882a593Smuzhiyun #define DA7213_ADC_R_CTRL 0x68 94*4882a593Smuzhiyun #define DA7213_DAC_L_CTRL 0x69 95*4882a593Smuzhiyun #define DA7213_DAC_R_CTRL 0x6A 96*4882a593Smuzhiyun #define DA7213_HP_L_CTRL 0x6B 97*4882a593Smuzhiyun #define DA7213_HP_R_CTRL 0x6C 98*4882a593Smuzhiyun #define DA7213_LINE_CTRL 0x6D 99*4882a593Smuzhiyun #define DA7213_MIXOUT_L_CTRL 0x6E 100*4882a593Smuzhiyun #define DA7213_MIXOUT_R_CTRL 0x6F 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun /* Configuration Registers */ 103*4882a593Smuzhiyun #define DA7213_LDO_CTRL 0x90 104*4882a593Smuzhiyun #define DA7213_IO_CTRL 0x91 105*4882a593Smuzhiyun #define DA7213_GAIN_RAMP_CTRL 0x92 106*4882a593Smuzhiyun #define DA7213_MIC_CONFIG 0x93 107*4882a593Smuzhiyun #define DA7213_PC_COUNT 0x94 108*4882a593Smuzhiyun #define DA7213_CP_VOL_THRESHOLD1 0x95 109*4882a593Smuzhiyun #define DA7213_CP_DELAY 0x96 110*4882a593Smuzhiyun #define DA7213_CP_DETECTOR 0x97 111*4882a593Smuzhiyun #define DA7213_DAI_OFFSET 0x98 112*4882a593Smuzhiyun #define DA7213_DIG_CTRL 0x99 113*4882a593Smuzhiyun #define DA7213_ALC_CTRL2 0x9A 114*4882a593Smuzhiyun #define DA7213_ALC_CTRL3 0x9B 115*4882a593Smuzhiyun #define DA7213_ALC_NOISE 0x9C 116*4882a593Smuzhiyun #define DA7213_ALC_TARGET_MIN 0x9D 117*4882a593Smuzhiyun #define DA7213_ALC_TARGET_MAX 0x9E 118*4882a593Smuzhiyun #define DA7213_ALC_GAIN_LIMITS 0x9F 119*4882a593Smuzhiyun #define DA7213_ALC_ANA_GAIN_LIMITS 0xA0 120*4882a593Smuzhiyun #define DA7213_ALC_ANTICLIP_CTRL 0xA1 121*4882a593Smuzhiyun #define DA7213_ALC_ANTICLIP_LEVEL 0xA2 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_AUTO_M_L 0xA3 124*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_AUTO_U_L 0xA4 125*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_MAN_M_L 0xA6 126*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_MAN_U_L 0xA7 127*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_AUTO_M_R 0xA8 128*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_AUTO_U_R 0xA9 129*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_MAN_M_R 0xAB 130*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_MAN_U_R 0xAC 131*4882a593Smuzhiyun #define DA7213_ALC_CIC_OP_LVL_CTRL 0xAD 132*4882a593Smuzhiyun #define DA7213_ALC_CIC_OP_LVL_DATA 0xAE 133*4882a593Smuzhiyun #define DA7213_DAC_NG_SETUP_TIME 0xAF 134*4882a593Smuzhiyun #define DA7213_DAC_NG_OFF_THRESHOLD 0xB0 135*4882a593Smuzhiyun #define DA7213_DAC_NG_ON_THRESHOLD 0xB1 136*4882a593Smuzhiyun #define DA7213_DAC_NG_CTRL 0xB2 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun /* 140*4882a593Smuzhiyun * Bit fields 141*4882a593Smuzhiyun */ 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun /* DA7213_PLL_STATUS = 0x03 */ 144*4882a593Smuzhiyun #define DA7219_PLL_SRM_LOCK (0x1 << 1) 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun /* DA7213_SR = 0x22 */ 147*4882a593Smuzhiyun #define DA7213_SR_8000 (0x1 << 0) 148*4882a593Smuzhiyun #define DA7213_SR_11025 (0x2 << 0) 149*4882a593Smuzhiyun #define DA7213_SR_12000 (0x3 << 0) 150*4882a593Smuzhiyun #define DA7213_SR_16000 (0x5 << 0) 151*4882a593Smuzhiyun #define DA7213_SR_22050 (0x6 << 0) 152*4882a593Smuzhiyun #define DA7213_SR_24000 (0x7 << 0) 153*4882a593Smuzhiyun #define DA7213_SR_32000 (0x9 << 0) 154*4882a593Smuzhiyun #define DA7213_SR_44100 (0xA << 0) 155*4882a593Smuzhiyun #define DA7213_SR_48000 (0xB << 0) 156*4882a593Smuzhiyun #define DA7213_SR_88200 (0xE << 0) 157*4882a593Smuzhiyun #define DA7213_SR_96000 (0xF << 0) 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun /* DA7213_REFERENCES = 0x23 */ 160*4882a593Smuzhiyun #define DA7213_BIAS_EN (0x1 << 3) 161*4882a593Smuzhiyun #define DA7213_VMID_EN (0x1 << 7) 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun /* DA7213_PLL_CTRL = 0x27 */ 164*4882a593Smuzhiyun #define DA7213_PLL_INDIV_5_TO_9_MHZ (0x0 << 2) 165*4882a593Smuzhiyun #define DA7213_PLL_INDIV_9_TO_18_MHZ (0x1 << 2) 166*4882a593Smuzhiyun #define DA7213_PLL_INDIV_18_TO_36_MHZ (0x2 << 2) 167*4882a593Smuzhiyun #define DA7213_PLL_INDIV_36_TO_54_MHZ (0x3 << 2) 168*4882a593Smuzhiyun #define DA7213_PLL_INDIV_MASK (0x3 << 2) 169*4882a593Smuzhiyun #define DA7213_PLL_MCLK_SQR_EN (0x1 << 4) 170*4882a593Smuzhiyun #define DA7213_PLL_32K_MODE (0x1 << 5) 171*4882a593Smuzhiyun #define DA7213_PLL_SRM_EN (0x1 << 6) 172*4882a593Smuzhiyun #define DA7213_PLL_EN (0x1 << 7) 173*4882a593Smuzhiyun #define DA7213_PLL_MODE_MASK (0x7 << 5) 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun /* DA7213_DAI_CLK_MODE = 0x28 */ 176*4882a593Smuzhiyun #define DA7213_DAI_BCLKS_PER_WCLK_32 (0x0 << 0) 177*4882a593Smuzhiyun #define DA7213_DAI_BCLKS_PER_WCLK_64 (0x1 << 0) 178*4882a593Smuzhiyun #define DA7213_DAI_BCLKS_PER_WCLK_128 (0x2 << 0) 179*4882a593Smuzhiyun #define DA7213_DAI_BCLKS_PER_WCLK_256 (0x3 << 0) 180*4882a593Smuzhiyun #define DA7213_DAI_BCLKS_PER_WCLK_MASK (0x3 << 0) 181*4882a593Smuzhiyun #define DA7213_DAI_CLK_POL_INV (0x1 << 2) 182*4882a593Smuzhiyun #define DA7213_DAI_CLK_POL_MASK (0x1 << 2) 183*4882a593Smuzhiyun #define DA7213_DAI_WCLK_POL_INV (0x1 << 3) 184*4882a593Smuzhiyun #define DA7213_DAI_WCLK_POL_MASK (0x1 << 3) 185*4882a593Smuzhiyun #define DA7213_DAI_CLK_EN_MASK (0x1 << 7) 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun /* DA7213_DAI_CTRL = 0x29 */ 188*4882a593Smuzhiyun #define DA7213_DAI_FORMAT_I2S_MODE (0x0 << 0) 189*4882a593Smuzhiyun #define DA7213_DAI_FORMAT_LEFT_J (0x1 << 0) 190*4882a593Smuzhiyun #define DA7213_DAI_FORMAT_RIGHT_J (0x2 << 0) 191*4882a593Smuzhiyun #define DA7213_DAI_FORMAT_DSP (0x3 << 0) 192*4882a593Smuzhiyun #define DA7213_DAI_FORMAT_MASK (0x3 << 0) 193*4882a593Smuzhiyun #define DA7213_DAI_WORD_LENGTH_S16_LE (0x0 << 2) 194*4882a593Smuzhiyun #define DA7213_DAI_WORD_LENGTH_S20_LE (0x1 << 2) 195*4882a593Smuzhiyun #define DA7213_DAI_WORD_LENGTH_S24_LE (0x2 << 2) 196*4882a593Smuzhiyun #define DA7213_DAI_WORD_LENGTH_S32_LE (0x3 << 2) 197*4882a593Smuzhiyun #define DA7213_DAI_WORD_LENGTH_MASK (0x3 << 2) 198*4882a593Smuzhiyun #define DA7213_DAI_EN_SHIFT 7 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun /* DA7213_DIG_ROUTING_DAI = 0x21 */ 201*4882a593Smuzhiyun #define DA7213_DAI_L_SRC_SHIFT 0 202*4882a593Smuzhiyun #define DA7213_DAI_R_SRC_SHIFT 4 203*4882a593Smuzhiyun #define DA7213_DAI_SRC_MAX 4 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun /* DA7213_DIG_ROUTING_DAC = 0x2A */ 206*4882a593Smuzhiyun #define DA7213_DAC_L_SRC_SHIFT 0 207*4882a593Smuzhiyun #define DA7213_DAC_L_MONO_SHIFT 3 208*4882a593Smuzhiyun #define DA7213_DAC_R_SRC_SHIFT 4 209*4882a593Smuzhiyun #define DA7213_DAC_R_MONO_SHIFT 7 210*4882a593Smuzhiyun #define DA7213_DAC_SRC_MAX 4 211*4882a593Smuzhiyun #define DA7213_DAC_MONO_MAX 0x1 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun /* DA7213_ALC_CTRL1 = 0x2B */ 214*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_EN_SHIFT 0 215*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_EN_MAX 0x1 216*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_EN (0x1 << 0) 217*4882a593Smuzhiyun #define DA7213_ALC_SYNC_MODE (0x1 << 1) 218*4882a593Smuzhiyun #define DA7213_ALC_CALIB_MODE_MAN (0x1 << 2) 219*4882a593Smuzhiyun #define DA7213_ALC_L_EN_SHIFT 3 220*4882a593Smuzhiyun #define DA7213_ALC_AUTO_CALIB_EN (0x1 << 4) 221*4882a593Smuzhiyun #define DA7213_ALC_CALIB_OVERFLOW (0x1 << 5) 222*4882a593Smuzhiyun #define DA7213_ALC_R_EN_SHIFT 7 223*4882a593Smuzhiyun #define DA7213_ALC_EN_MAX 0x1 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun /* DA7213_AUX_L/R_GAIN = 0x30/0x31 */ 226*4882a593Smuzhiyun #define DA7213_AUX_AMP_GAIN_SHIFT 0 227*4882a593Smuzhiyun #define DA7213_AUX_AMP_GAIN_MAX 0x3F 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun /* DA7213_MIXIN_L/R_SELECT = 0x32/0x33 */ 230*4882a593Smuzhiyun #define DA7213_DMIC_EN_SHIFT 7 231*4882a593Smuzhiyun #define DA7213_DMIC_EN_MAX 0x1 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun /* DA7213_MIXIN_L_SELECT = 0x32 */ 234*4882a593Smuzhiyun #define DA7213_MIXIN_L_MIX_SELECT_AUX_L_SHIFT 0 235*4882a593Smuzhiyun #define DA7213_MIXIN_L_MIX_SELECT_MIC_1_SHIFT 1 236*4882a593Smuzhiyun #define DA7213_MIXIN_L_MIX_SELECT_MIC_1 (0x1 << 1) 237*4882a593Smuzhiyun #define DA7213_MIXIN_L_MIX_SELECT_MIC_2_SHIFT 2 238*4882a593Smuzhiyun #define DA7213_MIXIN_L_MIX_SELECT_MIC_2 (0x1 << 2) 239*4882a593Smuzhiyun #define DA7213_MIXIN_L_MIX_SELECT_MIXIN_R_SHIFT 3 240*4882a593Smuzhiyun #define DA7213_MIXIN_L_MIX_SELECT_MAX 0x1 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun /* DA7213_MIXIN_R_SELECT = 0x33 */ 243*4882a593Smuzhiyun #define DA7213_MIXIN_R_MIX_SELECT_AUX_R_SHIFT 0 244*4882a593Smuzhiyun #define DA7213_MIXIN_R_MIX_SELECT_MIC_2_SHIFT 1 245*4882a593Smuzhiyun #define DA7213_MIXIN_R_MIX_SELECT_MIC_2 (0x1 << 1) 246*4882a593Smuzhiyun #define DA7213_MIXIN_R_MIX_SELECT_MIC_1_SHIFT 2 247*4882a593Smuzhiyun #define DA7213_MIXIN_R_MIX_SELECT_MIC_1 (0x1 << 2) 248*4882a593Smuzhiyun #define DA7213_MIXIN_R_MIX_SELECT_MIXIN_L_SHIFT 3 249*4882a593Smuzhiyun #define DA7213_MIXIN_R_MIX_SELECT_MAX 0x1 250*4882a593Smuzhiyun #define DA7213_MIC_BIAS_OUTPUT_SELECT_2 (0x1 << 6) 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun /* DA7213_MIXIN_L/R_GAIN = 0x34/0x35 */ 253*4882a593Smuzhiyun #define DA7213_MIXIN_AMP_GAIN_SHIFT 0 254*4882a593Smuzhiyun #define DA7213_MIXIN_AMP_GAIN_MAX 0xF 255*4882a593Smuzhiyun 256*4882a593Smuzhiyun /* DA7213_ADC_L/R_GAIN = 0x36/0x37 */ 257*4882a593Smuzhiyun #define DA7213_ADC_AMP_GAIN_SHIFT 0 258*4882a593Smuzhiyun #define DA7213_ADC_AMP_GAIN_MAX 0x7F 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun /* DA7213_ADC/DAC_FILTERS1 = 0x38/0x44 */ 261*4882a593Smuzhiyun #define DA7213_VOICE_HPF_CORNER_SHIFT 0 262*4882a593Smuzhiyun #define DA7213_VOICE_HPF_CORNER_MAX 8 263*4882a593Smuzhiyun #define DA7213_VOICE_EN_SHIFT 3 264*4882a593Smuzhiyun #define DA7213_VOICE_EN_MAX 0x1 265*4882a593Smuzhiyun #define DA7213_AUDIO_HPF_CORNER_SHIFT 4 266*4882a593Smuzhiyun #define DA7213_AUDIO_HPF_CORNER_MAX 4 267*4882a593Smuzhiyun #define DA7213_HPF_EN_SHIFT 7 268*4882a593Smuzhiyun #define DA7213_HPF_EN_MAX 0x1 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun /* DA7213_MIC_1/2_GAIN = 0x39/0x3A */ 271*4882a593Smuzhiyun #define DA7213_MIC_AMP_GAIN_SHIFT 0 272*4882a593Smuzhiyun #define DA7213_MIC_AMP_GAIN_MAX 0x7 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun /* DA7213_DAC_FILTERS5 = 0x40 */ 275*4882a593Smuzhiyun #define DA7213_DAC_SOFTMUTE_EN_SHIFT 7 276*4882a593Smuzhiyun #define DA7213_DAC_SOFTMUTE_EN_MAX 0x1 277*4882a593Smuzhiyun #define DA7213_DAC_SOFTMUTE_RATE_SHIFT 4 278*4882a593Smuzhiyun #define DA7213_DAC_SOFTMUTE_RATE_MAX 7 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun /* DA7213_DAC_FILTERS2/3/4 = 0x41/0x42/0x43 */ 281*4882a593Smuzhiyun #define DA7213_DAC_EQ_BAND_MAX 0xF 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun /* DA7213_DAC_FILTERS2 = 0x41 */ 284*4882a593Smuzhiyun #define DA7213_DAC_EQ_BAND1_SHIFT 0 285*4882a593Smuzhiyun #define DA7213_DAC_EQ_BAND2_SHIFT 4 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun /* DA7213_DAC_FILTERS2 = 0x42 */ 288*4882a593Smuzhiyun #define DA7213_DAC_EQ_BAND3_SHIFT 0 289*4882a593Smuzhiyun #define DA7213_DAC_EQ_BAND4_SHIFT 4 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun /* DA7213_DAC_FILTERS4 = 0x43 */ 292*4882a593Smuzhiyun #define DA7213_DAC_EQ_BAND5_SHIFT 0 293*4882a593Smuzhiyun #define DA7213_DAC_EQ_EN_SHIFT 7 294*4882a593Smuzhiyun #define DA7213_DAC_EQ_EN_MAX 0x1 295*4882a593Smuzhiyun 296*4882a593Smuzhiyun /* DA7213_DAC_L/R_GAIN = 0x45/0x46 */ 297*4882a593Smuzhiyun #define DA7213_DAC_AMP_GAIN_SHIFT 0 298*4882a593Smuzhiyun #define DA7213_DAC_AMP_GAIN_MAX 0x7F 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun /* DA7213_HP_L/R_GAIN = 0x45/0x46 */ 301*4882a593Smuzhiyun #define DA7213_HP_AMP_GAIN_SHIFT 0 302*4882a593Smuzhiyun #define DA7213_HP_AMP_GAIN_MAX 0x3F 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun /* DA7213_CP_CTRL = 0x47 */ 305*4882a593Smuzhiyun #define DA7213_CP_EN_SHIFT 7 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun /* DA7213_LINE_GAIN = 0x4A */ 308*4882a593Smuzhiyun #define DA7213_LINE_AMP_GAIN_SHIFT 0 309*4882a593Smuzhiyun #define DA7213_LINE_AMP_GAIN_MAX 0x3F 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun /* DA7213_MIXOUT_L_SELECT = 0x4B */ 312*4882a593Smuzhiyun #define DA7213_MIXOUT_L_MIX_SELECT_AUX_L_SHIFT 0 313*4882a593Smuzhiyun #define DA7213_MIXOUT_L_MIX_SELECT_MIXIN_L_SHIFT 1 314*4882a593Smuzhiyun #define DA7213_MIXOUT_L_MIX_SELECT_MIXIN_R_SHIFT 2 315*4882a593Smuzhiyun #define DA7213_MIXOUT_L_MIX_SELECT_DAC_L_SHIFT 3 316*4882a593Smuzhiyun #define DA7213_MIXOUT_L_MIX_SELECT_AUX_L_INVERTED_SHIFT 4 317*4882a593Smuzhiyun #define DA7213_MIXOUT_L_MIX_SELECT_MIXIN_L_INVERTED_SHIFT 5 318*4882a593Smuzhiyun #define DA7213_MIXOUT_L_MIX_SELECT_MIXIN_R_INVERTED_SHIFT 6 319*4882a593Smuzhiyun #define DA7213_MIXOUT_L_MIX_SELECT_MAX 0x1 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun /* DA7213_MIXOUT_R_SELECT = 0x4C */ 322*4882a593Smuzhiyun #define DA7213_MIXOUT_R_MIX_SELECT_AUX_R_SHIFT 0 323*4882a593Smuzhiyun #define DA7213_MIXOUT_R_MIX_SELECT_MIXIN_R_SHIFT 1 324*4882a593Smuzhiyun #define DA7213_MIXOUT_R_MIX_SELECT_MIXIN_L_SHIFT 2 325*4882a593Smuzhiyun #define DA7213_MIXOUT_R_MIX_SELECT_DAC_R_SHIFT 3 326*4882a593Smuzhiyun #define DA7213_MIXOUT_R_MIX_SELECT_AUX_R_INVERTED_SHIFT 4 327*4882a593Smuzhiyun #define DA7213_MIXOUT_R_MIX_SELECT_MIXIN_R_INVERTED_SHIFT 5 328*4882a593Smuzhiyun #define DA7213_MIXOUT_R_MIX_SELECT_MIXIN_L_INVERTED_SHIFT 6 329*4882a593Smuzhiyun #define DA7213_MIXOUT_R_MIX_SELECT_MAX 0x1 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun /* 332*4882a593Smuzhiyun * DA7213_AUX_L/R_CTRL = 0x60/0x61, 333*4882a593Smuzhiyun * DA7213_MIC_1/2_CTRL = 0x63/0x64, 334*4882a593Smuzhiyun * DA7213_MIXIN_L/R_CTRL = 0x65/0x66, 335*4882a593Smuzhiyun * DA7213_ADC_L/R_CTRL = 0x65/0x66, 336*4882a593Smuzhiyun * DA7213_DAC_L/R_CTRL = 0x69/0x6A, 337*4882a593Smuzhiyun * DA7213_HP_L/R_CTRL = 0x6B/0x6C, 338*4882a593Smuzhiyun * DA7213_LINE_CTRL = 0x6D 339*4882a593Smuzhiyun */ 340*4882a593Smuzhiyun #define DA7213_MUTE_EN_SHIFT 6 341*4882a593Smuzhiyun #define DA7213_MUTE_EN_MAX 0x1 342*4882a593Smuzhiyun #define DA7213_MUTE_EN (0x1 << 6) 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun /* 345*4882a593Smuzhiyun * DA7213_AUX_L/R_CTRL = 0x60/0x61, 346*4882a593Smuzhiyun * DA7213_MIXIN_L/R_CTRL = 0x65/0x66, 347*4882a593Smuzhiyun * DA7213_ADC_L/R_CTRL = 0x65/0x66, 348*4882a593Smuzhiyun * DA7213_DAC_L/R_CTRL = 0x69/0x6A, 349*4882a593Smuzhiyun * DA7213_HP_L/R_CTRL = 0x6B/0x6C, 350*4882a593Smuzhiyun * DA7213_LINE_CTRL = 0x6D 351*4882a593Smuzhiyun */ 352*4882a593Smuzhiyun #define DA7213_GAIN_RAMP_EN_SHIFT 5 353*4882a593Smuzhiyun #define DA7213_GAIN_RAMP_EN_MAX 0x1 354*4882a593Smuzhiyun #define DA7213_GAIN_RAMP_EN (0x1 << 5) 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun /* 357*4882a593Smuzhiyun * DA7213_AUX_L/R_CTRL = 0x60/0x61, 358*4882a593Smuzhiyun * DA7213_MIXIN_L/R_CTRL = 0x65/0x66, 359*4882a593Smuzhiyun * DA7213_HP_L/R_CTRL = 0x6B/0x6C, 360*4882a593Smuzhiyun * DA7213_LINE_CTRL = 0x6D 361*4882a593Smuzhiyun */ 362*4882a593Smuzhiyun #define DA7213_ZC_EN_SHIFT 4 363*4882a593Smuzhiyun #define DA7213_ZC_EN_MAX 0x1 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun /* 366*4882a593Smuzhiyun * DA7213_AUX_L/R_CTRL = 0x60/0x61, 367*4882a593Smuzhiyun * DA7213_MIC_1/2_CTRL = 0x63/0x64, 368*4882a593Smuzhiyun * DA7213_MIXIN_L/R_CTRL = 0x65/0x66, 369*4882a593Smuzhiyun * DA7213_HP_L/R_CTRL = 0x6B/0x6C, 370*4882a593Smuzhiyun * DA7213_MIXOUT_L/R_CTRL = 0x6E/0x6F, 371*4882a593Smuzhiyun * DA7213_LINE_CTRL = 0x6D 372*4882a593Smuzhiyun */ 373*4882a593Smuzhiyun #define DA7213_AMP_EN_SHIFT 7 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun /* DA7213_MIC_1/2_CTRL = 0x63/0x64 */ 376*4882a593Smuzhiyun #define DA7213_MIC_AMP_IN_SEL_SHIFT 2 377*4882a593Smuzhiyun #define DA7213_MIC_AMP_IN_SEL_MAX 3 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun /* DA7213_MICBIAS_CTRL = 0x62 */ 380*4882a593Smuzhiyun #define DA7213_MICBIAS1_LEVEL_SHIFT 0 381*4882a593Smuzhiyun #define DA7213_MICBIAS1_LEVEL_MASK (0x3 << 0) 382*4882a593Smuzhiyun #define DA7213_MICBIAS1_EN_SHIFT 3 383*4882a593Smuzhiyun #define DA7213_MICBIAS2_LEVEL_SHIFT 4 384*4882a593Smuzhiyun #define DA7213_MICBIAS2_LEVEL_MASK (0x3 << 4) 385*4882a593Smuzhiyun #define DA7213_MICBIAS2_EN_SHIFT 7 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun /* DA7213_MIXIN_L/R_CTRL = 0x65/0x66 */ 388*4882a593Smuzhiyun #define DA7213_MIXIN_MIX_EN (0x1 << 3) 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun /* DA7213_ADC_L/R_CTRL = 0x67/0x68 */ 391*4882a593Smuzhiyun #define DA7213_ADC_EN_SHIFT 7 392*4882a593Smuzhiyun #define DA7213_ADC_EN (0x1 << 7) 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun /* DA7213_DAC_L/R_CTRL = 0x69/0x6A*/ 395*4882a593Smuzhiyun #define DA7213_DAC_EN_SHIFT 7 396*4882a593Smuzhiyun 397*4882a593Smuzhiyun /* DA7213_HP_L/R_CTRL = 0x6B/0x6C */ 398*4882a593Smuzhiyun #define DA7213_HP_AMP_OE (0x1 << 3) 399*4882a593Smuzhiyun 400*4882a593Smuzhiyun /* DA7213_LINE_CTRL = 0x6D */ 401*4882a593Smuzhiyun #define DA7213_LINE_AMP_OE (0x1 << 3) 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun /* DA7213_MIXOUT_L/R_CTRL = 0x6E/0x6F */ 404*4882a593Smuzhiyun #define DA7213_MIXOUT_MIX_EN (0x1 << 3) 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun /* DA7213_GAIN_RAMP_CTRL = 0x92 */ 407*4882a593Smuzhiyun #define DA7213_GAIN_RAMP_RATE_SHIFT 0 408*4882a593Smuzhiyun #define DA7213_GAIN_RAMP_RATE_MAX 4 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun /* DA7213_MIC_CONFIG = 0x93 */ 411*4882a593Smuzhiyun #define DA7213_DMIC_DATA_SEL_SHIFT 0 412*4882a593Smuzhiyun #define DA7213_DMIC_DATA_SEL_MASK (0x1 << 0) 413*4882a593Smuzhiyun #define DA7213_DMIC_SAMPLEPHASE_SHIFT 1 414*4882a593Smuzhiyun #define DA7213_DMIC_SAMPLEPHASE_MASK (0x1 << 1) 415*4882a593Smuzhiyun #define DA7213_DMIC_CLK_RATE_SHIFT 2 416*4882a593Smuzhiyun #define DA7213_DMIC_CLK_RATE_MASK (0x1 << 2) 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun /* DA7213_PC_COUNT = 0x94 */ 419*4882a593Smuzhiyun #define DA7213_PC_FREERUN_MASK (0x1 << 0) 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun /* DA7213_DIG_CTRL = 0x99 */ 422*4882a593Smuzhiyun #define DA7213_DAC_L_INV_SHIFT 3 423*4882a593Smuzhiyun #define DA7213_DAC_R_INV_SHIFT 7 424*4882a593Smuzhiyun #define DA7213_DAC_INV_MAX 0x1 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun /* DA7213_ALC_CTRL2 = 0x9A */ 427*4882a593Smuzhiyun #define DA7213_ALC_ATTACK_SHIFT 0 428*4882a593Smuzhiyun #define DA7213_ALC_ATTACK_MAX 13 429*4882a593Smuzhiyun #define DA7213_ALC_RELEASE_SHIFT 4 430*4882a593Smuzhiyun #define DA7213_ALC_RELEASE_MAX 11 431*4882a593Smuzhiyun 432*4882a593Smuzhiyun /* DA7213_ALC_CTRL3 = 0x9B */ 433*4882a593Smuzhiyun #define DA7213_ALC_HOLD_SHIFT 0 434*4882a593Smuzhiyun #define DA7213_ALC_HOLD_MAX 16 435*4882a593Smuzhiyun #define DA7213_ALC_INTEG_ATTACK_SHIFT 4 436*4882a593Smuzhiyun #define DA7213_ALC_INTEG_RELEASE_SHIFT 6 437*4882a593Smuzhiyun #define DA7213_ALC_INTEG_MAX 4 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun /* 440*4882a593Smuzhiyun * DA7213_ALC_NOISE = 0x9C, 441*4882a593Smuzhiyun * DA7213_ALC_TARGET_MIN/MAX = 0x9D/0x9E 442*4882a593Smuzhiyun */ 443*4882a593Smuzhiyun #define DA7213_ALC_THRESHOLD_SHIFT 0 444*4882a593Smuzhiyun #define DA7213_ALC_THRESHOLD_MAX 0x3F 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun /* DA7213_ALC_GAIN_LIMITS = 0x9F */ 447*4882a593Smuzhiyun #define DA7213_ALC_ATTEN_MAX_SHIFT 0 448*4882a593Smuzhiyun #define DA7213_ALC_GAIN_MAX_SHIFT 4 449*4882a593Smuzhiyun #define DA7213_ALC_ATTEN_GAIN_MAX_MAX 0xF 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun /* DA7213_ALC_ANA_GAIN_LIMITS = 0xA0 */ 452*4882a593Smuzhiyun #define DA7213_ALC_ANA_GAIN_MIN_SHIFT 0 453*4882a593Smuzhiyun #define DA7213_ALC_ANA_GAIN_MAX_SHIFT 4 454*4882a593Smuzhiyun #define DA7213_ALC_ANA_GAIN_MAX 0x7 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun /* DA7213_ALC_ANTICLIP_CTRL = 0xA1 */ 457*4882a593Smuzhiyun #define DA7213_ALC_ANTICLIP_EN_SHIFT 7 458*4882a593Smuzhiyun #define DA7213_ALC_ANTICLIP_EN_MAX 0x1 459*4882a593Smuzhiyun 460*4882a593Smuzhiyun /* DA7213_ALC_ANTICLIP_LEVEL = 0xA2 */ 461*4882a593Smuzhiyun #define DA7213_ALC_ANTICLIP_LEVEL_SHIFT 0 462*4882a593Smuzhiyun #define DA7213_ALC_ANTICLIP_LEVEL_MAX 0x7F 463*4882a593Smuzhiyun 464*4882a593Smuzhiyun /* DA7213_ALC_CIC_OP_LVL_CTRL = 0xAD */ 465*4882a593Smuzhiyun #define DA7213_ALC_DATA_MIDDLE (0x2 << 0) 466*4882a593Smuzhiyun #define DA7213_ALC_DATA_TOP (0x3 << 0) 467*4882a593Smuzhiyun #define DA7213_ALC_CIC_OP_CHANNEL_LEFT (0x0 << 7) 468*4882a593Smuzhiyun #define DA7213_ALC_CIC_OP_CHANNEL_RIGHT (0x1 << 7) 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun /* DA7213_DAC_NG_SETUP_TIME = 0xAF */ 471*4882a593Smuzhiyun #define DA7213_DAC_NG_SETUP_TIME_SHIFT 0 472*4882a593Smuzhiyun #define DA7213_DAC_NG_SETUP_TIME_MAX 4 473*4882a593Smuzhiyun #define DA7213_DAC_NG_RAMPUP_RATE_SHIFT 2 474*4882a593Smuzhiyun #define DA7213_DAC_NG_RAMPDN_RATE_SHIFT 3 475*4882a593Smuzhiyun #define DA7213_DAC_NG_RAMP_RATE_MAX 2 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun /* DA7213_DAC_NG_OFF/ON_THRESH = 0xB0/0xB1 */ 478*4882a593Smuzhiyun #define DA7213_DAC_NG_THRESHOLD_SHIFT 0 479*4882a593Smuzhiyun #define DA7213_DAC_NG_THRESHOLD_MAX 0x7 480*4882a593Smuzhiyun 481*4882a593Smuzhiyun /* DA7213_DAC_NG_CTRL = 0xB2 */ 482*4882a593Smuzhiyun #define DA7213_DAC_NG_EN_SHIFT 7 483*4882a593Smuzhiyun #define DA7213_DAC_NG_EN_MAX 0x1 484*4882a593Smuzhiyun 485*4882a593Smuzhiyun 486*4882a593Smuzhiyun /* 487*4882a593Smuzhiyun * General defines 488*4882a593Smuzhiyun */ 489*4882a593Smuzhiyun 490*4882a593Smuzhiyun /* Register inversion */ 491*4882a593Smuzhiyun #define DA7213_NO_INVERT 0 492*4882a593Smuzhiyun #define DA7213_INVERT 1 493*4882a593Smuzhiyun 494*4882a593Smuzhiyun /* Byte related defines */ 495*4882a593Smuzhiyun #define DA7213_BYTE_SHIFT 8 496*4882a593Smuzhiyun #define DA7213_BYTE_MASK 0xFF 497*4882a593Smuzhiyun 498*4882a593Smuzhiyun /* ALC related */ 499*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_15_8 0x00FF00 500*4882a593Smuzhiyun #define DA7213_ALC_OFFSET_19_16 0x0F0000 501*4882a593Smuzhiyun #define DA7213_ALC_AVG_ITERATIONS 5 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun /* PLL related */ 504*4882a593Smuzhiyun #define DA7213_PLL_FREQ_OUT_90316800 90316800 505*4882a593Smuzhiyun #define DA7213_PLL_FREQ_OUT_98304000 98304000 506*4882a593Smuzhiyun #define DA7213_PLL_FREQ_OUT_94310400 94310400 507*4882a593Smuzhiyun #define DA7213_PLL_INDIV_5_TO_9_MHZ_VAL 2 508*4882a593Smuzhiyun #define DA7213_PLL_INDIV_9_TO_18_MHZ_VAL 4 509*4882a593Smuzhiyun #define DA7213_PLL_INDIV_18_TO_36_MHZ_VAL 8 510*4882a593Smuzhiyun #define DA7213_PLL_INDIV_36_TO_54_MHZ_VAL 16 511*4882a593Smuzhiyun #define DA7213_SRM_CHECK_RETRIES 8 512*4882a593Smuzhiyun 513*4882a593Smuzhiyun enum da7213_clk_src { 514*4882a593Smuzhiyun DA7213_CLKSRC_MCLK = 0, 515*4882a593Smuzhiyun DA7213_CLKSRC_MCLK_SQR, 516*4882a593Smuzhiyun }; 517*4882a593Smuzhiyun 518*4882a593Smuzhiyun enum da7213_sys_clk { 519*4882a593Smuzhiyun DA7213_SYSCLK_MCLK = 0, 520*4882a593Smuzhiyun DA7213_SYSCLK_PLL, 521*4882a593Smuzhiyun DA7213_SYSCLK_PLL_SRM, 522*4882a593Smuzhiyun DA7213_SYSCLK_PLL_32KHZ 523*4882a593Smuzhiyun }; 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun /* Regulators */ 526*4882a593Smuzhiyun enum da7213_supplies { 527*4882a593Smuzhiyun DA7213_SUPPLY_VDDA = 0, 528*4882a593Smuzhiyun DA7213_SUPPLY_VDDIO, 529*4882a593Smuzhiyun DA7213_NUM_SUPPLIES, 530*4882a593Smuzhiyun }; 531*4882a593Smuzhiyun 532*4882a593Smuzhiyun /* Codec private data */ 533*4882a593Smuzhiyun struct da7213_priv { 534*4882a593Smuzhiyun struct regmap *regmap; 535*4882a593Smuzhiyun struct regulator_bulk_data supplies[DA7213_NUM_SUPPLIES]; 536*4882a593Smuzhiyun struct clk *mclk; 537*4882a593Smuzhiyun unsigned int mclk_rate; 538*4882a593Smuzhiyun unsigned int out_rate; 539*4882a593Smuzhiyun int clk_src; 540*4882a593Smuzhiyun bool master; 541*4882a593Smuzhiyun bool alc_calib_auto; 542*4882a593Smuzhiyun bool alc_en; 543*4882a593Smuzhiyun bool fixed_clk_auto_pll; 544*4882a593Smuzhiyun struct da7213_platform_data *pdata; 545*4882a593Smuzhiyun }; 546*4882a593Smuzhiyun 547*4882a593Smuzhiyun #endif /* _DA7213_H */ 548