1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * ALSA SoC Audio driver for CS4234 codec 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2020 Cirrus Logic, Inc. and 6*4882a593Smuzhiyun * Cirrus Logic International Semiconductor Ltd. 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #ifndef CS4234_H 10*4882a593Smuzhiyun #define CS4234_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define CS4234_DEVID_AB 0x01 13*4882a593Smuzhiyun #define CS4234_DEVID_CD 0x02 14*4882a593Smuzhiyun #define CS4234_DEVID_EF 0x03 15*4882a593Smuzhiyun #define CS4234_REVID 0x05 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define CS4234_CLOCK_SP 0x06 18*4882a593Smuzhiyun #define CS4234_BASE_RATE_MASK 0xC0 19*4882a593Smuzhiyun #define CS4234_BASE_RATE_SHIFT 6 20*4882a593Smuzhiyun #define CS4234_SPEED_MODE_MASK 0x30 21*4882a593Smuzhiyun #define CS4234_SPEED_MODE_SHIFT 4 22*4882a593Smuzhiyun #define CS4234_MCLK_RATE_MASK 0x0E 23*4882a593Smuzhiyun #define CS4234_MCLK_RATE_SHIFT 1 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define CS4234_SAMPLE_WIDTH 0x07 26*4882a593Smuzhiyun #define CS4234_SDOUTX_SW_MASK 0xC0 27*4882a593Smuzhiyun #define CS4234_SDOUTX_SW_SHIFT 6 28*4882a593Smuzhiyun #define CS4234_INPUT_SW_MASK 0x30 29*4882a593Smuzhiyun #define CS4234_INPUT_SW_SHIFT 4 30*4882a593Smuzhiyun #define CS4234_LOW_LAT_SW_MASK 0x0C 31*4882a593Smuzhiyun #define CS4234_LOW_LAT_SW_SHIFT 2 32*4882a593Smuzhiyun #define CS4234_DAC5_SW_MASK 0x03 33*4882a593Smuzhiyun #define CS4234_DAC5_SW_SHIFT 0 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define CS4234_SP_CTRL 0x08 36*4882a593Smuzhiyun #define CS4234_INVT_SCLK_MASK 0x80 37*4882a593Smuzhiyun #define CS4234_INVT_SCLK_SHIFT 7 38*4882a593Smuzhiyun #define CS4234_DAC5_SRC_MASK 0x70 39*4882a593Smuzhiyun #define CS4234_DAC5_SRC_SHIFT 4 40*4882a593Smuzhiyun #define CS4234_SP_FORMAT_MASK 0x0C 41*4882a593Smuzhiyun #define CS4234_SP_FORMAT_SHIFT 2 42*4882a593Smuzhiyun #define CS4234_SDO_CHAIN_MASK 0x02 43*4882a593Smuzhiyun #define CS4234_SDO_CHAIN_SHIFT 1 44*4882a593Smuzhiyun #define CS4234_MST_SLV_MASK 0x01 45*4882a593Smuzhiyun #define CS4234_MST_SLV_SHIFT 0 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #define CS4234_SP_DATA_SEL 0x09 48*4882a593Smuzhiyun #define CS4234_DAC14_SRC_MASK 0x38 49*4882a593Smuzhiyun #define CS4234_DAC14_SRC_SHIFT 3 50*4882a593Smuzhiyun #define CS4234_LL_SRC_MASK 0x07 51*4882a593Smuzhiyun #define CS4234_LL_SRC_SHIFT 0 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define CS4234_SDIN1_MASK1 0x0A 54*4882a593Smuzhiyun #define CS4234_SDIN1_MASK2 0x0B 55*4882a593Smuzhiyun #define CS4234_SDIN2_MASK1 0x0C 56*4882a593Smuzhiyun #define CS4234_SDIN2_MASK2 0x0D 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #define CS4234_TPS_CTRL 0x0E 59*4882a593Smuzhiyun #define CS4234_TPS_MODE_MASK 0x80 60*4882a593Smuzhiyun #define CS4234_TPS_MODE_SHIFT 7 61*4882a593Smuzhiyun #define CS4234_TPS_OFST_MASK 0x70 62*4882a593Smuzhiyun #define CS4234_TPS_OFST_SHIFT 4 63*4882a593Smuzhiyun #define CS4234_GRP_DELAY_MASK 0x0F 64*4882a593Smuzhiyun #define CS4234_GRP_DELAY_SHIFT 0 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #define CS4234_ADC_CTRL1 0x0F 67*4882a593Smuzhiyun #define CS4234_VA_SEL_MASK 0x20 68*4882a593Smuzhiyun #define CS4234_VA_SEL_SHIFT 5 69*4882a593Smuzhiyun #define CS4234_ENA_HPF_MASK 0x10 70*4882a593Smuzhiyun #define CS4234_ENA_HPF_SHIFT 4 71*4882a593Smuzhiyun #define CS4234_INV_ADC_MASK 0x0F 72*4882a593Smuzhiyun #define CS4234_INV_ADC4_MASK 0x08 73*4882a593Smuzhiyun #define CS4234_INV_ADC4_SHIFT 3 74*4882a593Smuzhiyun #define CS4234_INV_ADC3_MASK 0x04 75*4882a593Smuzhiyun #define CS4234_INV_ADC3_SHIFT 2 76*4882a593Smuzhiyun #define CS4234_INV_ADC2_MASK 0x02 77*4882a593Smuzhiyun #define CS4234_INV_ADC2_SHIFT 1 78*4882a593Smuzhiyun #define CS4234_INV_ADC1_MASK 0x01 79*4882a593Smuzhiyun #define CS4234_INV_ADC1_SHIFT 0 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun #define CS4234_ADC_CTRL2 0x10 82*4882a593Smuzhiyun #define CS4234_MUTE_ADC4_MASK 0x80 83*4882a593Smuzhiyun #define CS4234_MUTE_ADC4_SHIFT 7 84*4882a593Smuzhiyun #define CS4234_MUTE_ADC3_MASK 0x40 85*4882a593Smuzhiyun #define CS4234_MUTE_ADC3_SHIFT 6 86*4882a593Smuzhiyun #define CS4234_MUTE_ADC2_MASK 0x20 87*4882a593Smuzhiyun #define CS4234_MUTE_ADC2_SHIFT 5 88*4882a593Smuzhiyun #define CS4234_MUTE_ADC1_MASK 0x10 89*4882a593Smuzhiyun #define CS4234_MUTE_ADC1_SHIFT 4 90*4882a593Smuzhiyun #define CS4234_PDN_ADC4_MASK 0x08 91*4882a593Smuzhiyun #define CS4234_PDN_ADC4_SHIFT 3 92*4882a593Smuzhiyun #define CS4234_PDN_ADC3_MASK 0x04 93*4882a593Smuzhiyun #define CS4234_PDN_ADC3_SHIFT 2 94*4882a593Smuzhiyun #define CS4234_PDN_ADC2_MASK 0x02 95*4882a593Smuzhiyun #define CS4234_PDN_ADC2_SHIFT 1 96*4882a593Smuzhiyun #define CS4234_PDN_ADC1_MASK 0x01 97*4882a593Smuzhiyun #define CS4234_PDN_ADC1_SHIFT 0 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #define CS4234_LOW_LAT_CTRL1 0x11 100*4882a593Smuzhiyun #define CS4234_LL_NG_MASK 0xE0 101*4882a593Smuzhiyun #define CS4234_LL_NG_SHIFT 5 102*4882a593Smuzhiyun #define CS4234_INV_LL_MASK 0x0F 103*4882a593Smuzhiyun #define CS4234_INV_LL4_MASK 0x08 104*4882a593Smuzhiyun #define CS4234_INV_LL4_SHIFT 3 105*4882a593Smuzhiyun #define CS4234_INV_LL3_MASK 0x04 106*4882a593Smuzhiyun #define CS4234_INV_LL3_SHIFT 2 107*4882a593Smuzhiyun #define CS4234_INV_LL2_MASK 0x02 108*4882a593Smuzhiyun #define CS4234_INV_LL2_SHIFT 1 109*4882a593Smuzhiyun #define CS4234_INV_LL1_MASK 0x01 110*4882a593Smuzhiyun #define CS4234_INV_LL1_SHIFT 0 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #define CS4234_DAC_CTRL1 0x12 113*4882a593Smuzhiyun #define CS4234_DAC14_NG_MASK 0xE0 114*4882a593Smuzhiyun #define CS4234_DAC14_NG_SHIFT 5 115*4882a593Smuzhiyun #define CS4234_DAC14_DE_MASK 0x10 116*4882a593Smuzhiyun #define CS4234_DAC14_DE_SHIFT 4 117*4882a593Smuzhiyun #define CS4234_DAC5_DE_MASK 0x08 118*4882a593Smuzhiyun #define CS4234_DAC5_DE_SHIFT 3 119*4882a593Smuzhiyun #define CS4234_DAC5_MVC_MASK 0x04 120*4882a593Smuzhiyun #define CS4234_DAC5_MVC_SHIFT 2 121*4882a593Smuzhiyun #define CS4234_DAC5_CFG_FLTR_MASK 0x03 122*4882a593Smuzhiyun #define CS4234_DAC5_CFG_FLTR_SHIFT 0 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #define CS4234_DAC_CTRL2 0x13 125*4882a593Smuzhiyun #define CS4234_DAC5_NG_MASK 0xE0 126*4882a593Smuzhiyun #define CS4234_DAC5_NG_SHIFT 5 127*4882a593Smuzhiyun #define CS4234_INV_DAC_MASK 0x1F 128*4882a593Smuzhiyun #define CS4234_INV_DAC5_MASK 0x10 129*4882a593Smuzhiyun #define CS4234_INV_DAC5_SHIFT 4 130*4882a593Smuzhiyun #define CS4234_INV_DAC4_MASK 0x08 131*4882a593Smuzhiyun #define CS4234_INV_DAC4_SHIFT 3 132*4882a593Smuzhiyun #define CS4234_INV_DAC3_MASK 0x04 133*4882a593Smuzhiyun #define CS4234_INV_DAC3_SHIFT 2 134*4882a593Smuzhiyun #define CS4234_INV_DAC2_MASK 0x02 135*4882a593Smuzhiyun #define CS4234_INV_DAC2_SHIFT 1 136*4882a593Smuzhiyun #define CS4234_INV_DAC1_MASK 0x01 137*4882a593Smuzhiyun #define CS4234_INV_DAC1_SHIFT 0 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun #define CS4234_DAC_CTRL3 0x14 140*4882a593Smuzhiyun #define CS4234_DAC5_ATT_MASK 0x80 141*4882a593Smuzhiyun #define CS4234_DAC5_ATT_SHIFT 7 142*4882a593Smuzhiyun #define CS4234_DAC14_ATT_MASK 0x40 143*4882a593Smuzhiyun #define CS4234_DAC14_ATT_SHIFT 6 144*4882a593Smuzhiyun #define CS4234_MUTE_LL_MASK 0x20 145*4882a593Smuzhiyun #define CS4234_MUTE_LL_SHIFT 5 146*4882a593Smuzhiyun #define CS4234_MUTE_DAC5_MASK 0x10 147*4882a593Smuzhiyun #define CS4234_MUTE_DAC5_SHIFT 4 148*4882a593Smuzhiyun #define CS4234_MUTE_DAC4_MASK 0x08 149*4882a593Smuzhiyun #define CS4234_MUTE_DAC4_SHIFT 3 150*4882a593Smuzhiyun #define CS4234_MUTE_DAC3_MASK 0x04 151*4882a593Smuzhiyun #define CS4234_MUTE_DAC3_SHIFT 2 152*4882a593Smuzhiyun #define CS4234_MUTE_DAC2_MASK 0x02 153*4882a593Smuzhiyun #define CS4234_MUTE_DAC2_SHIFT 1 154*4882a593Smuzhiyun #define CS4234_MUTE_DAC1_MASK 0x01 155*4882a593Smuzhiyun #define CS4234_MUTE_DAC1_SHIFT 0 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun #define CS4234_DAC_CTRL4 0x15 158*4882a593Smuzhiyun #define CS4234_VQ_RAMP_MASK 0x80 159*4882a593Smuzhiyun #define CS4234_VQ_RAMP_SHIFT 7 160*4882a593Smuzhiyun #define CS4234_TPS_GAIN_MASK 0x40 161*4882a593Smuzhiyun #define CS4234_TPS_GAIN_SHIFT 6 162*4882a593Smuzhiyun #define CS4234_PDN_DAC5_MASK 0x10 163*4882a593Smuzhiyun #define CS4234_PDN_DAC5_SHIFT 4 164*4882a593Smuzhiyun #define CS4234_PDN_DAC4_MASK 0x08 165*4882a593Smuzhiyun #define CS4234_PDN_DAC4_SHIFT 3 166*4882a593Smuzhiyun #define CS4234_PDN_DAC3_MASK 0x04 167*4882a593Smuzhiyun #define CS4234_PDN_DAC3_SHIFT 2 168*4882a593Smuzhiyun #define CS4234_PDN_DAC2_MASK 0x02 169*4882a593Smuzhiyun #define CS4234_PDN_DAC2_SHIFT 1 170*4882a593Smuzhiyun #define CS4234_PDN_DAC1_MASK 0x01 171*4882a593Smuzhiyun #define CS4234_PDN_DAC1_SHIFT 0 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun #define CS4234_VOLUME_MODE 0x16 174*4882a593Smuzhiyun #define CS4234_MUTE_DELAY_MASK 0xC0 175*4882a593Smuzhiyun #define CS4234_MUTE_DELAY_SHIFT 6 176*4882a593Smuzhiyun #define CS4234_MIN_DELAY_MASK 0x38 177*4882a593Smuzhiyun #define CS4234_MIN_DELAY_SHIFT 3 178*4882a593Smuzhiyun #define CS4234_MAX_DELAY_MASK 0x07 179*4882a593Smuzhiyun #define CS4234_MAX_DELAY_SHIFT 0 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun #define CS4234_MASTER_VOL 0x17 182*4882a593Smuzhiyun #define CS4234_DAC1_VOL 0x18 183*4882a593Smuzhiyun #define CS4234_DAC2_VOL 0x19 184*4882a593Smuzhiyun #define CS4234_DAC3_VOL 0x1A 185*4882a593Smuzhiyun #define CS4234_DAC4_VOL 0x1B 186*4882a593Smuzhiyun #define CS4234_DAC5_VOL 0x1C 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun #define CS4234_INT_CTRL 0x1E 189*4882a593Smuzhiyun #define CS4234_INT_MODE_MASK 0x80 190*4882a593Smuzhiyun #define CS4234_INT_MODE_SHIFT 7 191*4882a593Smuzhiyun #define CS4234_INT_PIN_MASK 0x60 192*4882a593Smuzhiyun #define CS4234_INT_PIN_SHIFT 5 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun #define CS4234_INT_MASK1 0x1F 195*4882a593Smuzhiyun #define CS4234_MSK_TST_MODE_MASK 0x80 196*4882a593Smuzhiyun #define CS4234_MSK_TST_MODE_ERR_SHIFT 7 197*4882a593Smuzhiyun #define CS4234_MSK_SP_ERR_MASK 0x40 198*4882a593Smuzhiyun #define CS4234_MSK_SP_ERR_SHIFT 6 199*4882a593Smuzhiyun #define CS4234_MSK_CLK_ERR_MASK 0x08 200*4882a593Smuzhiyun #define CS4234_MSK_CLK_ERR_SHIFT 5 201*4882a593Smuzhiyun #define CS4234_MSK_ADC4_OVFL_MASK 0x08 202*4882a593Smuzhiyun #define CS4234_MSK_ADC4_OVFL_SHIFT 3 203*4882a593Smuzhiyun #define CS4234_MSK_ADC3_OVFL_MASK 0x04 204*4882a593Smuzhiyun #define CS4234_MSK_ADC3_OVFL_SHIFT 2 205*4882a593Smuzhiyun #define CS4234_MSK_ADC2_OVFL_MASK 0x02 206*4882a593Smuzhiyun #define CS4234_MSK_ADC2_OVFL_SHIFT 1 207*4882a593Smuzhiyun #define CS4234_MSK_ADC1_OVFL_MASK 0x01 208*4882a593Smuzhiyun #define CS4234_MSK_ADC1_OVFL_SHIFT 0 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun #define CS4234_INT_MASK2 0x20 211*4882a593Smuzhiyun #define CS4234_MSK_DAC5_CLIP_MASK 0x10 212*4882a593Smuzhiyun #define CS4234_MSK_DAC5_CLIP_SHIFT 4 213*4882a593Smuzhiyun #define CS4234_MSK_DAC4_CLIP_MASK 0x08 214*4882a593Smuzhiyun #define CS4234_MSK_DAC4_CLIP_SHIFT 3 215*4882a593Smuzhiyun #define CS4234_MSK_DAC3_CLIP_MASK 0x04 216*4882a593Smuzhiyun #define CS4234_MSK_DAC3_CLIP_SHIFT 2 217*4882a593Smuzhiyun #define CS4234_MSK_DAC2_CLIP_MASK 0x02 218*4882a593Smuzhiyun #define CS4234_MSK_DAC2_CLIP_SHIFT 1 219*4882a593Smuzhiyun #define CS4234_MSK_DAC1_CLIP_MASK 0x01 220*4882a593Smuzhiyun #define CS4234_MSK_DAC1_CLIP_SHIFT 0 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun #define CS4234_INT_NOTIFY1 0x21 223*4882a593Smuzhiyun #define CS4234_TST_MODE_MASK 0x80 224*4882a593Smuzhiyun #define CS4234_TST_MODE_SHIFT 7 225*4882a593Smuzhiyun #define CS4234_SP_ERR_MASK 0x40 226*4882a593Smuzhiyun #define CS4234_SP_ERR_SHIFT 6 227*4882a593Smuzhiyun #define CS4234_CLK_MOD_ERR_MASK 0x08 228*4882a593Smuzhiyun #define CS4234_CLK_MOD_ERR_SHIFT 5 229*4882a593Smuzhiyun #define CS4234_ADC4_OVFL_MASK 0x08 230*4882a593Smuzhiyun #define CS4234_ADC4_OVFL_SHIFT 3 231*4882a593Smuzhiyun #define CS4234_ADC3_OVFL_MASK 0x04 232*4882a593Smuzhiyun #define CS4234_ADC3_OVFL_SHIFT 2 233*4882a593Smuzhiyun #define CS4234_ADC2_OVFL_MASK 0x02 234*4882a593Smuzhiyun #define CS4234_ADC2_OVFL_SHIFT 1 235*4882a593Smuzhiyun #define CS4234_ADC1_OVFL_MASK 0x01 236*4882a593Smuzhiyun #define CS4234_ADC1_OVFL_SHIFT 0 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun #define CS4234_INT_NOTIFY2 0x22 239*4882a593Smuzhiyun #define CS4234_DAC5_CLIP_MASK 0x10 240*4882a593Smuzhiyun #define CS4234_DAC5_CLIP_SHIFT 4 241*4882a593Smuzhiyun #define CS4234_DAC4_CLIP_MASK 0x08 242*4882a593Smuzhiyun #define CS4234_DAC4_CLIP_SHIFT 3 243*4882a593Smuzhiyun #define CS4234_DAC3_CLIP_MASK 0x04 244*4882a593Smuzhiyun #define CS4234_DAC3_CLIP_SHIFT 2 245*4882a593Smuzhiyun #define CS4234_DAC2_CLIP_MASK 0x02 246*4882a593Smuzhiyun #define CS4234_DAC2_CLIP_SHIFT 1 247*4882a593Smuzhiyun #define CS4234_DAC1_CLIP_MASK 0x01 248*4882a593Smuzhiyun #define CS4234_DAC1_CLIP_SHIFT 0 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun #define CS4234_MAX_REGISTER CS4234_INT_NOTIFY2 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun #define CS4234_SUPPORTED_ID 0x423400 253*4882a593Smuzhiyun #define CS4234_BOOT_TIME_US 3000 254*4882a593Smuzhiyun #define CS4234_HOLD_RESET_TIME_US 1000 255*4882a593Smuzhiyun #define CS4234_VQ_CHARGE_MS 1000 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun #define CS4234_PCM_RATES (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \ 258*4882a593Smuzhiyun SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_64000 | \ 259*4882a593Smuzhiyun SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000) 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun #define CS4234_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE | \ 262*4882a593Smuzhiyun SNDRV_PCM_FMTBIT_S20_LE | SNDRV_PCM_FMTBIT_S24_LE | \ 263*4882a593Smuzhiyun SNDRV_PCM_FMTBIT_S24_3LE) 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun enum cs4234_supplies { 266*4882a593Smuzhiyun CS4234_SUPPLY_VA = 0, 267*4882a593Smuzhiyun CS4234_SUPPLY_VL, 268*4882a593Smuzhiyun }; 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun enum cs4234_va_sel { 271*4882a593Smuzhiyun CS4234_3V3 = 0, 272*4882a593Smuzhiyun CS4234_5V, 273*4882a593Smuzhiyun }; 274*4882a593Smuzhiyun 275*4882a593Smuzhiyun enum cs4234_sp_format { 276*4882a593Smuzhiyun CS4234_LEFT_J = 0, 277*4882a593Smuzhiyun CS4234_I2S, 278*4882a593Smuzhiyun CS4234_TDM, 279*4882a593Smuzhiyun }; 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun enum cs4234_base_rate_advisory { 282*4882a593Smuzhiyun CS4234_48K = 0, 283*4882a593Smuzhiyun CS4234_44K1, 284*4882a593Smuzhiyun CS4234_32K, 285*4882a593Smuzhiyun }; 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun #endif 288