1*8d78602aSSrinivas Kandagatla // SPDX-License-Identifier: GPL-2.0-only 2*8d78602aSSrinivas Kandagatla // Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. 3*8d78602aSSrinivas Kandagatla 4*8d78602aSSrinivas Kandagatla #include <linux/module.h> 5*8d78602aSSrinivas Kandagatla #include <linux/slab.h> 6*8d78602aSSrinivas Kandagatla #include <linux/platform_device.h> 7*8d78602aSSrinivas Kandagatla #include <linux/device.h> 8*8d78602aSSrinivas Kandagatla #include <linux/delay.h> 9*8d78602aSSrinivas Kandagatla #include <linux/kernel.h> 10*8d78602aSSrinivas Kandagatla #include <linux/pm_runtime.h> 11*8d78602aSSrinivas Kandagatla #include <linux/component.h> 12*8d78602aSSrinivas Kandagatla #include <sound/soc.h> 13*8d78602aSSrinivas Kandagatla #include <sound/tlv.h> 14*8d78602aSSrinivas Kandagatla #include <linux/of_gpio.h> 15*8d78602aSSrinivas Kandagatla #include <linux/of.h> 16*8d78602aSSrinivas Kandagatla #include <sound/jack.h> 17*8d78602aSSrinivas Kandagatla #include <sound/pcm.h> 18*8d78602aSSrinivas Kandagatla #include <sound/pcm_params.h> 19*8d78602aSSrinivas Kandagatla #include <linux/regmap.h> 20*8d78602aSSrinivas Kandagatla #include <sound/soc.h> 21*8d78602aSSrinivas Kandagatla #include <sound/soc-dapm.h> 22*8d78602aSSrinivas Kandagatla #include <linux/regulator/consumer.h> 23*8d78602aSSrinivas Kandagatla 24*8d78602aSSrinivas Kandagatla #include "wcd-clsh-v2.h" 25*8d78602aSSrinivas Kandagatla #include "wcd938x.h" 26*8d78602aSSrinivas Kandagatla 27*8d78602aSSrinivas Kandagatla #define WCD938X_MAX_MICBIAS (4) 28*8d78602aSSrinivas Kandagatla #define WCD938X_MAX_SUPPLY (4) 29*8d78602aSSrinivas Kandagatla #define WCD938X_MBHC_MAX_BUTTONS (8) 30*8d78602aSSrinivas Kandagatla #define TX_ADC_MAX (4) 31*8d78602aSSrinivas Kandagatla #define WCD938X_TX_MAX_SWR_PORTS (5) 32*8d78602aSSrinivas Kandagatla 33*8d78602aSSrinivas Kandagatla #define WCD938X_RATES_MASK (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\ 34*8d78602aSSrinivas Kandagatla SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000 |\ 35*8d78602aSSrinivas Kandagatla SNDRV_PCM_RATE_96000 | SNDRV_PCM_RATE_192000) 36*8d78602aSSrinivas Kandagatla /* Fractional Rates */ 37*8d78602aSSrinivas Kandagatla #define WCD938X_FRAC_RATES_MASK (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_88200 |\ 38*8d78602aSSrinivas Kandagatla SNDRV_PCM_RATE_176400) 39*8d78602aSSrinivas Kandagatla #define WCD938X_FORMATS_S16_S24_LE (SNDRV_PCM_FMTBIT_S16_LE | \ 40*8d78602aSSrinivas Kandagatla SNDRV_PCM_FMTBIT_S24_LE) 41*8d78602aSSrinivas Kandagatla /* Convert from vout ctl to micbias voltage in mV */ 42*8d78602aSSrinivas Kandagatla #define WCD_VOUT_CTL_TO_MICB(v) (1000 + v * 50) 43*8d78602aSSrinivas Kandagatla #define SWR_CLK_RATE_0P6MHZ (600000) 44*8d78602aSSrinivas Kandagatla #define SWR_CLK_RATE_1P2MHZ (1200000) 45*8d78602aSSrinivas Kandagatla #define SWR_CLK_RATE_2P4MHZ (2400000) 46*8d78602aSSrinivas Kandagatla #define SWR_CLK_RATE_4P8MHZ (4800000) 47*8d78602aSSrinivas Kandagatla #define SWR_CLK_RATE_9P6MHZ (9600000) 48*8d78602aSSrinivas Kandagatla #define SWR_CLK_RATE_11P2896MHZ (1128960) 49*8d78602aSSrinivas Kandagatla 50*8d78602aSSrinivas Kandagatla #define WCD938X_DRV_NAME "wcd938x_codec" 51*8d78602aSSrinivas Kandagatla #define WCD938X_VERSION_1_0 (1) 52*8d78602aSSrinivas Kandagatla #define EAR_RX_PATH_AUX (1) 53*8d78602aSSrinivas Kandagatla 54*8d78602aSSrinivas Kandagatla #define ADC_MODE_VAL_HIFI 0x01 55*8d78602aSSrinivas Kandagatla #define ADC_MODE_VAL_LO_HIF 0x02 56*8d78602aSSrinivas Kandagatla #define ADC_MODE_VAL_NORMAL 0x03 57*8d78602aSSrinivas Kandagatla #define ADC_MODE_VAL_LP 0x05 58*8d78602aSSrinivas Kandagatla #define ADC_MODE_VAL_ULP1 0x09 59*8d78602aSSrinivas Kandagatla #define ADC_MODE_VAL_ULP2 0x0B 60*8d78602aSSrinivas Kandagatla 61*8d78602aSSrinivas Kandagatla /* Z value defined in milliohm */ 62*8d78602aSSrinivas Kandagatla #define WCD938X_ZDET_VAL_32 (32000) 63*8d78602aSSrinivas Kandagatla #define WCD938X_ZDET_VAL_400 (400000) 64*8d78602aSSrinivas Kandagatla #define WCD938X_ZDET_VAL_1200 (1200000) 65*8d78602aSSrinivas Kandagatla #define WCD938X_ZDET_VAL_100K (100000000) 66*8d78602aSSrinivas Kandagatla /* Z floating defined in ohms */ 67*8d78602aSSrinivas Kandagatla #define WCD938X_ZDET_FLOATING_IMPEDANCE (0x0FFFFFFE) 68*8d78602aSSrinivas Kandagatla #define WCD938X_ZDET_NUM_MEASUREMENTS (900) 69*8d78602aSSrinivas Kandagatla #define WCD938X_MBHC_GET_C1(c) ((c & 0xC000) >> 14) 70*8d78602aSSrinivas Kandagatla #define WCD938X_MBHC_GET_X1(x) (x & 0x3FFF) 71*8d78602aSSrinivas Kandagatla /* Z value compared in milliOhm */ 72*8d78602aSSrinivas Kandagatla #define WCD938X_MBHC_IS_SECOND_RAMP_REQUIRED(z) ((z > 400000) || (z < 32000)) 73*8d78602aSSrinivas Kandagatla #define WCD938X_MBHC_ZDET_CONST (86 * 16384) 74*8d78602aSSrinivas Kandagatla #define WCD938X_MBHC_MOISTURE_RREF R_24_KOHM 75*8d78602aSSrinivas Kandagatla #define WCD_MBHC_HS_V_MAX 1600 76*8d78602aSSrinivas Kandagatla 77*8d78602aSSrinivas Kandagatla enum { 78*8d78602aSSrinivas Kandagatla WCD9380 = 0, 79*8d78602aSSrinivas Kandagatla WCD9385 = 5, 80*8d78602aSSrinivas Kandagatla }; 81*8d78602aSSrinivas Kandagatla 82*8d78602aSSrinivas Kandagatla enum { 83*8d78602aSSrinivas Kandagatla TX_HDR12 = 0, 84*8d78602aSSrinivas Kandagatla TX_HDR34, 85*8d78602aSSrinivas Kandagatla TX_HDR_MAX, 86*8d78602aSSrinivas Kandagatla }; 87*8d78602aSSrinivas Kandagatla 88*8d78602aSSrinivas Kandagatla enum { 89*8d78602aSSrinivas Kandagatla WCD_RX1, 90*8d78602aSSrinivas Kandagatla WCD_RX2, 91*8d78602aSSrinivas Kandagatla WCD_RX3 92*8d78602aSSrinivas Kandagatla }; 93*8d78602aSSrinivas Kandagatla 94*8d78602aSSrinivas Kandagatla enum { 95*8d78602aSSrinivas Kandagatla /* INTR_CTRL_INT_MASK_0 */ 96*8d78602aSSrinivas Kandagatla WCD938X_IRQ_MBHC_BUTTON_PRESS_DET = 0, 97*8d78602aSSrinivas Kandagatla WCD938X_IRQ_MBHC_BUTTON_RELEASE_DET, 98*8d78602aSSrinivas Kandagatla WCD938X_IRQ_MBHC_ELECT_INS_REM_DET, 99*8d78602aSSrinivas Kandagatla WCD938X_IRQ_MBHC_ELECT_INS_REM_LEG_DET, 100*8d78602aSSrinivas Kandagatla WCD938X_IRQ_MBHC_SW_DET, 101*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHR_OCP_INT, 102*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHR_CNP_INT, 103*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHL_OCP_INT, 104*8d78602aSSrinivas Kandagatla 105*8d78602aSSrinivas Kandagatla /* INTR_CTRL_INT_MASK_1 */ 106*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHL_CNP_INT, 107*8d78602aSSrinivas Kandagatla WCD938X_IRQ_EAR_CNP_INT, 108*8d78602aSSrinivas Kandagatla WCD938X_IRQ_EAR_SCD_INT, 109*8d78602aSSrinivas Kandagatla WCD938X_IRQ_AUX_CNP_INT, 110*8d78602aSSrinivas Kandagatla WCD938X_IRQ_AUX_SCD_INT, 111*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHL_PDM_WD_INT, 112*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHR_PDM_WD_INT, 113*8d78602aSSrinivas Kandagatla WCD938X_IRQ_AUX_PDM_WD_INT, 114*8d78602aSSrinivas Kandagatla 115*8d78602aSSrinivas Kandagatla /* INTR_CTRL_INT_MASK_2 */ 116*8d78602aSSrinivas Kandagatla WCD938X_IRQ_LDORT_SCD_INT, 117*8d78602aSSrinivas Kandagatla WCD938X_IRQ_MBHC_MOISTURE_INT, 118*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHL_SURGE_DET_INT, 119*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHR_SURGE_DET_INT, 120*8d78602aSSrinivas Kandagatla WCD938X_NUM_IRQS, 121*8d78602aSSrinivas Kandagatla }; 122*8d78602aSSrinivas Kandagatla 123*8d78602aSSrinivas Kandagatla enum { 124*8d78602aSSrinivas Kandagatla WCD_ADC1 = 0, 125*8d78602aSSrinivas Kandagatla WCD_ADC2, 126*8d78602aSSrinivas Kandagatla WCD_ADC3, 127*8d78602aSSrinivas Kandagatla WCD_ADC4, 128*8d78602aSSrinivas Kandagatla ALLOW_BUCK_DISABLE, 129*8d78602aSSrinivas Kandagatla HPH_COMP_DELAY, 130*8d78602aSSrinivas Kandagatla HPH_PA_DELAY, 131*8d78602aSSrinivas Kandagatla AMIC2_BCS_ENABLE, 132*8d78602aSSrinivas Kandagatla WCD_SUPPLIES_LPM_MODE, 133*8d78602aSSrinivas Kandagatla }; 134*8d78602aSSrinivas Kandagatla 135*8d78602aSSrinivas Kandagatla enum { 136*8d78602aSSrinivas Kandagatla ADC_MODE_INVALID = 0, 137*8d78602aSSrinivas Kandagatla ADC_MODE_HIFI, 138*8d78602aSSrinivas Kandagatla ADC_MODE_LO_HIF, 139*8d78602aSSrinivas Kandagatla ADC_MODE_NORMAL, 140*8d78602aSSrinivas Kandagatla ADC_MODE_LP, 141*8d78602aSSrinivas Kandagatla ADC_MODE_ULP1, 142*8d78602aSSrinivas Kandagatla ADC_MODE_ULP2, 143*8d78602aSSrinivas Kandagatla }; 144*8d78602aSSrinivas Kandagatla 145*8d78602aSSrinivas Kandagatla enum { 146*8d78602aSSrinivas Kandagatla AIF1_PB = 0, 147*8d78602aSSrinivas Kandagatla AIF1_CAP, 148*8d78602aSSrinivas Kandagatla NUM_CODEC_DAIS, 149*8d78602aSSrinivas Kandagatla }; 150*8d78602aSSrinivas Kandagatla 151*8d78602aSSrinivas Kandagatla struct wcd938x_priv { 152*8d78602aSSrinivas Kandagatla struct sdw_slave *tx_sdw_dev; 153*8d78602aSSrinivas Kandagatla struct wcd938x_sdw_priv *sdw_priv[NUM_CODEC_DAIS]; 154*8d78602aSSrinivas Kandagatla struct device *txdev; 155*8d78602aSSrinivas Kandagatla struct device *rxdev; 156*8d78602aSSrinivas Kandagatla struct device_node *rxnode, *txnode; 157*8d78602aSSrinivas Kandagatla struct regmap *regmap; 158*8d78602aSSrinivas Kandagatla struct wcd_clsh_ctrl *clsh_info; 159*8d78602aSSrinivas Kandagatla struct irq_domain *virq; 160*8d78602aSSrinivas Kandagatla struct regmap_irq_chip *wcd_regmap_irq_chip; 161*8d78602aSSrinivas Kandagatla struct regmap_irq_chip_data *irq_chip; 162*8d78602aSSrinivas Kandagatla struct regulator_bulk_data supplies[WCD938X_MAX_SUPPLY]; 163*8d78602aSSrinivas Kandagatla struct snd_soc_jack *jack; 164*8d78602aSSrinivas Kandagatla unsigned long status_mask; 165*8d78602aSSrinivas Kandagatla s32 micb_ref[WCD938X_MAX_MICBIAS]; 166*8d78602aSSrinivas Kandagatla s32 pullup_ref[WCD938X_MAX_MICBIAS]; 167*8d78602aSSrinivas Kandagatla u32 hph_mode; 168*8d78602aSSrinivas Kandagatla u32 tx_mode[TX_ADC_MAX]; 169*8d78602aSSrinivas Kandagatla int flyback_cur_det_disable; 170*8d78602aSSrinivas Kandagatla int ear_rx_path; 171*8d78602aSSrinivas Kandagatla int variant; 172*8d78602aSSrinivas Kandagatla int reset_gpio; 173*8d78602aSSrinivas Kandagatla u32 micb1_mv; 174*8d78602aSSrinivas Kandagatla u32 micb2_mv; 175*8d78602aSSrinivas Kandagatla u32 micb3_mv; 176*8d78602aSSrinivas Kandagatla u32 micb4_mv; 177*8d78602aSSrinivas Kandagatla int hphr_pdm_wd_int; 178*8d78602aSSrinivas Kandagatla int hphl_pdm_wd_int; 179*8d78602aSSrinivas Kandagatla int aux_pdm_wd_int; 180*8d78602aSSrinivas Kandagatla bool comp1_enable; 181*8d78602aSSrinivas Kandagatla bool comp2_enable; 182*8d78602aSSrinivas Kandagatla bool ldoh; 183*8d78602aSSrinivas Kandagatla bool bcs_dis; 184*8d78602aSSrinivas Kandagatla }; 185*8d78602aSSrinivas Kandagatla 186*8d78602aSSrinivas Kandagatla enum { 187*8d78602aSSrinivas Kandagatla MIC_BIAS_1 = 1, 188*8d78602aSSrinivas Kandagatla MIC_BIAS_2, 189*8d78602aSSrinivas Kandagatla MIC_BIAS_3, 190*8d78602aSSrinivas Kandagatla MIC_BIAS_4 191*8d78602aSSrinivas Kandagatla }; 192*8d78602aSSrinivas Kandagatla 193*8d78602aSSrinivas Kandagatla enum { 194*8d78602aSSrinivas Kandagatla MICB_PULLUP_ENABLE, 195*8d78602aSSrinivas Kandagatla MICB_PULLUP_DISABLE, 196*8d78602aSSrinivas Kandagatla MICB_ENABLE, 197*8d78602aSSrinivas Kandagatla MICB_DISABLE, 198*8d78602aSSrinivas Kandagatla }; 199*8d78602aSSrinivas Kandagatla 200*8d78602aSSrinivas Kandagatla static const struct reg_default wcd938x_defaults[] = { 201*8d78602aSSrinivas Kandagatla {WCD938X_ANA_PAGE_REGISTER, 0x00}, 202*8d78602aSSrinivas Kandagatla {WCD938X_ANA_BIAS, 0x00}, 203*8d78602aSSrinivas Kandagatla {WCD938X_ANA_RX_SUPPLIES, 0x00}, 204*8d78602aSSrinivas Kandagatla {WCD938X_ANA_HPH, 0x0C}, 205*8d78602aSSrinivas Kandagatla {WCD938X_ANA_EAR, 0x00}, 206*8d78602aSSrinivas Kandagatla {WCD938X_ANA_EAR_COMPANDER_CTL, 0x02}, 207*8d78602aSSrinivas Kandagatla {WCD938X_ANA_TX_CH1, 0x20}, 208*8d78602aSSrinivas Kandagatla {WCD938X_ANA_TX_CH2, 0x00}, 209*8d78602aSSrinivas Kandagatla {WCD938X_ANA_TX_CH3, 0x20}, 210*8d78602aSSrinivas Kandagatla {WCD938X_ANA_TX_CH4, 0x00}, 211*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MICB1_MICB2_DSP_EN_LOGIC, 0x00}, 212*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MICB3_DSP_EN_LOGIC, 0x00}, 213*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_MECH, 0x39}, 214*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_ELECT, 0x08}, 215*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_ZDET, 0x00}, 216*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_RESULT_1, 0x00}, 217*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_RESULT_2, 0x00}, 218*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_RESULT_3, 0x00}, 219*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_BTN0, 0x00}, 220*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_BTN1, 0x10}, 221*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_BTN2, 0x20}, 222*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_BTN3, 0x30}, 223*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_BTN4, 0x40}, 224*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_BTN5, 0x50}, 225*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_BTN6, 0x60}, 226*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MBHC_BTN7, 0x70}, 227*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MICB1, 0x10}, 228*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MICB2, 0x10}, 229*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MICB2_RAMP, 0x00}, 230*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MICB3, 0x10}, 231*8d78602aSSrinivas Kandagatla {WCD938X_ANA_MICB4, 0x10}, 232*8d78602aSSrinivas Kandagatla {WCD938X_BIAS_CTL, 0x2A}, 233*8d78602aSSrinivas Kandagatla {WCD938X_BIAS_VBG_FINE_ADJ, 0x55}, 234*8d78602aSSrinivas Kandagatla {WCD938X_LDOL_VDDCX_ADJUST, 0x01}, 235*8d78602aSSrinivas Kandagatla {WCD938X_LDOL_DISABLE_LDOL, 0x00}, 236*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_CTL_CLK, 0x00}, 237*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_CTL_ANA, 0x00}, 238*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_CTL_SPARE_1, 0x00}, 239*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_CTL_SPARE_2, 0x00}, 240*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_CTL_BCS, 0x00}, 241*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_MOISTURE_DET_FSM_STATUS, 0x00}, 242*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_TEST_CTL, 0x00}, 243*8d78602aSSrinivas Kandagatla {WCD938X_LDOH_MODE, 0x2B}, 244*8d78602aSSrinivas Kandagatla {WCD938X_LDOH_BIAS, 0x68}, 245*8d78602aSSrinivas Kandagatla {WCD938X_LDOH_STB_LOADS, 0x00}, 246*8d78602aSSrinivas Kandagatla {WCD938X_LDOH_SLOWRAMP, 0x50}, 247*8d78602aSSrinivas Kandagatla {WCD938X_MICB1_TEST_CTL_1, 0x1A}, 248*8d78602aSSrinivas Kandagatla {WCD938X_MICB1_TEST_CTL_2, 0x00}, 249*8d78602aSSrinivas Kandagatla {WCD938X_MICB1_TEST_CTL_3, 0xA4}, 250*8d78602aSSrinivas Kandagatla {WCD938X_MICB2_TEST_CTL_1, 0x1A}, 251*8d78602aSSrinivas Kandagatla {WCD938X_MICB2_TEST_CTL_2, 0x00}, 252*8d78602aSSrinivas Kandagatla {WCD938X_MICB2_TEST_CTL_3, 0x24}, 253*8d78602aSSrinivas Kandagatla {WCD938X_MICB3_TEST_CTL_1, 0x1A}, 254*8d78602aSSrinivas Kandagatla {WCD938X_MICB3_TEST_CTL_2, 0x00}, 255*8d78602aSSrinivas Kandagatla {WCD938X_MICB3_TEST_CTL_3, 0xA4}, 256*8d78602aSSrinivas Kandagatla {WCD938X_MICB4_TEST_CTL_1, 0x1A}, 257*8d78602aSSrinivas Kandagatla {WCD938X_MICB4_TEST_CTL_2, 0x00}, 258*8d78602aSSrinivas Kandagatla {WCD938X_MICB4_TEST_CTL_3, 0xA4}, 259*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_ADC_VCM, 0x39}, 260*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_BIAS_ATEST, 0xE0}, 261*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_SPARE1, 0x00}, 262*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_SPARE2, 0x00}, 263*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_TXFE_DIV_CTL, 0x22}, 264*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_TXFE_DIV_START, 0x00}, 265*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_SPARE3, 0x00}, 266*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_SPARE4, 0x00}, 267*8d78602aSSrinivas Kandagatla {WCD938X_TX_1_2_TEST_EN, 0xCC}, 268*8d78602aSSrinivas Kandagatla {WCD938X_TX_1_2_ADC_IB, 0xE9}, 269*8d78602aSSrinivas Kandagatla {WCD938X_TX_1_2_ATEST_REFCTL, 0x0A}, 270*8d78602aSSrinivas Kandagatla {WCD938X_TX_1_2_TEST_CTL, 0x38}, 271*8d78602aSSrinivas Kandagatla {WCD938X_TX_1_2_TEST_BLK_EN1, 0xFF}, 272*8d78602aSSrinivas Kandagatla {WCD938X_TX_1_2_TXFE1_CLKDIV, 0x00}, 273*8d78602aSSrinivas Kandagatla {WCD938X_TX_1_2_SAR2_ERR, 0x00}, 274*8d78602aSSrinivas Kandagatla {WCD938X_TX_1_2_SAR1_ERR, 0x00}, 275*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_TEST_EN, 0xCC}, 276*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_ADC_IB, 0xE9}, 277*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_ATEST_REFCTL, 0x0A}, 278*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_TEST_CTL, 0x38}, 279*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_TEST_BLK_EN3, 0xFF}, 280*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_TXFE3_CLKDIV, 0x00}, 281*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_SAR4_ERR, 0x00}, 282*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_SAR3_ERR, 0x00}, 283*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_TEST_BLK_EN2, 0xFB}, 284*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_TXFE2_CLKDIV, 0x00}, 285*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_SPARE1, 0x00}, 286*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_TEST_BLK_EN4, 0xFB}, 287*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_TXFE4_CLKDIV, 0x00}, 288*8d78602aSSrinivas Kandagatla {WCD938X_TX_3_4_SPARE2, 0x00}, 289*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_MODE_1, 0x40}, 290*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_MODE_2, 0x3A}, 291*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_MODE_3, 0x00}, 292*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_CTRL_VCL_1, 0x70}, 293*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_CTRL_VCL_2, 0x82}, 294*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_CTRL_CCL_1, 0x31}, 295*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_CTRL_CCL_2, 0x80}, 296*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_CTRL_CCL_3, 0x80}, 297*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_CTRL_CCL_4, 0x51}, 298*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_CTRL_CCL_5, 0x00}, 299*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_BUCK_TMUX_A_D, 0x00}, 300*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_BUCK_SW_DRV_CNTL, 0x77}, 301*8d78602aSSrinivas Kandagatla {WCD938X_CLASSH_SPARE, 0x00}, 302*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_EN, 0x4E}, 303*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEG_CTRL_1, 0x0B}, 304*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEG_CTRL_2, 0x45}, 305*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEG_CTRL_3, 0x74}, 306*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEG_CTRL_4, 0x7F}, 307*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEG_CTRL_5, 0x83}, 308*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEG_CTRL_6, 0x98}, 309*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEG_CTRL_7, 0xA9}, 310*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEG_CTRL_8, 0x68}, 311*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEG_CTRL_9, 0x64}, 312*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEGDAC_CTRL_1, 0xED}, 313*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEGDAC_CTRL_2, 0xF0}, 314*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_VNEGDAC_CTRL_3, 0xA6}, 315*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_CTRL_1, 0x65}, 316*8d78602aSSrinivas Kandagatla {WCD938X_FLYBACK_TEST_CTL, 0x00}, 317*8d78602aSSrinivas Kandagatla {WCD938X_RX_AUX_SW_CTL, 0x00}, 318*8d78602aSSrinivas Kandagatla {WCD938X_RX_PA_AUX_IN_CONN, 0x01}, 319*8d78602aSSrinivas Kandagatla {WCD938X_RX_TIMER_DIV, 0x32}, 320*8d78602aSSrinivas Kandagatla {WCD938X_RX_OCP_CTL, 0x1F}, 321*8d78602aSSrinivas Kandagatla {WCD938X_RX_OCP_COUNT, 0x77}, 322*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_EAR_DAC, 0xA0}, 323*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_EAR_AMP, 0xAA}, 324*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_HPH_LDO, 0xA9}, 325*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_HPH_PA, 0xAA}, 326*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_HPH_RDACBUFF_CNP2, 0x8A}, 327*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_HPH_RDAC_LDO, 0x88}, 328*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_HPH_CNP1, 0x82}, 329*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_HPH_LOWPOWER, 0x82}, 330*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_AUX_DAC, 0xA0}, 331*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_AUX_AMP, 0xAA}, 332*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_VNEGDAC_BLEEDER, 0x50}, 333*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_MISC, 0x00}, 334*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_BUCK_RST, 0x08}, 335*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_BUCK_VREF_ERRAMP, 0x44}, 336*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_FLYB_ERRAMP, 0x40}, 337*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_FLYB_BUFF, 0xAA}, 338*8d78602aSSrinivas Kandagatla {WCD938X_RX_BIAS_FLYB_MID_RST, 0x14}, 339*8d78602aSSrinivas Kandagatla {WCD938X_HPH_L_STATUS, 0x04}, 340*8d78602aSSrinivas Kandagatla {WCD938X_HPH_R_STATUS, 0x04}, 341*8d78602aSSrinivas Kandagatla {WCD938X_HPH_CNP_EN, 0x80}, 342*8d78602aSSrinivas Kandagatla {WCD938X_HPH_CNP_WG_CTL, 0x9A}, 343*8d78602aSSrinivas Kandagatla {WCD938X_HPH_CNP_WG_TIME, 0x14}, 344*8d78602aSSrinivas Kandagatla {WCD938X_HPH_OCP_CTL, 0x28}, 345*8d78602aSSrinivas Kandagatla {WCD938X_HPH_AUTO_CHOP, 0x16}, 346*8d78602aSSrinivas Kandagatla {WCD938X_HPH_CHOP_CTL, 0x83}, 347*8d78602aSSrinivas Kandagatla {WCD938X_HPH_PA_CTL1, 0x46}, 348*8d78602aSSrinivas Kandagatla {WCD938X_HPH_PA_CTL2, 0x50}, 349*8d78602aSSrinivas Kandagatla {WCD938X_HPH_L_EN, 0x80}, 350*8d78602aSSrinivas Kandagatla {WCD938X_HPH_L_TEST, 0xE0}, 351*8d78602aSSrinivas Kandagatla {WCD938X_HPH_L_ATEST, 0x50}, 352*8d78602aSSrinivas Kandagatla {WCD938X_HPH_R_EN, 0x80}, 353*8d78602aSSrinivas Kandagatla {WCD938X_HPH_R_TEST, 0xE0}, 354*8d78602aSSrinivas Kandagatla {WCD938X_HPH_R_ATEST, 0x54}, 355*8d78602aSSrinivas Kandagatla {WCD938X_HPH_RDAC_CLK_CTL1, 0x99}, 356*8d78602aSSrinivas Kandagatla {WCD938X_HPH_RDAC_CLK_CTL2, 0x9B}, 357*8d78602aSSrinivas Kandagatla {WCD938X_HPH_RDAC_LDO_CTL, 0x33}, 358*8d78602aSSrinivas Kandagatla {WCD938X_HPH_RDAC_CHOP_CLK_LP_CTL, 0x00}, 359*8d78602aSSrinivas Kandagatla {WCD938X_HPH_REFBUFF_UHQA_CTL, 0x68}, 360*8d78602aSSrinivas Kandagatla {WCD938X_HPH_REFBUFF_LP_CTL, 0x0E}, 361*8d78602aSSrinivas Kandagatla {WCD938X_HPH_L_DAC_CTL, 0x20}, 362*8d78602aSSrinivas Kandagatla {WCD938X_HPH_R_DAC_CTL, 0x20}, 363*8d78602aSSrinivas Kandagatla {WCD938X_HPH_SURGE_HPHLR_SURGE_COMP_SEL, 0x55}, 364*8d78602aSSrinivas Kandagatla {WCD938X_HPH_SURGE_HPHLR_SURGE_EN, 0x19}, 365*8d78602aSSrinivas Kandagatla {WCD938X_HPH_SURGE_HPHLR_SURGE_MISC1, 0xA0}, 366*8d78602aSSrinivas Kandagatla {WCD938X_HPH_SURGE_HPHLR_SURGE_STATUS, 0x00}, 367*8d78602aSSrinivas Kandagatla {WCD938X_EAR_EAR_EN_REG, 0x22}, 368*8d78602aSSrinivas Kandagatla {WCD938X_EAR_EAR_PA_CON, 0x44}, 369*8d78602aSSrinivas Kandagatla {WCD938X_EAR_EAR_SP_CON, 0xDB}, 370*8d78602aSSrinivas Kandagatla {WCD938X_EAR_EAR_DAC_CON, 0x80}, 371*8d78602aSSrinivas Kandagatla {WCD938X_EAR_EAR_CNP_FSM_CON, 0xB2}, 372*8d78602aSSrinivas Kandagatla {WCD938X_EAR_TEST_CTL, 0x00}, 373*8d78602aSSrinivas Kandagatla {WCD938X_EAR_STATUS_REG_1, 0x00}, 374*8d78602aSSrinivas Kandagatla {WCD938X_EAR_STATUS_REG_2, 0x08}, 375*8d78602aSSrinivas Kandagatla {WCD938X_ANA_NEW_PAGE_REGISTER, 0x00}, 376*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_ANA_HPH2, 0x00}, 377*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_ANA_HPH3, 0x00}, 378*8d78602aSSrinivas Kandagatla {WCD938X_SLEEP_CTL, 0x16}, 379*8d78602aSSrinivas Kandagatla {WCD938X_SLEEP_WATCHDOG_CTL, 0x00}, 380*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_ELECT_REM_CLAMP_CTL, 0x00}, 381*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_CTL_1, 0x02}, 382*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_CTL_2, 0x05}, 383*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_PLUG_DETECT_CTL, 0xE9}, 384*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_ZDET_ANA_CTL, 0x0F}, 385*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_ZDET_RAMP_CTL, 0x00}, 386*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_FSM_STATUS, 0x00}, 387*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_ADC_RESULT, 0x00}, 388*8d78602aSSrinivas Kandagatla {WCD938X_TX_NEW_AMIC_MUX_CFG, 0x00}, 389*8d78602aSSrinivas Kandagatla {WCD938X_AUX_AUXPA, 0x00}, 390*8d78602aSSrinivas Kandagatla {WCD938X_LDORXTX_MODE, 0x0C}, 391*8d78602aSSrinivas Kandagatla {WCD938X_LDORXTX_CONFIG, 0x10}, 392*8d78602aSSrinivas Kandagatla {WCD938X_DIE_CRACK_DIE_CRK_DET_EN, 0x00}, 393*8d78602aSSrinivas Kandagatla {WCD938X_DIE_CRACK_DIE_CRK_DET_OUT, 0x00}, 394*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_RDAC_GAIN_CTL, 0x40}, 395*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_L, 0x81}, 396*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_RDAC_VREF_CTL, 0x10}, 397*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_RDAC_OVERRIDE_CTL, 0x00}, 398*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R, 0x81}, 399*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_PA_MISC1, 0x22}, 400*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_PA_MISC2, 0x00}, 401*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_PA_RDAC_MISC, 0x00}, 402*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_HPH_TIMER1, 0xFE}, 403*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_HPH_TIMER2, 0x02}, 404*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_HPH_TIMER3, 0x4E}, 405*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_HPH_TIMER4, 0x54}, 406*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_PA_RDAC_MISC2, 0x00}, 407*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_PA_RDAC_MISC3, 0x00}, 408*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_L_NEW, 0x90}, 409*8d78602aSSrinivas Kandagatla {WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R_NEW, 0x90}, 410*8d78602aSSrinivas Kandagatla {WCD938X_RX_NEW_INT_HPH_RDAC_BIAS_LOHIFI, 0x62}, 411*8d78602aSSrinivas Kandagatla {WCD938X_RX_NEW_INT_HPH_RDAC_BIAS_ULP, 0x01}, 412*8d78602aSSrinivas Kandagatla {WCD938X_RX_NEW_INT_HPH_RDAC_LDO_LP, 0x11}, 413*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_INT_MOISTURE_DET_DC_CTRL, 0x57}, 414*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_INT_MOISTURE_DET_POLLING_CTRL, 0x01}, 415*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_INT_MECH_DET_CURRENT, 0x00}, 416*8d78602aSSrinivas Kandagatla {WCD938X_MBHC_NEW_INT_SPARE_2, 0x00}, 417*8d78602aSSrinivas Kandagatla {WCD938X_EAR_INT_NEW_EAR_CHOPPER_CON, 0xA8}, 418*8d78602aSSrinivas Kandagatla {WCD938X_EAR_INT_NEW_CNP_VCM_CON1, 0x42}, 419*8d78602aSSrinivas Kandagatla {WCD938X_EAR_INT_NEW_CNP_VCM_CON2, 0x22}, 420*8d78602aSSrinivas Kandagatla {WCD938X_EAR_INT_NEW_EAR_DYNAMIC_BIAS, 0x00}, 421*8d78602aSSrinivas Kandagatla {WCD938X_AUX_INT_EN_REG, 0x00}, 422*8d78602aSSrinivas Kandagatla {WCD938X_AUX_INT_PA_CTRL, 0x06}, 423*8d78602aSSrinivas Kandagatla {WCD938X_AUX_INT_SP_CTRL, 0xD2}, 424*8d78602aSSrinivas Kandagatla {WCD938X_AUX_INT_DAC_CTRL, 0x80}, 425*8d78602aSSrinivas Kandagatla {WCD938X_AUX_INT_CLK_CTRL, 0x50}, 426*8d78602aSSrinivas Kandagatla {WCD938X_AUX_INT_TEST_CTRL, 0x00}, 427*8d78602aSSrinivas Kandagatla {WCD938X_AUX_INT_STATUS_REG, 0x00}, 428*8d78602aSSrinivas Kandagatla {WCD938X_AUX_INT_MISC, 0x00}, 429*8d78602aSSrinivas Kandagatla {WCD938X_LDORXTX_INT_BIAS, 0x6E}, 430*8d78602aSSrinivas Kandagatla {WCD938X_LDORXTX_INT_STB_LOADS_DTEST, 0x50}, 431*8d78602aSSrinivas Kandagatla {WCD938X_LDORXTX_INT_TEST0, 0x1C}, 432*8d78602aSSrinivas Kandagatla {WCD938X_LDORXTX_INT_STARTUP_TIMER, 0xFF}, 433*8d78602aSSrinivas Kandagatla {WCD938X_LDORXTX_INT_TEST1, 0x1F}, 434*8d78602aSSrinivas Kandagatla {WCD938X_LDORXTX_INT_STATUS, 0x00}, 435*8d78602aSSrinivas Kandagatla {WCD938X_SLEEP_INT_WATCHDOG_CTL_1, 0x0A}, 436*8d78602aSSrinivas Kandagatla {WCD938X_SLEEP_INT_WATCHDOG_CTL_2, 0x0A}, 437*8d78602aSSrinivas Kandagatla {WCD938X_DIE_CRACK_INT_DIE_CRK_DET_INT1, 0x02}, 438*8d78602aSSrinivas Kandagatla {WCD938X_DIE_CRACK_INT_DIE_CRK_DET_INT2, 0x60}, 439*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L2, 0xFF}, 440*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L1, 0x7F}, 441*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L0, 0x3F}, 442*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_ULP1P2M, 0x1F}, 443*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_ULP0P6M, 0x0F}, 444*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_L2L1, 0xD7}, 445*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_L0, 0xC8}, 446*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_ULP, 0xC6}, 447*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_L2L1, 0xD5}, 448*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_L0, 0xCA}, 449*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_ULP, 0x05}, 450*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_L2L1L0, 0xA5}, 451*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_ULP, 0x13}, 452*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXADC_SCBIAS_L2L1, 0x88}, 453*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXADC_SCBIAS_L0ULP, 0x42}, 454*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXADC_INT_L2, 0xFF}, 455*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXADC_INT_L1, 0x64}, 456*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXADC_INT_L0, 0x64}, 457*8d78602aSSrinivas Kandagatla {WCD938X_TX_COM_NEW_INT_TXADC_INT_ULP, 0x77}, 458*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAGE_REGISTER, 0x00}, 459*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CHIP_ID0, 0x00}, 460*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CHIP_ID1, 0x00}, 461*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CHIP_ID2, 0x0D}, 462*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CHIP_ID3, 0x01}, 463*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_TX_CLK_RATE, 0x00}, 464*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_RST_CTL, 0x03}, 465*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TOP_CLK_CFG, 0x00}, 466*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_ANA_CLK_CTL, 0x00}, 467*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_DIG_CLK_CTL, 0xF0}, 468*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_RST_EN, 0x00}, 469*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_PATH_MODE, 0x55}, 470*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_RX_RST, 0x00}, 471*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_RX0_CTL, 0xFC}, 472*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_RX1_CTL, 0xFC}, 473*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_RX2_CTL, 0xFC}, 474*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_TX_ANA_MODE_0_1, 0x00}, 475*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_TX_ANA_MODE_2_3, 0x00}, 476*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_COMP_CTL_0, 0x00}, 477*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_ANA_TX_CLK_CTL, 0x1E}, 478*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A1_0, 0x00}, 479*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A1_1, 0x01}, 480*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A2_0, 0x63}, 481*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A2_1, 0x04}, 482*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A3_0, 0xAC}, 483*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A3_1, 0x04}, 484*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A4_0, 0x1A}, 485*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A4_1, 0x03}, 486*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A5_0, 0xBC}, 487*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A5_1, 0x02}, 488*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A6_0, 0xC7}, 489*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_A7_0, 0xF8}, 490*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_C_0, 0x47}, 491*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_C_1, 0x43}, 492*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_C_2, 0xB1}, 493*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_C_3, 0x17}, 494*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_R1, 0x4D}, 495*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_R2, 0x29}, 496*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_R3, 0x34}, 497*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_R4, 0x59}, 498*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_R5, 0x66}, 499*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_R6, 0x87}, 500*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_DSM_R7, 0x64}, 501*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A1_0, 0x00}, 502*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A1_1, 0x01}, 503*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A2_0, 0x96}, 504*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A2_1, 0x09}, 505*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A3_0, 0xAB}, 506*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A3_1, 0x05}, 507*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A4_0, 0x1C}, 508*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A4_1, 0x02}, 509*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A5_0, 0x17}, 510*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A5_1, 0x02}, 511*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A6_0, 0xAA}, 512*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_A7_0, 0xE3}, 513*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_C_0, 0x69}, 514*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_C_1, 0x54}, 515*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_C_2, 0x02}, 516*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_C_3, 0x15}, 517*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_R1, 0xA4}, 518*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_R2, 0xB5}, 519*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_R3, 0x86}, 520*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_R4, 0x85}, 521*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_R5, 0xAA}, 522*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_R6, 0xE2}, 523*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_DSM_R7, 0x62}, 524*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_GAIN_RX_0, 0x55}, 525*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_GAIN_RX_1, 0xA9}, 526*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_0, 0x3D}, 527*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_1, 0x2E}, 528*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_2, 0x01}, 529*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_0, 0x00}, 530*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_1, 0xFC}, 531*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_2, 0x01}, 532*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_HPH_GAIN_CTL, 0x00}, 533*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AUX_GAIN_CTL, 0x00}, 534*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_EAR_PATH_CTL, 0x00}, 535*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_SWR_CLH, 0x00}, 536*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_CLH_BYP, 0x00}, 537*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_TX0_CTL, 0x68}, 538*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_TX1_CTL, 0x68}, 539*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_TX2_CTL, 0x68}, 540*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_TX_RST, 0x00}, 541*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_REQ_CTL, 0x01}, 542*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_RST, 0x00}, 543*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_AMIC_CTL, 0x0F}, 544*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_DMIC_CTL, 0x04}, 545*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_DMIC1_CTL, 0x01}, 546*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_DMIC2_CTL, 0x01}, 547*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_DMIC3_CTL, 0x01}, 548*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_DMIC4_CTL, 0x01}, 549*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_PRG_CTL, 0x00}, 550*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_CTL, 0x2B}, 551*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_DMIC_RATE_1_2, 0x11}, 552*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_DMIC_RATE_3_4, 0x11}, 553*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PDM_WD_CTL0, 0x00}, 554*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PDM_WD_CTL1, 0x00}, 555*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PDM_WD_CTL2, 0x00}, 556*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_MODE, 0x00}, 557*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_MASK_0, 0xFF}, 558*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_MASK_1, 0xFF}, 559*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_MASK_2, 0x3F}, 560*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_STATUS_0, 0x00}, 561*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_STATUS_1, 0x00}, 562*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_STATUS_2, 0x00}, 563*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_CLEAR_0, 0x00}, 564*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_CLEAR_1, 0x00}, 565*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_CLEAR_2, 0x00}, 566*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_LEVEL_0, 0x00}, 567*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_LEVEL_1, 0x00}, 568*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_LEVEL_2, 0x00}, 569*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_SET_0, 0x00}, 570*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_SET_1, 0x00}, 571*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_SET_2, 0x00}, 572*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_TEST_0, 0x00}, 573*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_TEST_1, 0x00}, 574*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_INTR_TEST_2, 0x00}, 575*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TX_MODE_DBG_EN, 0x00}, 576*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TX_MODE_DBG_0_1, 0x00}, 577*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TX_MODE_DBG_2_3, 0x00}, 578*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_LB_IN_SEL_CTL, 0x00}, 579*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_LOOP_BACK_MODE, 0x00}, 580*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_DAC_TEST, 0x00}, 581*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_HM_TEST_RX_0, 0x40}, 582*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_HM_TEST_TX_0, 0x40}, 583*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_HM_TEST_RX_1, 0x00}, 584*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_HM_TEST_TX_1, 0x00}, 585*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_HM_TEST_TX_2, 0x00}, 586*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_HM_TEST_0, 0x00}, 587*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SWR_HM_TEST_1, 0x00}, 588*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAD_CTL_SWR_0, 0x8F}, 589*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAD_CTL_SWR_1, 0x06}, 590*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_I2C_CTL, 0x00}, 591*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_CDC_TX_TANGGU_SW_MODE, 0x00}, 592*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_TEST_CTL_0, 0x00}, 593*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_TEST_CTL_1, 0x00}, 594*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_T_DATA_0, 0x00}, 595*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_T_DATA_1, 0x00}, 596*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAD_CTL_PDM_RX0, 0xF1}, 597*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAD_CTL_PDM_RX1, 0xF1}, 598*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAD_CTL_PDM_TX0, 0xF1}, 599*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAD_CTL_PDM_TX1, 0xF1}, 600*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAD_CTL_PDM_TX2, 0xF1}, 601*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAD_INP_DIS_0, 0x00}, 602*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PAD_INP_DIS_1, 0x00}, 603*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_DRIVE_STRENGTH_0, 0x00}, 604*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_DRIVE_STRENGTH_1, 0x00}, 605*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_DRIVE_STRENGTH_2, 0x00}, 606*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_RX_DATA_EDGE_CTL, 0x1F}, 607*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TX_DATA_EDGE_CTL, 0x80}, 608*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_GPIO_MODE, 0x00}, 609*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PIN_CTL_OE, 0x00}, 610*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PIN_CTL_DATA_0, 0x00}, 611*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PIN_CTL_DATA_1, 0x00}, 612*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PIN_STATUS_0, 0x00}, 613*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_PIN_STATUS_1, 0x00}, 614*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_DIG_DEBUG_CTL, 0x00}, 615*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_DIG_DEBUG_EN, 0x00}, 616*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_ANA_CSR_DBG_ADD, 0x00}, 617*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_ANA_CSR_DBG_CTL, 0x48}, 618*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SSP_DBG, 0x00}, 619*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_MODE_STATUS_0, 0x00}, 620*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_MODE_STATUS_1, 0x00}, 621*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SPARE_0, 0x00}, 622*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SPARE_1, 0x00}, 623*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_SPARE_2, 0x00}, 624*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_0, 0x00}, 625*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_1, 0xFF}, 626*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_2, 0xFF}, 627*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_3, 0xFF}, 628*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_4, 0xFF}, 629*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_5, 0xFF}, 630*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_6, 0xFF}, 631*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_7, 0xFF}, 632*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_8, 0xFF}, 633*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_9, 0xFF}, 634*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_10, 0xFF}, 635*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_11, 0xFF}, 636*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_12, 0xFF}, 637*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_13, 0xFF}, 638*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_14, 0xFF}, 639*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_15, 0xFF}, 640*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_16, 0xFF}, 641*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_17, 0xFF}, 642*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_18, 0xFF}, 643*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_19, 0xFF}, 644*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_20, 0x0E}, 645*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_21, 0x00}, 646*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_22, 0x00}, 647*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_23, 0xF8}, 648*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_24, 0x16}, 649*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_25, 0x00}, 650*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_26, 0x00}, 651*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_27, 0x00}, 652*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_28, 0x00}, 653*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_29, 0x00}, 654*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_30, 0x00}, 655*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_EFUSE_REG_31, 0x00}, 656*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TX_REQ_FB_CTL_0, 0x88}, 657*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TX_REQ_FB_CTL_1, 0x88}, 658*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TX_REQ_FB_CTL_2, 0x88}, 659*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TX_REQ_FB_CTL_3, 0x88}, 660*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_TX_REQ_FB_CTL_4, 0x88}, 661*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_DEM_BYPASS_DATA0, 0x55}, 662*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_DEM_BYPASS_DATA1, 0x55}, 663*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_DEM_BYPASS_DATA2, 0x55}, 664*8d78602aSSrinivas Kandagatla {WCD938X_DIGITAL_DEM_BYPASS_DATA3, 0x01}, 665*8d78602aSSrinivas Kandagatla }; 666*8d78602aSSrinivas Kandagatla 667*8d78602aSSrinivas Kandagatla static bool wcd938x_rdwr_register(struct device *dev, unsigned int reg) 668*8d78602aSSrinivas Kandagatla { 669*8d78602aSSrinivas Kandagatla switch (reg) { 670*8d78602aSSrinivas Kandagatla case WCD938X_ANA_PAGE_REGISTER: 671*8d78602aSSrinivas Kandagatla case WCD938X_ANA_BIAS: 672*8d78602aSSrinivas Kandagatla case WCD938X_ANA_RX_SUPPLIES: 673*8d78602aSSrinivas Kandagatla case WCD938X_ANA_HPH: 674*8d78602aSSrinivas Kandagatla case WCD938X_ANA_EAR: 675*8d78602aSSrinivas Kandagatla case WCD938X_ANA_EAR_COMPANDER_CTL: 676*8d78602aSSrinivas Kandagatla case WCD938X_ANA_TX_CH1: 677*8d78602aSSrinivas Kandagatla case WCD938X_ANA_TX_CH2: 678*8d78602aSSrinivas Kandagatla case WCD938X_ANA_TX_CH3: 679*8d78602aSSrinivas Kandagatla case WCD938X_ANA_TX_CH4: 680*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MICB1_MICB2_DSP_EN_LOGIC: 681*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MICB3_DSP_EN_LOGIC: 682*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_MECH: 683*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_ELECT: 684*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_ZDET: 685*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_BTN0: 686*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_BTN1: 687*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_BTN2: 688*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_BTN3: 689*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_BTN4: 690*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_BTN5: 691*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_BTN6: 692*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_BTN7: 693*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MICB1: 694*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MICB2: 695*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MICB2_RAMP: 696*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MICB3: 697*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MICB4: 698*8d78602aSSrinivas Kandagatla case WCD938X_BIAS_CTL: 699*8d78602aSSrinivas Kandagatla case WCD938X_BIAS_VBG_FINE_ADJ: 700*8d78602aSSrinivas Kandagatla case WCD938X_LDOL_VDDCX_ADJUST: 701*8d78602aSSrinivas Kandagatla case WCD938X_LDOL_DISABLE_LDOL: 702*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_CTL_CLK: 703*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_CTL_ANA: 704*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_CTL_SPARE_1: 705*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_CTL_SPARE_2: 706*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_CTL_BCS: 707*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_TEST_CTL: 708*8d78602aSSrinivas Kandagatla case WCD938X_LDOH_MODE: 709*8d78602aSSrinivas Kandagatla case WCD938X_LDOH_BIAS: 710*8d78602aSSrinivas Kandagatla case WCD938X_LDOH_STB_LOADS: 711*8d78602aSSrinivas Kandagatla case WCD938X_LDOH_SLOWRAMP: 712*8d78602aSSrinivas Kandagatla case WCD938X_MICB1_TEST_CTL_1: 713*8d78602aSSrinivas Kandagatla case WCD938X_MICB1_TEST_CTL_2: 714*8d78602aSSrinivas Kandagatla case WCD938X_MICB1_TEST_CTL_3: 715*8d78602aSSrinivas Kandagatla case WCD938X_MICB2_TEST_CTL_1: 716*8d78602aSSrinivas Kandagatla case WCD938X_MICB2_TEST_CTL_2: 717*8d78602aSSrinivas Kandagatla case WCD938X_MICB2_TEST_CTL_3: 718*8d78602aSSrinivas Kandagatla case WCD938X_MICB3_TEST_CTL_1: 719*8d78602aSSrinivas Kandagatla case WCD938X_MICB3_TEST_CTL_2: 720*8d78602aSSrinivas Kandagatla case WCD938X_MICB3_TEST_CTL_3: 721*8d78602aSSrinivas Kandagatla case WCD938X_MICB4_TEST_CTL_1: 722*8d78602aSSrinivas Kandagatla case WCD938X_MICB4_TEST_CTL_2: 723*8d78602aSSrinivas Kandagatla case WCD938X_MICB4_TEST_CTL_3: 724*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_ADC_VCM: 725*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_BIAS_ATEST: 726*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_SPARE1: 727*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_SPARE2: 728*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_TXFE_DIV_CTL: 729*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_TXFE_DIV_START: 730*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_SPARE3: 731*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_SPARE4: 732*8d78602aSSrinivas Kandagatla case WCD938X_TX_1_2_TEST_EN: 733*8d78602aSSrinivas Kandagatla case WCD938X_TX_1_2_ADC_IB: 734*8d78602aSSrinivas Kandagatla case WCD938X_TX_1_2_ATEST_REFCTL: 735*8d78602aSSrinivas Kandagatla case WCD938X_TX_1_2_TEST_CTL: 736*8d78602aSSrinivas Kandagatla case WCD938X_TX_1_2_TEST_BLK_EN1: 737*8d78602aSSrinivas Kandagatla case WCD938X_TX_1_2_TXFE1_CLKDIV: 738*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_TEST_EN: 739*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_ADC_IB: 740*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_ATEST_REFCTL: 741*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_TEST_CTL: 742*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_TEST_BLK_EN3: 743*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_TXFE3_CLKDIV: 744*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_TEST_BLK_EN2: 745*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_TXFE2_CLKDIV: 746*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_SPARE1: 747*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_TEST_BLK_EN4: 748*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_TXFE4_CLKDIV: 749*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_SPARE2: 750*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_MODE_1: 751*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_MODE_2: 752*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_MODE_3: 753*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_CTRL_VCL_1: 754*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_CTRL_VCL_2: 755*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_CTRL_CCL_1: 756*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_CTRL_CCL_2: 757*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_CTRL_CCL_3: 758*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_CTRL_CCL_4: 759*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_CTRL_CCL_5: 760*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_BUCK_TMUX_A_D: 761*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_BUCK_SW_DRV_CNTL: 762*8d78602aSSrinivas Kandagatla case WCD938X_CLASSH_SPARE: 763*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_EN: 764*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEG_CTRL_1: 765*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEG_CTRL_2: 766*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEG_CTRL_3: 767*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEG_CTRL_4: 768*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEG_CTRL_5: 769*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEG_CTRL_6: 770*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEG_CTRL_7: 771*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEG_CTRL_8: 772*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEG_CTRL_9: 773*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEGDAC_CTRL_1: 774*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEGDAC_CTRL_2: 775*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_VNEGDAC_CTRL_3: 776*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_CTRL_1: 777*8d78602aSSrinivas Kandagatla case WCD938X_FLYBACK_TEST_CTL: 778*8d78602aSSrinivas Kandagatla case WCD938X_RX_AUX_SW_CTL: 779*8d78602aSSrinivas Kandagatla case WCD938X_RX_PA_AUX_IN_CONN: 780*8d78602aSSrinivas Kandagatla case WCD938X_RX_TIMER_DIV: 781*8d78602aSSrinivas Kandagatla case WCD938X_RX_OCP_CTL: 782*8d78602aSSrinivas Kandagatla case WCD938X_RX_OCP_COUNT: 783*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_EAR_DAC: 784*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_EAR_AMP: 785*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_HPH_LDO: 786*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_HPH_PA: 787*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_HPH_RDACBUFF_CNP2: 788*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_HPH_RDAC_LDO: 789*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_HPH_CNP1: 790*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_HPH_LOWPOWER: 791*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_AUX_DAC: 792*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_AUX_AMP: 793*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_VNEGDAC_BLEEDER: 794*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_MISC: 795*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_BUCK_RST: 796*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_BUCK_VREF_ERRAMP: 797*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_FLYB_ERRAMP: 798*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_FLYB_BUFF: 799*8d78602aSSrinivas Kandagatla case WCD938X_RX_BIAS_FLYB_MID_RST: 800*8d78602aSSrinivas Kandagatla case WCD938X_HPH_CNP_EN: 801*8d78602aSSrinivas Kandagatla case WCD938X_HPH_CNP_WG_CTL: 802*8d78602aSSrinivas Kandagatla case WCD938X_HPH_CNP_WG_TIME: 803*8d78602aSSrinivas Kandagatla case WCD938X_HPH_OCP_CTL: 804*8d78602aSSrinivas Kandagatla case WCD938X_HPH_AUTO_CHOP: 805*8d78602aSSrinivas Kandagatla case WCD938X_HPH_CHOP_CTL: 806*8d78602aSSrinivas Kandagatla case WCD938X_HPH_PA_CTL1: 807*8d78602aSSrinivas Kandagatla case WCD938X_HPH_PA_CTL2: 808*8d78602aSSrinivas Kandagatla case WCD938X_HPH_L_EN: 809*8d78602aSSrinivas Kandagatla case WCD938X_HPH_L_TEST: 810*8d78602aSSrinivas Kandagatla case WCD938X_HPH_L_ATEST: 811*8d78602aSSrinivas Kandagatla case WCD938X_HPH_R_EN: 812*8d78602aSSrinivas Kandagatla case WCD938X_HPH_R_TEST: 813*8d78602aSSrinivas Kandagatla case WCD938X_HPH_R_ATEST: 814*8d78602aSSrinivas Kandagatla case WCD938X_HPH_RDAC_CLK_CTL1: 815*8d78602aSSrinivas Kandagatla case WCD938X_HPH_RDAC_CLK_CTL2: 816*8d78602aSSrinivas Kandagatla case WCD938X_HPH_RDAC_LDO_CTL: 817*8d78602aSSrinivas Kandagatla case WCD938X_HPH_RDAC_CHOP_CLK_LP_CTL: 818*8d78602aSSrinivas Kandagatla case WCD938X_HPH_REFBUFF_UHQA_CTL: 819*8d78602aSSrinivas Kandagatla case WCD938X_HPH_REFBUFF_LP_CTL: 820*8d78602aSSrinivas Kandagatla case WCD938X_HPH_L_DAC_CTL: 821*8d78602aSSrinivas Kandagatla case WCD938X_HPH_R_DAC_CTL: 822*8d78602aSSrinivas Kandagatla case WCD938X_HPH_SURGE_HPHLR_SURGE_COMP_SEL: 823*8d78602aSSrinivas Kandagatla case WCD938X_HPH_SURGE_HPHLR_SURGE_EN: 824*8d78602aSSrinivas Kandagatla case WCD938X_HPH_SURGE_HPHLR_SURGE_MISC1: 825*8d78602aSSrinivas Kandagatla case WCD938X_EAR_EAR_EN_REG: 826*8d78602aSSrinivas Kandagatla case WCD938X_EAR_EAR_PA_CON: 827*8d78602aSSrinivas Kandagatla case WCD938X_EAR_EAR_SP_CON: 828*8d78602aSSrinivas Kandagatla case WCD938X_EAR_EAR_DAC_CON: 829*8d78602aSSrinivas Kandagatla case WCD938X_EAR_EAR_CNP_FSM_CON: 830*8d78602aSSrinivas Kandagatla case WCD938X_EAR_TEST_CTL: 831*8d78602aSSrinivas Kandagatla case WCD938X_ANA_NEW_PAGE_REGISTER: 832*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_ANA_HPH2: 833*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_ANA_HPH3: 834*8d78602aSSrinivas Kandagatla case WCD938X_SLEEP_CTL: 835*8d78602aSSrinivas Kandagatla case WCD938X_SLEEP_WATCHDOG_CTL: 836*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_ELECT_REM_CLAMP_CTL: 837*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_CTL_1: 838*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_CTL_2: 839*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_PLUG_DETECT_CTL: 840*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_ZDET_ANA_CTL: 841*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_ZDET_RAMP_CTL: 842*8d78602aSSrinivas Kandagatla case WCD938X_TX_NEW_AMIC_MUX_CFG: 843*8d78602aSSrinivas Kandagatla case WCD938X_AUX_AUXPA: 844*8d78602aSSrinivas Kandagatla case WCD938X_LDORXTX_MODE: 845*8d78602aSSrinivas Kandagatla case WCD938X_LDORXTX_CONFIG: 846*8d78602aSSrinivas Kandagatla case WCD938X_DIE_CRACK_DIE_CRK_DET_EN: 847*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_RDAC_GAIN_CTL: 848*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_L: 849*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_RDAC_VREF_CTL: 850*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_RDAC_OVERRIDE_CTL: 851*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R: 852*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_PA_MISC1: 853*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_PA_MISC2: 854*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_PA_RDAC_MISC: 855*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_HPH_TIMER1: 856*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_HPH_TIMER2: 857*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_HPH_TIMER3: 858*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_HPH_TIMER4: 859*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_PA_RDAC_MISC2: 860*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_PA_RDAC_MISC3: 861*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_L_NEW: 862*8d78602aSSrinivas Kandagatla case WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R_NEW: 863*8d78602aSSrinivas Kandagatla case WCD938X_RX_NEW_INT_HPH_RDAC_BIAS_LOHIFI: 864*8d78602aSSrinivas Kandagatla case WCD938X_RX_NEW_INT_HPH_RDAC_BIAS_ULP: 865*8d78602aSSrinivas Kandagatla case WCD938X_RX_NEW_INT_HPH_RDAC_LDO_LP: 866*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_INT_MOISTURE_DET_DC_CTRL: 867*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_INT_MOISTURE_DET_POLLING_CTRL: 868*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_INT_MECH_DET_CURRENT: 869*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_INT_SPARE_2: 870*8d78602aSSrinivas Kandagatla case WCD938X_EAR_INT_NEW_EAR_CHOPPER_CON: 871*8d78602aSSrinivas Kandagatla case WCD938X_EAR_INT_NEW_CNP_VCM_CON1: 872*8d78602aSSrinivas Kandagatla case WCD938X_EAR_INT_NEW_CNP_VCM_CON2: 873*8d78602aSSrinivas Kandagatla case WCD938X_EAR_INT_NEW_EAR_DYNAMIC_BIAS: 874*8d78602aSSrinivas Kandagatla case WCD938X_AUX_INT_EN_REG: 875*8d78602aSSrinivas Kandagatla case WCD938X_AUX_INT_PA_CTRL: 876*8d78602aSSrinivas Kandagatla case WCD938X_AUX_INT_SP_CTRL: 877*8d78602aSSrinivas Kandagatla case WCD938X_AUX_INT_DAC_CTRL: 878*8d78602aSSrinivas Kandagatla case WCD938X_AUX_INT_CLK_CTRL: 879*8d78602aSSrinivas Kandagatla case WCD938X_AUX_INT_TEST_CTRL: 880*8d78602aSSrinivas Kandagatla case WCD938X_AUX_INT_MISC: 881*8d78602aSSrinivas Kandagatla case WCD938X_LDORXTX_INT_BIAS: 882*8d78602aSSrinivas Kandagatla case WCD938X_LDORXTX_INT_STB_LOADS_DTEST: 883*8d78602aSSrinivas Kandagatla case WCD938X_LDORXTX_INT_TEST0: 884*8d78602aSSrinivas Kandagatla case WCD938X_LDORXTX_INT_STARTUP_TIMER: 885*8d78602aSSrinivas Kandagatla case WCD938X_LDORXTX_INT_TEST1: 886*8d78602aSSrinivas Kandagatla case WCD938X_SLEEP_INT_WATCHDOG_CTL_1: 887*8d78602aSSrinivas Kandagatla case WCD938X_SLEEP_INT_WATCHDOG_CTL_2: 888*8d78602aSSrinivas Kandagatla case WCD938X_DIE_CRACK_INT_DIE_CRK_DET_INT1: 889*8d78602aSSrinivas Kandagatla case WCD938X_DIE_CRACK_INT_DIE_CRK_DET_INT2: 890*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L2: 891*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L1: 892*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L0: 893*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_ULP1P2M: 894*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_ULP0P6M: 895*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_L2L1: 896*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_L0: 897*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_ULP: 898*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_L2L1: 899*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_L0: 900*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_ULP: 901*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_L2L1L0: 902*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_ULP: 903*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXADC_SCBIAS_L2L1: 904*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXADC_SCBIAS_L0ULP: 905*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXADC_INT_L2: 906*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXADC_INT_L1: 907*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXADC_INT_L0: 908*8d78602aSSrinivas Kandagatla case WCD938X_TX_COM_NEW_INT_TXADC_INT_ULP: 909*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAGE_REGISTER: 910*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_TX_CLK_RATE: 911*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_RST_CTL: 912*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TOP_CLK_CFG: 913*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_ANA_CLK_CTL: 914*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_DIG_CLK_CTL: 915*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_RST_EN: 916*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_PATH_MODE: 917*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_RX_RST: 918*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_RX0_CTL: 919*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_RX1_CTL: 920*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_RX2_CTL: 921*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_TX_ANA_MODE_0_1: 922*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_TX_ANA_MODE_2_3: 923*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_COMP_CTL_0: 924*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_ANA_TX_CLK_CTL: 925*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A1_0: 926*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A1_1: 927*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A2_0: 928*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A2_1: 929*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A3_0: 930*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A3_1: 931*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A4_0: 932*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A4_1: 933*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A5_0: 934*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A5_1: 935*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A6_0: 936*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_A7_0: 937*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_C_0: 938*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_C_1: 939*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_C_2: 940*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_C_3: 941*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_R1: 942*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_R2: 943*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_R3: 944*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_R4: 945*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_R5: 946*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_R6: 947*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_DSM_R7: 948*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A1_0: 949*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A1_1: 950*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A2_0: 951*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A2_1: 952*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A3_0: 953*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A3_1: 954*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A4_0: 955*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A4_1: 956*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A5_0: 957*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A5_1: 958*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A6_0: 959*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_A7_0: 960*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_C_0: 961*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_C_1: 962*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_C_2: 963*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_C_3: 964*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_R1: 965*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_R2: 966*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_R3: 967*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_R4: 968*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_R5: 969*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_R6: 970*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_DSM_R7: 971*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_GAIN_RX_0: 972*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_GAIN_RX_1: 973*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_0: 974*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_1: 975*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_2: 976*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_0: 977*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_1: 978*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_2: 979*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_HPH_GAIN_CTL: 980*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AUX_GAIN_CTL: 981*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_EAR_PATH_CTL: 982*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_SWR_CLH: 983*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_CLH_BYP: 984*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_TX0_CTL: 985*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_TX1_CTL: 986*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_TX2_CTL: 987*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_TX_RST: 988*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_REQ_CTL: 989*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_RST: 990*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_AMIC_CTL: 991*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_DMIC_CTL: 992*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_DMIC1_CTL: 993*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_DMIC2_CTL: 994*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_DMIC3_CTL: 995*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_DMIC4_CTL: 996*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_PRG_CTL: 997*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_CTL: 998*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_DMIC_RATE_1_2: 999*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_DMIC_RATE_3_4: 1000*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PDM_WD_CTL0: 1001*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PDM_WD_CTL1: 1002*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PDM_WD_CTL2: 1003*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_MODE: 1004*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_MASK_0: 1005*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_MASK_1: 1006*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_MASK_2: 1007*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_CLEAR_0: 1008*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_CLEAR_1: 1009*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_CLEAR_2: 1010*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_LEVEL_0: 1011*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_LEVEL_1: 1012*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_LEVEL_2: 1013*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_SET_0: 1014*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_SET_1: 1015*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_SET_2: 1016*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_TEST_0: 1017*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_TEST_1: 1018*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_TEST_2: 1019*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TX_MODE_DBG_EN: 1020*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TX_MODE_DBG_0_1: 1021*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TX_MODE_DBG_2_3: 1022*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_LB_IN_SEL_CTL: 1023*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_LOOP_BACK_MODE: 1024*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_DAC_TEST: 1025*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_HM_TEST_RX_0: 1026*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_HM_TEST_TX_0: 1027*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_HM_TEST_RX_1: 1028*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_HM_TEST_TX_1: 1029*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_HM_TEST_TX_2: 1030*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAD_CTL_SWR_0: 1031*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAD_CTL_SWR_1: 1032*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_I2C_CTL: 1033*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CDC_TX_TANGGU_SW_MODE: 1034*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_TEST_CTL_0: 1035*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_TEST_CTL_1: 1036*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAD_CTL_PDM_RX0: 1037*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAD_CTL_PDM_RX1: 1038*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAD_CTL_PDM_TX0: 1039*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAD_CTL_PDM_TX1: 1040*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAD_CTL_PDM_TX2: 1041*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAD_INP_DIS_0: 1042*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PAD_INP_DIS_1: 1043*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_DRIVE_STRENGTH_0: 1044*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_DRIVE_STRENGTH_1: 1045*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_DRIVE_STRENGTH_2: 1046*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_RX_DATA_EDGE_CTL: 1047*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TX_DATA_EDGE_CTL: 1048*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_GPIO_MODE: 1049*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PIN_CTL_OE: 1050*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PIN_CTL_DATA_0: 1051*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PIN_CTL_DATA_1: 1052*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_DIG_DEBUG_CTL: 1053*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_DIG_DEBUG_EN: 1054*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_ANA_CSR_DBG_ADD: 1055*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_ANA_CSR_DBG_CTL: 1056*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SSP_DBG: 1057*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SPARE_0: 1058*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SPARE_1: 1059*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SPARE_2: 1060*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TX_REQ_FB_CTL_0: 1061*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TX_REQ_FB_CTL_1: 1062*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TX_REQ_FB_CTL_2: 1063*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TX_REQ_FB_CTL_3: 1064*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_TX_REQ_FB_CTL_4: 1065*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_DEM_BYPASS_DATA0: 1066*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_DEM_BYPASS_DATA1: 1067*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_DEM_BYPASS_DATA2: 1068*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_DEM_BYPASS_DATA3: 1069*8d78602aSSrinivas Kandagatla return true; 1070*8d78602aSSrinivas Kandagatla } 1071*8d78602aSSrinivas Kandagatla 1072*8d78602aSSrinivas Kandagatla return false; 1073*8d78602aSSrinivas Kandagatla } 1074*8d78602aSSrinivas Kandagatla 1075*8d78602aSSrinivas Kandagatla static bool wcd938x_readonly_register(struct device *dev, unsigned int reg) 1076*8d78602aSSrinivas Kandagatla { 1077*8d78602aSSrinivas Kandagatla switch (reg) { 1078*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_RESULT_1: 1079*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_RESULT_2: 1080*8d78602aSSrinivas Kandagatla case WCD938X_ANA_MBHC_RESULT_3: 1081*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_MOISTURE_DET_FSM_STATUS: 1082*8d78602aSSrinivas Kandagatla case WCD938X_TX_1_2_SAR2_ERR: 1083*8d78602aSSrinivas Kandagatla case WCD938X_TX_1_2_SAR1_ERR: 1084*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_SAR4_ERR: 1085*8d78602aSSrinivas Kandagatla case WCD938X_TX_3_4_SAR3_ERR: 1086*8d78602aSSrinivas Kandagatla case WCD938X_HPH_L_STATUS: 1087*8d78602aSSrinivas Kandagatla case WCD938X_HPH_R_STATUS: 1088*8d78602aSSrinivas Kandagatla case WCD938X_HPH_SURGE_HPHLR_SURGE_STATUS: 1089*8d78602aSSrinivas Kandagatla case WCD938X_EAR_STATUS_REG_1: 1090*8d78602aSSrinivas Kandagatla case WCD938X_EAR_STATUS_REG_2: 1091*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_FSM_STATUS: 1092*8d78602aSSrinivas Kandagatla case WCD938X_MBHC_NEW_ADC_RESULT: 1093*8d78602aSSrinivas Kandagatla case WCD938X_DIE_CRACK_DIE_CRK_DET_OUT: 1094*8d78602aSSrinivas Kandagatla case WCD938X_AUX_INT_STATUS_REG: 1095*8d78602aSSrinivas Kandagatla case WCD938X_LDORXTX_INT_STATUS: 1096*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CHIP_ID0: 1097*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CHIP_ID1: 1098*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CHIP_ID2: 1099*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_CHIP_ID3: 1100*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_STATUS_0: 1101*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_STATUS_1: 1102*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_INTR_STATUS_2: 1103*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_HM_TEST_0: 1104*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_SWR_HM_TEST_1: 1105*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_T_DATA_0: 1106*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_T_DATA_1: 1107*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PIN_STATUS_0: 1108*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_PIN_STATUS_1: 1109*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_MODE_STATUS_0: 1110*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_MODE_STATUS_1: 1111*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_0: 1112*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_1: 1113*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_2: 1114*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_3: 1115*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_4: 1116*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_5: 1117*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_6: 1118*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_7: 1119*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_8: 1120*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_9: 1121*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_10: 1122*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_11: 1123*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_12: 1124*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_13: 1125*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_14: 1126*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_15: 1127*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_16: 1128*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_17: 1129*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_18: 1130*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_19: 1131*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_20: 1132*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_21: 1133*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_22: 1134*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_23: 1135*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_24: 1136*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_25: 1137*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_26: 1138*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_27: 1139*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_28: 1140*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_29: 1141*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_30: 1142*8d78602aSSrinivas Kandagatla case WCD938X_DIGITAL_EFUSE_REG_31: 1143*8d78602aSSrinivas Kandagatla return true; 1144*8d78602aSSrinivas Kandagatla } 1145*8d78602aSSrinivas Kandagatla return false; 1146*8d78602aSSrinivas Kandagatla } 1147*8d78602aSSrinivas Kandagatla 1148*8d78602aSSrinivas Kandagatla static bool wcd938x_readable_register(struct device *dev, unsigned int reg) 1149*8d78602aSSrinivas Kandagatla { 1150*8d78602aSSrinivas Kandagatla bool ret; 1151*8d78602aSSrinivas Kandagatla 1152*8d78602aSSrinivas Kandagatla ret = wcd938x_readonly_register(dev, reg); 1153*8d78602aSSrinivas Kandagatla if (!ret) 1154*8d78602aSSrinivas Kandagatla return wcd938x_rdwr_register(dev, reg); 1155*8d78602aSSrinivas Kandagatla 1156*8d78602aSSrinivas Kandagatla return ret; 1157*8d78602aSSrinivas Kandagatla } 1158*8d78602aSSrinivas Kandagatla 1159*8d78602aSSrinivas Kandagatla static bool wcd938x_writeable_register(struct device *dev, unsigned int reg) 1160*8d78602aSSrinivas Kandagatla { 1161*8d78602aSSrinivas Kandagatla return wcd938x_rdwr_register(dev, reg); 1162*8d78602aSSrinivas Kandagatla } 1163*8d78602aSSrinivas Kandagatla 1164*8d78602aSSrinivas Kandagatla static bool wcd938x_volatile_register(struct device *dev, unsigned int reg) 1165*8d78602aSSrinivas Kandagatla { 1166*8d78602aSSrinivas Kandagatla if (reg <= WCD938X_BASE_ADDRESS) 1167*8d78602aSSrinivas Kandagatla return 0; 1168*8d78602aSSrinivas Kandagatla 1169*8d78602aSSrinivas Kandagatla if (reg == WCD938X_DIGITAL_SWR_TX_CLK_RATE) 1170*8d78602aSSrinivas Kandagatla return true; 1171*8d78602aSSrinivas Kandagatla 1172*8d78602aSSrinivas Kandagatla if (wcd938x_readonly_register(dev, reg)) 1173*8d78602aSSrinivas Kandagatla return true; 1174*8d78602aSSrinivas Kandagatla 1175*8d78602aSSrinivas Kandagatla return false; 1176*8d78602aSSrinivas Kandagatla } 1177*8d78602aSSrinivas Kandagatla 1178*8d78602aSSrinivas Kandagatla struct regmap_config wcd938x_regmap_config = { 1179*8d78602aSSrinivas Kandagatla .name = "wcd938x_csr", 1180*8d78602aSSrinivas Kandagatla .reg_bits = 32, 1181*8d78602aSSrinivas Kandagatla .val_bits = 8, 1182*8d78602aSSrinivas Kandagatla .cache_type = REGCACHE_RBTREE, 1183*8d78602aSSrinivas Kandagatla .reg_defaults = wcd938x_defaults, 1184*8d78602aSSrinivas Kandagatla .num_reg_defaults = ARRAY_SIZE(wcd938x_defaults), 1185*8d78602aSSrinivas Kandagatla .max_register = WCD938X_MAX_REGISTER, 1186*8d78602aSSrinivas Kandagatla .readable_reg = wcd938x_readable_register, 1187*8d78602aSSrinivas Kandagatla .writeable_reg = wcd938x_writeable_register, 1188*8d78602aSSrinivas Kandagatla .volatile_reg = wcd938x_volatile_register, 1189*8d78602aSSrinivas Kandagatla .can_multi_write = true, 1190*8d78602aSSrinivas Kandagatla }; 1191*8d78602aSSrinivas Kandagatla EXPORT_SYMBOL_GPL(wcd938x_regmap_config); 1192*8d78602aSSrinivas Kandagatla 1193*8d78602aSSrinivas Kandagatla static const struct regmap_irq wcd938x_irqs[WCD938X_NUM_IRQS] = { 1194*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_MBHC_BUTTON_PRESS_DET, 0, 0x01), 1195*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_MBHC_BUTTON_RELEASE_DET, 0, 0x02), 1196*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_MBHC_ELECT_INS_REM_DET, 0, 0x04), 1197*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_MBHC_ELECT_INS_REM_LEG_DET, 0, 0x08), 1198*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_MBHC_SW_DET, 0, 0x10), 1199*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_HPHR_OCP_INT, 0, 0x20), 1200*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_HPHR_CNP_INT, 0, 0x40), 1201*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_HPHL_OCP_INT, 0, 0x80), 1202*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_HPHL_CNP_INT, 1, 0x01), 1203*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_EAR_CNP_INT, 1, 0x02), 1204*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_EAR_SCD_INT, 1, 0x04), 1205*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_AUX_CNP_INT, 1, 0x08), 1206*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_AUX_SCD_INT, 1, 0x10), 1207*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_HPHL_PDM_WD_INT, 1, 0x20), 1208*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_HPHR_PDM_WD_INT, 1, 0x40), 1209*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_AUX_PDM_WD_INT, 1, 0x80), 1210*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_LDORT_SCD_INT, 2, 0x01), 1211*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_MBHC_MOISTURE_INT, 2, 0x02), 1212*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_HPHL_SURGE_DET_INT, 2, 0x04), 1213*8d78602aSSrinivas Kandagatla REGMAP_IRQ_REG(WCD938X_IRQ_HPHR_SURGE_DET_INT, 2, 0x08), 1214*8d78602aSSrinivas Kandagatla }; 1215*8d78602aSSrinivas Kandagatla 1216*8d78602aSSrinivas Kandagatla static struct regmap_irq_chip wcd938x_regmap_irq_chip = { 1217*8d78602aSSrinivas Kandagatla .name = "wcd938x", 1218*8d78602aSSrinivas Kandagatla .irqs = wcd938x_irqs, 1219*8d78602aSSrinivas Kandagatla .num_irqs = ARRAY_SIZE(wcd938x_irqs), 1220*8d78602aSSrinivas Kandagatla .num_regs = 3, 1221*8d78602aSSrinivas Kandagatla .status_base = WCD938X_DIGITAL_INTR_STATUS_0, 1222*8d78602aSSrinivas Kandagatla .mask_base = WCD938X_DIGITAL_INTR_MASK_0, 1223*8d78602aSSrinivas Kandagatla .type_base = WCD938X_DIGITAL_INTR_LEVEL_0, 1224*8d78602aSSrinivas Kandagatla .ack_base = WCD938X_DIGITAL_INTR_CLEAR_0, 1225*8d78602aSSrinivas Kandagatla .use_ack = 1, 1226*8d78602aSSrinivas Kandagatla .runtime_pm = true, 1227*8d78602aSSrinivas Kandagatla .irq_drv_data = NULL, 1228*8d78602aSSrinivas Kandagatla }; 1229*8d78602aSSrinivas Kandagatla 1230*8d78602aSSrinivas Kandagatla static int wcd938x_io_init(struct wcd938x_priv *wcd938x) 1231*8d78602aSSrinivas Kandagatla { 1232*8d78602aSSrinivas Kandagatla struct regmap *rm = wcd938x->regmap; 1233*8d78602aSSrinivas Kandagatla 1234*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_SLEEP_CTL, 0x0E, 0x0E); 1235*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_SLEEP_CTL, 0x80, 0x80); 1236*8d78602aSSrinivas Kandagatla /* 1 msec delay as per HW requirement */ 1237*8d78602aSSrinivas Kandagatla usleep_range(1000, 1010); 1238*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_SLEEP_CTL, 0x40, 0x40); 1239*8d78602aSSrinivas Kandagatla /* 1 msec delay as per HW requirement */ 1240*8d78602aSSrinivas Kandagatla usleep_range(1000, 1010); 1241*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_LDORXTX_CONFIG, 0x10, 0x00); 1242*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_BIAS_VBG_FINE_ADJ, 1243*8d78602aSSrinivas Kandagatla 0xF0, 0x80); 1244*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_ANA_BIAS, 0x80, 0x80); 1245*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_ANA_BIAS, 0x40, 0x40); 1246*8d78602aSSrinivas Kandagatla /* 10 msec delay as per HW requirement */ 1247*8d78602aSSrinivas Kandagatla usleep_range(10000, 10010); 1248*8d78602aSSrinivas Kandagatla 1249*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_ANA_BIAS, 0x40, 0x00); 1250*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_HPH_NEW_INT_RDAC_GAIN_CTL, 1251*8d78602aSSrinivas Kandagatla 0xF0, 0x00); 1252*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_L_NEW, 1253*8d78602aSSrinivas Kandagatla 0x1F, 0x15); 1254*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R_NEW, 1255*8d78602aSSrinivas Kandagatla 0x1F, 0x15); 1256*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_HPH_REFBUFF_UHQA_CTL, 1257*8d78602aSSrinivas Kandagatla 0xC0, 0x80); 1258*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_DIGITAL_CDC_DMIC_CTL, 1259*8d78602aSSrinivas Kandagatla 0x02, 0x02); 1260*8d78602aSSrinivas Kandagatla 1261*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_ULP, 1262*8d78602aSSrinivas Kandagatla 0xFF, 0x14); 1263*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_ULP, 1264*8d78602aSSrinivas Kandagatla 0x1F, 0x08); 1265*8d78602aSSrinivas Kandagatla 1266*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_DIGITAL_TX_REQ_FB_CTL_0, 0xFF, 0x55); 1267*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_DIGITAL_TX_REQ_FB_CTL_1, 0xFF, 0x44); 1268*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_DIGITAL_TX_REQ_FB_CTL_2, 0xFF, 0x11); 1269*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_DIGITAL_TX_REQ_FB_CTL_3, 0xFF, 0x00); 1270*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_DIGITAL_TX_REQ_FB_CTL_4, 0xFF, 0x00); 1271*8d78602aSSrinivas Kandagatla 1272*8d78602aSSrinivas Kandagatla /* Set Noise Filter Resistor value */ 1273*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_MICB1_TEST_CTL_1, 0xE0, 0xE0); 1274*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_MICB2_TEST_CTL_1, 0xE0, 0xE0); 1275*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_MICB3_TEST_CTL_1, 0xE0, 0xE0); 1276*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_MICB4_TEST_CTL_1, 0xE0, 0xE0); 1277*8d78602aSSrinivas Kandagatla 1278*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_TX_3_4_TEST_BLK_EN2, 0x01, 0x00); 1279*8d78602aSSrinivas Kandagatla regmap_update_bits(rm, WCD938X_HPH_SURGE_HPHLR_SURGE_EN, 0xC0, 0xC0); 1280*8d78602aSSrinivas Kandagatla 1281*8d78602aSSrinivas Kandagatla return 0; 1282*8d78602aSSrinivas Kandagatla 1283*8d78602aSSrinivas Kandagatla } 1284*8d78602aSSrinivas Kandagatla 1285*8d78602aSSrinivas Kandagatla static int wcd938x_get_micb_vout_ctl_val(u32 micb_mv) 1286*8d78602aSSrinivas Kandagatla { 1287*8d78602aSSrinivas Kandagatla /* min micbias voltage is 1V and maximum is 2.85V */ 1288*8d78602aSSrinivas Kandagatla if (micb_mv < 1000 || micb_mv > 2850) 1289*8d78602aSSrinivas Kandagatla return -EINVAL; 1290*8d78602aSSrinivas Kandagatla 1291*8d78602aSSrinivas Kandagatla return (micb_mv - 1000) / 50; 1292*8d78602aSSrinivas Kandagatla } 1293*8d78602aSSrinivas Kandagatla 1294*8d78602aSSrinivas Kandagatla static int wcd938x_set_micbias_data(struct wcd938x_priv *wcd938x) 1295*8d78602aSSrinivas Kandagatla { 1296*8d78602aSSrinivas Kandagatla int vout_ctl_1, vout_ctl_2, vout_ctl_3, vout_ctl_4; 1297*8d78602aSSrinivas Kandagatla 1298*8d78602aSSrinivas Kandagatla /* set micbias voltage */ 1299*8d78602aSSrinivas Kandagatla vout_ctl_1 = wcd938x_get_micb_vout_ctl_val(wcd938x->micb1_mv); 1300*8d78602aSSrinivas Kandagatla vout_ctl_2 = wcd938x_get_micb_vout_ctl_val(wcd938x->micb2_mv); 1301*8d78602aSSrinivas Kandagatla vout_ctl_3 = wcd938x_get_micb_vout_ctl_val(wcd938x->micb3_mv); 1302*8d78602aSSrinivas Kandagatla vout_ctl_4 = wcd938x_get_micb_vout_ctl_val(wcd938x->micb4_mv); 1303*8d78602aSSrinivas Kandagatla if (vout_ctl_1 < 0 || vout_ctl_2 < 0 || vout_ctl_3 < 0 || vout_ctl_4 < 0) 1304*8d78602aSSrinivas Kandagatla return -EINVAL; 1305*8d78602aSSrinivas Kandagatla 1306*8d78602aSSrinivas Kandagatla regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB1, 1307*8d78602aSSrinivas Kandagatla WCD938X_MICB_VOUT_MASK, vout_ctl_1); 1308*8d78602aSSrinivas Kandagatla regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB2, 1309*8d78602aSSrinivas Kandagatla WCD938X_MICB_VOUT_MASK, vout_ctl_2); 1310*8d78602aSSrinivas Kandagatla regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB3, 1311*8d78602aSSrinivas Kandagatla WCD938X_MICB_VOUT_MASK, vout_ctl_3); 1312*8d78602aSSrinivas Kandagatla regmap_update_bits(wcd938x->regmap, WCD938X_ANA_MICB4, 1313*8d78602aSSrinivas Kandagatla WCD938X_MICB_VOUT_MASK, vout_ctl_4); 1314*8d78602aSSrinivas Kandagatla 1315*8d78602aSSrinivas Kandagatla return 0; 1316*8d78602aSSrinivas Kandagatla } 1317*8d78602aSSrinivas Kandagatla 1318*8d78602aSSrinivas Kandagatla static irqreturn_t wcd938x_wd_handle_irq(int irq, void *data) 1319*8d78602aSSrinivas Kandagatla { 1320*8d78602aSSrinivas Kandagatla return IRQ_HANDLED; 1321*8d78602aSSrinivas Kandagatla } 1322*8d78602aSSrinivas Kandagatla 1323*8d78602aSSrinivas Kandagatla static struct irq_chip wcd_irq_chip = { 1324*8d78602aSSrinivas Kandagatla .name = "WCD938x", 1325*8d78602aSSrinivas Kandagatla }; 1326*8d78602aSSrinivas Kandagatla 1327*8d78602aSSrinivas Kandagatla static int wcd_irq_chip_map(struct irq_domain *irqd, unsigned int virq, 1328*8d78602aSSrinivas Kandagatla irq_hw_number_t hw) 1329*8d78602aSSrinivas Kandagatla { 1330*8d78602aSSrinivas Kandagatla irq_set_chip_and_handler(virq, &wcd_irq_chip, handle_simple_irq); 1331*8d78602aSSrinivas Kandagatla irq_set_nested_thread(virq, 1); 1332*8d78602aSSrinivas Kandagatla irq_set_noprobe(virq); 1333*8d78602aSSrinivas Kandagatla 1334*8d78602aSSrinivas Kandagatla return 0; 1335*8d78602aSSrinivas Kandagatla } 1336*8d78602aSSrinivas Kandagatla 1337*8d78602aSSrinivas Kandagatla static const struct irq_domain_ops wcd_domain_ops = { 1338*8d78602aSSrinivas Kandagatla .map = wcd_irq_chip_map, 1339*8d78602aSSrinivas Kandagatla }; 1340*8d78602aSSrinivas Kandagatla 1341*8d78602aSSrinivas Kandagatla static int wcd938x_irq_init(struct wcd938x_priv *wcd, struct device *dev) 1342*8d78602aSSrinivas Kandagatla { 1343*8d78602aSSrinivas Kandagatla 1344*8d78602aSSrinivas Kandagatla wcd->virq = irq_domain_add_linear(NULL, 1, &wcd_domain_ops, NULL); 1345*8d78602aSSrinivas Kandagatla if (!(wcd->virq)) { 1346*8d78602aSSrinivas Kandagatla dev_err(dev, "%s: Failed to add IRQ domain\n", __func__); 1347*8d78602aSSrinivas Kandagatla return -EINVAL; 1348*8d78602aSSrinivas Kandagatla } 1349*8d78602aSSrinivas Kandagatla 1350*8d78602aSSrinivas Kandagatla return devm_regmap_add_irq_chip(dev, wcd->regmap, 1351*8d78602aSSrinivas Kandagatla irq_create_mapping(wcd->virq, 0), 1352*8d78602aSSrinivas Kandagatla IRQF_ONESHOT, 0, &wcd938x_regmap_irq_chip, 1353*8d78602aSSrinivas Kandagatla &wcd->irq_chip); 1354*8d78602aSSrinivas Kandagatla } 1355*8d78602aSSrinivas Kandagatla 1356*8d78602aSSrinivas Kandagatla static int wcd938x_soc_codec_probe(struct snd_soc_component *component) 1357*8d78602aSSrinivas Kandagatla { 1358*8d78602aSSrinivas Kandagatla struct wcd938x_priv *wcd938x = snd_soc_component_get_drvdata(component); 1359*8d78602aSSrinivas Kandagatla struct device *dev = component->dev; 1360*8d78602aSSrinivas Kandagatla int ret, i; 1361*8d78602aSSrinivas Kandagatla 1362*8d78602aSSrinivas Kandagatla snd_soc_component_init_regmap(component, wcd938x->regmap); 1363*8d78602aSSrinivas Kandagatla 1364*8d78602aSSrinivas Kandagatla wcd938x->variant = snd_soc_component_read_field(component, 1365*8d78602aSSrinivas Kandagatla WCD938X_DIGITAL_EFUSE_REG_0, 1366*8d78602aSSrinivas Kandagatla WCD938X_ID_MASK); 1367*8d78602aSSrinivas Kandagatla 1368*8d78602aSSrinivas Kandagatla wcd938x->clsh_info = wcd_clsh_ctrl_alloc(component, WCD938X); 1369*8d78602aSSrinivas Kandagatla 1370*8d78602aSSrinivas Kandagatla wcd938x_io_init(wcd938x); 1371*8d78602aSSrinivas Kandagatla /* Set all interrupts as edge triggered */ 1372*8d78602aSSrinivas Kandagatla for (i = 0; i < wcd938x_regmap_irq_chip.num_regs; i++) { 1373*8d78602aSSrinivas Kandagatla regmap_write(wcd938x->regmap, 1374*8d78602aSSrinivas Kandagatla (WCD938X_DIGITAL_INTR_LEVEL_0 + i), 0); 1375*8d78602aSSrinivas Kandagatla } 1376*8d78602aSSrinivas Kandagatla 1377*8d78602aSSrinivas Kandagatla ret = wcd938x_irq_init(wcd938x, component->dev); 1378*8d78602aSSrinivas Kandagatla if (ret) { 1379*8d78602aSSrinivas Kandagatla dev_err(component->dev, "%s: IRQ init failed: %d\n", 1380*8d78602aSSrinivas Kandagatla __func__, ret); 1381*8d78602aSSrinivas Kandagatla return ret; 1382*8d78602aSSrinivas Kandagatla } 1383*8d78602aSSrinivas Kandagatla 1384*8d78602aSSrinivas Kandagatla wcd938x->hphr_pdm_wd_int = regmap_irq_get_virq(wcd938x->irq_chip, 1385*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHR_PDM_WD_INT); 1386*8d78602aSSrinivas Kandagatla wcd938x->hphl_pdm_wd_int = regmap_irq_get_virq(wcd938x->irq_chip, 1387*8d78602aSSrinivas Kandagatla WCD938X_IRQ_HPHL_PDM_WD_INT); 1388*8d78602aSSrinivas Kandagatla wcd938x->aux_pdm_wd_int = regmap_irq_get_virq(wcd938x->irq_chip, 1389*8d78602aSSrinivas Kandagatla WCD938X_IRQ_AUX_PDM_WD_INT); 1390*8d78602aSSrinivas Kandagatla 1391*8d78602aSSrinivas Kandagatla /* Request for watchdog interrupt */ 1392*8d78602aSSrinivas Kandagatla ret = request_threaded_irq(wcd938x->hphr_pdm_wd_int, NULL, wcd938x_wd_handle_irq, 1393*8d78602aSSrinivas Kandagatla IRQF_ONESHOT | IRQF_TRIGGER_RISING, 1394*8d78602aSSrinivas Kandagatla "HPHR PDM WD INT", wcd938x); 1395*8d78602aSSrinivas Kandagatla if (ret) 1396*8d78602aSSrinivas Kandagatla dev_err(dev, "Failed to request HPHR WD interrupt (%d)\n", ret); 1397*8d78602aSSrinivas Kandagatla 1398*8d78602aSSrinivas Kandagatla ret = request_threaded_irq(wcd938x->hphl_pdm_wd_int, NULL, wcd938x_wd_handle_irq, 1399*8d78602aSSrinivas Kandagatla IRQF_ONESHOT | IRQF_TRIGGER_RISING, 1400*8d78602aSSrinivas Kandagatla "HPHL PDM WD INT", wcd938x); 1401*8d78602aSSrinivas Kandagatla if (ret) 1402*8d78602aSSrinivas Kandagatla dev_err(dev, "Failed to request HPHL WD interrupt (%d)\n", ret); 1403*8d78602aSSrinivas Kandagatla 1404*8d78602aSSrinivas Kandagatla ret = request_threaded_irq(wcd938x->aux_pdm_wd_int, NULL, wcd938x_wd_handle_irq, 1405*8d78602aSSrinivas Kandagatla IRQF_ONESHOT | IRQF_TRIGGER_RISING, 1406*8d78602aSSrinivas Kandagatla "AUX PDM WD INT", wcd938x); 1407*8d78602aSSrinivas Kandagatla if (ret) 1408*8d78602aSSrinivas Kandagatla dev_err(dev, "Failed to request Aux WD interrupt (%d)\n", ret); 1409*8d78602aSSrinivas Kandagatla 1410*8d78602aSSrinivas Kandagatla /* Disable watchdog interrupt for HPH and AUX */ 1411*8d78602aSSrinivas Kandagatla disable_irq_nosync(wcd938x->hphr_pdm_wd_int); 1412*8d78602aSSrinivas Kandagatla disable_irq_nosync(wcd938x->hphl_pdm_wd_int); 1413*8d78602aSSrinivas Kandagatla disable_irq_nosync(wcd938x->aux_pdm_wd_int); 1414*8d78602aSSrinivas Kandagatla 1415*8d78602aSSrinivas Kandagatla return ret; 1416*8d78602aSSrinivas Kandagatla } 1417*8d78602aSSrinivas Kandagatla 1418*8d78602aSSrinivas Kandagatla static const struct snd_soc_component_driver soc_codec_dev_wcd938x = { 1419*8d78602aSSrinivas Kandagatla .name = "wcd938x_codec", 1420*8d78602aSSrinivas Kandagatla .probe = wcd938x_soc_codec_probe, 1421*8d78602aSSrinivas Kandagatla }; 1422*8d78602aSSrinivas Kandagatla 1423*8d78602aSSrinivas Kandagatla static void wcd938x_dt_parse_micbias_info(struct device *dev, struct wcd938x_priv *wcd) 1424*8d78602aSSrinivas Kandagatla { 1425*8d78602aSSrinivas Kandagatla struct device_node *np = dev->of_node; 1426*8d78602aSSrinivas Kandagatla u32 prop_val = 0; 1427*8d78602aSSrinivas Kandagatla int rc = 0; 1428*8d78602aSSrinivas Kandagatla 1429*8d78602aSSrinivas Kandagatla rc = of_property_read_u32(np, "qcom,micbias1-microvolt", &prop_val); 1430*8d78602aSSrinivas Kandagatla if (!rc) 1431*8d78602aSSrinivas Kandagatla wcd->micb1_mv = prop_val/1000; 1432*8d78602aSSrinivas Kandagatla else 1433*8d78602aSSrinivas Kandagatla dev_info(dev, "%s: Micbias1 DT property not found\n", __func__); 1434*8d78602aSSrinivas Kandagatla 1435*8d78602aSSrinivas Kandagatla rc = of_property_read_u32(np, "qcom,micbias2-microvolt", &prop_val); 1436*8d78602aSSrinivas Kandagatla if (!rc) 1437*8d78602aSSrinivas Kandagatla wcd->micb2_mv = prop_val/1000; 1438*8d78602aSSrinivas Kandagatla else 1439*8d78602aSSrinivas Kandagatla dev_info(dev, "%s: Micbias2 DT property not found\n", __func__); 1440*8d78602aSSrinivas Kandagatla 1441*8d78602aSSrinivas Kandagatla rc = of_property_read_u32(np, "qcom,micbias3-microvolt", &prop_val); 1442*8d78602aSSrinivas Kandagatla if (!rc) 1443*8d78602aSSrinivas Kandagatla wcd->micb3_mv = prop_val/1000; 1444*8d78602aSSrinivas Kandagatla else 1445*8d78602aSSrinivas Kandagatla dev_info(dev, "%s: Micbias3 DT property not found\n", __func__); 1446*8d78602aSSrinivas Kandagatla 1447*8d78602aSSrinivas Kandagatla rc = of_property_read_u32(np, "qcom,micbias4-microvolt", &prop_val); 1448*8d78602aSSrinivas Kandagatla if (!rc) 1449*8d78602aSSrinivas Kandagatla wcd->micb4_mv = prop_val/1000; 1450*8d78602aSSrinivas Kandagatla else 1451*8d78602aSSrinivas Kandagatla dev_info(dev, "%s: Micbias4 DT property not found\n", __func__); 1452*8d78602aSSrinivas Kandagatla } 1453*8d78602aSSrinivas Kandagatla 1454*8d78602aSSrinivas Kandagatla static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device *dev) 1455*8d78602aSSrinivas Kandagatla { 1456*8d78602aSSrinivas Kandagatla int ret; 1457*8d78602aSSrinivas Kandagatla 1458*8d78602aSSrinivas Kandagatla wcd938x->reset_gpio = of_get_named_gpio(dev->of_node, "reset-gpios", 0); 1459*8d78602aSSrinivas Kandagatla if (wcd938x->reset_gpio < 0) { 1460*8d78602aSSrinivas Kandagatla dev_err(dev, "Failed to get reset gpio: err = %d\n", 1461*8d78602aSSrinivas Kandagatla wcd938x->reset_gpio); 1462*8d78602aSSrinivas Kandagatla return wcd938x->reset_gpio; 1463*8d78602aSSrinivas Kandagatla } 1464*8d78602aSSrinivas Kandagatla 1465*8d78602aSSrinivas Kandagatla wcd938x->supplies[0].supply = "vdd-rxtx"; 1466*8d78602aSSrinivas Kandagatla wcd938x->supplies[1].supply = "vdd-io"; 1467*8d78602aSSrinivas Kandagatla wcd938x->supplies[2].supply = "vdd-buck"; 1468*8d78602aSSrinivas Kandagatla wcd938x->supplies[3].supply = "vdd-mic-bias"; 1469*8d78602aSSrinivas Kandagatla 1470*8d78602aSSrinivas Kandagatla ret = regulator_bulk_get(dev, WCD938X_MAX_SUPPLY, wcd938x->supplies); 1471*8d78602aSSrinivas Kandagatla if (ret) { 1472*8d78602aSSrinivas Kandagatla dev_err(dev, "Failed to get supplies: err = %d\n", ret); 1473*8d78602aSSrinivas Kandagatla return ret; 1474*8d78602aSSrinivas Kandagatla } 1475*8d78602aSSrinivas Kandagatla 1476*8d78602aSSrinivas Kandagatla ret = regulator_bulk_enable(WCD938X_MAX_SUPPLY, wcd938x->supplies); 1477*8d78602aSSrinivas Kandagatla if (ret) { 1478*8d78602aSSrinivas Kandagatla dev_err(dev, "Failed to enable supplies: err = %d\n", ret); 1479*8d78602aSSrinivas Kandagatla return ret; 1480*8d78602aSSrinivas Kandagatla } 1481*8d78602aSSrinivas Kandagatla 1482*8d78602aSSrinivas Kandagatla wcd938x_dt_parse_micbias_info(dev, wcd938x); 1483*8d78602aSSrinivas Kandagatla 1484*8d78602aSSrinivas Kandagatla return 0; 1485*8d78602aSSrinivas Kandagatla } 1486*8d78602aSSrinivas Kandagatla 1487*8d78602aSSrinivas Kandagatla static int wcd938x_reset(struct wcd938x_priv *wcd938x) 1488*8d78602aSSrinivas Kandagatla { 1489*8d78602aSSrinivas Kandagatla gpio_direction_output(wcd938x->reset_gpio, 0); 1490*8d78602aSSrinivas Kandagatla /* 20us sleep required after pulling the reset gpio to LOW */ 1491*8d78602aSSrinivas Kandagatla usleep_range(20, 30); 1492*8d78602aSSrinivas Kandagatla gpio_set_value(wcd938x->reset_gpio, 1); 1493*8d78602aSSrinivas Kandagatla /* 20us sleep required after pulling the reset gpio to HIGH */ 1494*8d78602aSSrinivas Kandagatla usleep_range(20, 30); 1495*8d78602aSSrinivas Kandagatla 1496*8d78602aSSrinivas Kandagatla return 0; 1497*8d78602aSSrinivas Kandagatla } 1498*8d78602aSSrinivas Kandagatla 1499*8d78602aSSrinivas Kandagatla int wcd938x_handle_sdw_irq(struct wcd938x_sdw_priv *wcd) 1500*8d78602aSSrinivas Kandagatla { 1501*8d78602aSSrinivas Kandagatla struct wcd938x_priv *wcd938x = wcd->wcd938x; 1502*8d78602aSSrinivas Kandagatla struct irq_domain *slave_irq = wcd938x->virq; 1503*8d78602aSSrinivas Kandagatla u32 sts1, sts2, sts3; 1504*8d78602aSSrinivas Kandagatla 1505*8d78602aSSrinivas Kandagatla do { 1506*8d78602aSSrinivas Kandagatla handle_nested_irq(irq_find_mapping(slave_irq, 0)); 1507*8d78602aSSrinivas Kandagatla regmap_read(wcd938x->regmap, WCD938X_DIGITAL_INTR_STATUS_0, &sts1); 1508*8d78602aSSrinivas Kandagatla regmap_read(wcd938x->regmap, WCD938X_DIGITAL_INTR_STATUS_1, &sts2); 1509*8d78602aSSrinivas Kandagatla regmap_read(wcd938x->regmap, WCD938X_DIGITAL_INTR_STATUS_2, &sts3); 1510*8d78602aSSrinivas Kandagatla 1511*8d78602aSSrinivas Kandagatla } while (sts1 || sts2 || sts3); 1512*8d78602aSSrinivas Kandagatla 1513*8d78602aSSrinivas Kandagatla return IRQ_HANDLED; 1514*8d78602aSSrinivas Kandagatla } 1515*8d78602aSSrinivas Kandagatla EXPORT_SYMBOL_GPL(wcd938x_handle_sdw_irq); 1516*8d78602aSSrinivas Kandagatla 1517*8d78602aSSrinivas Kandagatla static struct snd_soc_dai_ops wcd938x_sdw_dai_ops = { 1518*8d78602aSSrinivas Kandagatla }; 1519*8d78602aSSrinivas Kandagatla 1520*8d78602aSSrinivas Kandagatla static struct snd_soc_dai_driver wcd938x_dais[] = { 1521*8d78602aSSrinivas Kandagatla [0] = { 1522*8d78602aSSrinivas Kandagatla .name = "wcd938x-sdw-rx", 1523*8d78602aSSrinivas Kandagatla .playback = { 1524*8d78602aSSrinivas Kandagatla .stream_name = "WCD AIF1 Playback", 1525*8d78602aSSrinivas Kandagatla .rates = WCD938X_RATES_MASK | WCD938X_FRAC_RATES_MASK, 1526*8d78602aSSrinivas Kandagatla .formats = WCD938X_FORMATS_S16_S24_LE, 1527*8d78602aSSrinivas Kandagatla .rate_max = 192000, 1528*8d78602aSSrinivas Kandagatla .rate_min = 8000, 1529*8d78602aSSrinivas Kandagatla .channels_min = 1, 1530*8d78602aSSrinivas Kandagatla .channels_max = 2, 1531*8d78602aSSrinivas Kandagatla }, 1532*8d78602aSSrinivas Kandagatla .ops = &wcd938x_sdw_dai_ops, 1533*8d78602aSSrinivas Kandagatla }, 1534*8d78602aSSrinivas Kandagatla [1] = { 1535*8d78602aSSrinivas Kandagatla .name = "wcd938x-sdw-tx", 1536*8d78602aSSrinivas Kandagatla .capture = { 1537*8d78602aSSrinivas Kandagatla .stream_name = "WCD AIF1 Capture", 1538*8d78602aSSrinivas Kandagatla .rates = WCD938X_RATES_MASK, 1539*8d78602aSSrinivas Kandagatla .formats = SNDRV_PCM_FMTBIT_S16_LE, 1540*8d78602aSSrinivas Kandagatla .rate_min = 8000, 1541*8d78602aSSrinivas Kandagatla .rate_max = 192000, 1542*8d78602aSSrinivas Kandagatla .channels_min = 1, 1543*8d78602aSSrinivas Kandagatla .channels_max = 4, 1544*8d78602aSSrinivas Kandagatla }, 1545*8d78602aSSrinivas Kandagatla .ops = &wcd938x_sdw_dai_ops, 1546*8d78602aSSrinivas Kandagatla }, 1547*8d78602aSSrinivas Kandagatla }; 1548*8d78602aSSrinivas Kandagatla 1549*8d78602aSSrinivas Kandagatla static int wcd938x_bind(struct device *dev) 1550*8d78602aSSrinivas Kandagatla { 1551*8d78602aSSrinivas Kandagatla struct wcd938x_priv *wcd938x = dev_get_drvdata(dev); 1552*8d78602aSSrinivas Kandagatla int ret; 1553*8d78602aSSrinivas Kandagatla 1554*8d78602aSSrinivas Kandagatla ret = component_bind_all(dev, wcd938x); 1555*8d78602aSSrinivas Kandagatla if (ret) { 1556*8d78602aSSrinivas Kandagatla dev_err(dev, "%s: Slave bind failed, ret = %d\n", 1557*8d78602aSSrinivas Kandagatla __func__, ret); 1558*8d78602aSSrinivas Kandagatla return ret; 1559*8d78602aSSrinivas Kandagatla } 1560*8d78602aSSrinivas Kandagatla 1561*8d78602aSSrinivas Kandagatla ret = wcd938x_set_micbias_data(wcd938x); 1562*8d78602aSSrinivas Kandagatla if (ret < 0) { 1563*8d78602aSSrinivas Kandagatla dev_err(dev, "%s: bad micbias pdata\n", __func__); 1564*8d78602aSSrinivas Kandagatla return ret; 1565*8d78602aSSrinivas Kandagatla } 1566*8d78602aSSrinivas Kandagatla 1567*8d78602aSSrinivas Kandagatla ret = snd_soc_register_component(dev, &soc_codec_dev_wcd938x, 1568*8d78602aSSrinivas Kandagatla wcd938x_dais, ARRAY_SIZE(wcd938x_dais)); 1569*8d78602aSSrinivas Kandagatla if (ret) 1570*8d78602aSSrinivas Kandagatla dev_err(dev, "%s: Codec registration failed\n", 1571*8d78602aSSrinivas Kandagatla __func__); 1572*8d78602aSSrinivas Kandagatla 1573*8d78602aSSrinivas Kandagatla return ret; 1574*8d78602aSSrinivas Kandagatla 1575*8d78602aSSrinivas Kandagatla } 1576*8d78602aSSrinivas Kandagatla 1577*8d78602aSSrinivas Kandagatla static void wcd938x_unbind(struct device *dev) 1578*8d78602aSSrinivas Kandagatla { 1579*8d78602aSSrinivas Kandagatla struct wcd938x_priv *wcd938x = dev_get_drvdata(dev); 1580*8d78602aSSrinivas Kandagatla 1581*8d78602aSSrinivas Kandagatla snd_soc_unregister_component(dev); 1582*8d78602aSSrinivas Kandagatla component_unbind_all(dev, wcd938x); 1583*8d78602aSSrinivas Kandagatla } 1584*8d78602aSSrinivas Kandagatla 1585*8d78602aSSrinivas Kandagatla static const struct component_master_ops wcd938x_comp_ops = { 1586*8d78602aSSrinivas Kandagatla .bind = wcd938x_bind, 1587*8d78602aSSrinivas Kandagatla .unbind = wcd938x_unbind, 1588*8d78602aSSrinivas Kandagatla }; 1589*8d78602aSSrinivas Kandagatla 1590*8d78602aSSrinivas Kandagatla static int wcd938x_compare_of(struct device *dev, void *data) 1591*8d78602aSSrinivas Kandagatla { 1592*8d78602aSSrinivas Kandagatla return dev->of_node == data; 1593*8d78602aSSrinivas Kandagatla } 1594*8d78602aSSrinivas Kandagatla 1595*8d78602aSSrinivas Kandagatla static void wcd938x_release_of(struct device *dev, void *data) 1596*8d78602aSSrinivas Kandagatla { 1597*8d78602aSSrinivas Kandagatla of_node_put(data); 1598*8d78602aSSrinivas Kandagatla } 1599*8d78602aSSrinivas Kandagatla 1600*8d78602aSSrinivas Kandagatla static int wcd938x_add_slave_components(struct wcd938x_priv *wcd938x, 1601*8d78602aSSrinivas Kandagatla struct device *dev, 1602*8d78602aSSrinivas Kandagatla struct component_match **matchptr) 1603*8d78602aSSrinivas Kandagatla { 1604*8d78602aSSrinivas Kandagatla struct device_node *np; 1605*8d78602aSSrinivas Kandagatla 1606*8d78602aSSrinivas Kandagatla np = dev->of_node; 1607*8d78602aSSrinivas Kandagatla 1608*8d78602aSSrinivas Kandagatla wcd938x->rxnode = of_parse_phandle(np, "qcom,rx-device", 0); 1609*8d78602aSSrinivas Kandagatla if (!wcd938x->rxnode) { 1610*8d78602aSSrinivas Kandagatla dev_err(dev, "%s: Rx-device node not defined\n", __func__); 1611*8d78602aSSrinivas Kandagatla return -ENODEV; 1612*8d78602aSSrinivas Kandagatla } 1613*8d78602aSSrinivas Kandagatla 1614*8d78602aSSrinivas Kandagatla of_node_get(wcd938x->rxnode); 1615*8d78602aSSrinivas Kandagatla component_match_add_release(dev, matchptr, wcd938x_release_of, 1616*8d78602aSSrinivas Kandagatla wcd938x_compare_of, wcd938x->rxnode); 1617*8d78602aSSrinivas Kandagatla 1618*8d78602aSSrinivas Kandagatla wcd938x->txnode = of_parse_phandle(np, "qcom,tx-device", 0); 1619*8d78602aSSrinivas Kandagatla if (!wcd938x->txnode) { 1620*8d78602aSSrinivas Kandagatla dev_err(dev, "%s: Tx-device node not defined\n", __func__); 1621*8d78602aSSrinivas Kandagatla return -ENODEV; 1622*8d78602aSSrinivas Kandagatla } 1623*8d78602aSSrinivas Kandagatla of_node_get(wcd938x->txnode); 1624*8d78602aSSrinivas Kandagatla component_match_add_release(dev, matchptr, wcd938x_release_of, 1625*8d78602aSSrinivas Kandagatla wcd938x_compare_of, wcd938x->txnode); 1626*8d78602aSSrinivas Kandagatla return 0; 1627*8d78602aSSrinivas Kandagatla } 1628*8d78602aSSrinivas Kandagatla 1629*8d78602aSSrinivas Kandagatla static int wcd938x_probe(struct platform_device *pdev) 1630*8d78602aSSrinivas Kandagatla { 1631*8d78602aSSrinivas Kandagatla struct component_match *match = NULL; 1632*8d78602aSSrinivas Kandagatla struct wcd938x_priv *wcd938x = NULL; 1633*8d78602aSSrinivas Kandagatla struct device *dev = &pdev->dev; 1634*8d78602aSSrinivas Kandagatla int ret; 1635*8d78602aSSrinivas Kandagatla 1636*8d78602aSSrinivas Kandagatla wcd938x = devm_kzalloc(dev, sizeof(struct wcd938x_priv), 1637*8d78602aSSrinivas Kandagatla GFP_KERNEL); 1638*8d78602aSSrinivas Kandagatla if (!wcd938x) 1639*8d78602aSSrinivas Kandagatla return -ENOMEM; 1640*8d78602aSSrinivas Kandagatla 1641*8d78602aSSrinivas Kandagatla dev_set_drvdata(dev, wcd938x); 1642*8d78602aSSrinivas Kandagatla 1643*8d78602aSSrinivas Kandagatla ret = wcd938x_populate_dt_data(wcd938x, dev); 1644*8d78602aSSrinivas Kandagatla if (ret) { 1645*8d78602aSSrinivas Kandagatla dev_err(dev, "%s: Fail to obtain platform data\n", __func__); 1646*8d78602aSSrinivas Kandagatla return -EINVAL; 1647*8d78602aSSrinivas Kandagatla } 1648*8d78602aSSrinivas Kandagatla 1649*8d78602aSSrinivas Kandagatla ret = wcd938x_add_slave_components(wcd938x, dev, &match); 1650*8d78602aSSrinivas Kandagatla if (ret) 1651*8d78602aSSrinivas Kandagatla return ret; 1652*8d78602aSSrinivas Kandagatla 1653*8d78602aSSrinivas Kandagatla wcd938x_reset(wcd938x); 1654*8d78602aSSrinivas Kandagatla 1655*8d78602aSSrinivas Kandagatla ret = component_master_add_with_match(dev, &wcd938x_comp_ops, match); 1656*8d78602aSSrinivas Kandagatla if (ret) 1657*8d78602aSSrinivas Kandagatla return ret; 1658*8d78602aSSrinivas Kandagatla 1659*8d78602aSSrinivas Kandagatla pm_runtime_set_autosuspend_delay(dev, 1000); 1660*8d78602aSSrinivas Kandagatla pm_runtime_use_autosuspend(dev); 1661*8d78602aSSrinivas Kandagatla pm_runtime_mark_last_busy(dev); 1662*8d78602aSSrinivas Kandagatla pm_runtime_set_active(dev); 1663*8d78602aSSrinivas Kandagatla pm_runtime_enable(dev); 1664*8d78602aSSrinivas Kandagatla pm_runtime_idle(dev); 1665*8d78602aSSrinivas Kandagatla 1666*8d78602aSSrinivas Kandagatla return ret; 1667*8d78602aSSrinivas Kandagatla } 1668*8d78602aSSrinivas Kandagatla 1669*8d78602aSSrinivas Kandagatla static int wcd938x_remove(struct platform_device *pdev) 1670*8d78602aSSrinivas Kandagatla { 1671*8d78602aSSrinivas Kandagatla component_master_del(&pdev->dev, &wcd938x_comp_ops); 1672*8d78602aSSrinivas Kandagatla 1673*8d78602aSSrinivas Kandagatla return 0; 1674*8d78602aSSrinivas Kandagatla } 1675*8d78602aSSrinivas Kandagatla 1676*8d78602aSSrinivas Kandagatla static const struct of_device_id wcd938x_dt_match[] = { 1677*8d78602aSSrinivas Kandagatla { .compatible = "qcom,wcd9380-codec" }, 1678*8d78602aSSrinivas Kandagatla { .compatible = "qcom,wcd9385-codec" }, 1679*8d78602aSSrinivas Kandagatla {} 1680*8d78602aSSrinivas Kandagatla }; 1681*8d78602aSSrinivas Kandagatla MODULE_DEVICE_TABLE(of, wcd938x_dt_match); 1682*8d78602aSSrinivas Kandagatla 1683*8d78602aSSrinivas Kandagatla static struct platform_driver wcd938x_codec_driver = { 1684*8d78602aSSrinivas Kandagatla .probe = wcd938x_probe, 1685*8d78602aSSrinivas Kandagatla .remove = wcd938x_remove, 1686*8d78602aSSrinivas Kandagatla .driver = { 1687*8d78602aSSrinivas Kandagatla .name = "wcd938x_codec", 1688*8d78602aSSrinivas Kandagatla .of_match_table = of_match_ptr(wcd938x_dt_match), 1689*8d78602aSSrinivas Kandagatla .suppress_bind_attrs = true, 1690*8d78602aSSrinivas Kandagatla }, 1691*8d78602aSSrinivas Kandagatla }; 1692*8d78602aSSrinivas Kandagatla 1693*8d78602aSSrinivas Kandagatla module_platform_driver(wcd938x_codec_driver); 1694*8d78602aSSrinivas Kandagatla MODULE_DESCRIPTION("WCD938X Codec driver"); 1695*8d78602aSSrinivas Kandagatla MODULE_LICENSE("GPL"); 1696