xref: /openbmc/linux/sound/soc/codecs/wcd938x-sdw.c (revision c5c03830)
116572522SSrinivas Kandagatla // SPDX-License-Identifier: GPL-2.0
216572522SSrinivas Kandagatla // Copyright (c) 2021, Linaro Limited
316572522SSrinivas Kandagatla 
416572522SSrinivas Kandagatla #include <linux/module.h>
516572522SSrinivas Kandagatla #include <linux/slab.h>
616572522SSrinivas Kandagatla #include <linux/platform_device.h>
716572522SSrinivas Kandagatla #include <linux/device.h>
816572522SSrinivas Kandagatla #include <linux/kernel.h>
916572522SSrinivas Kandagatla #include <linux/component.h>
1016572522SSrinivas Kandagatla #include <linux/pm_runtime.h>
11b90d9398SSrinivas Kandagatla #include <linux/irq.h>
1216572522SSrinivas Kandagatla #include <linux/irqdomain.h>
1316572522SSrinivas Kandagatla #include <linux/of.h>
1416572522SSrinivas Kandagatla #include <linux/soundwire/sdw.h>
1516572522SSrinivas Kandagatla #include <linux/soundwire/sdw_type.h>
1616572522SSrinivas Kandagatla #include <linux/soundwire/sdw_registers.h>
1716572522SSrinivas Kandagatla #include <linux/regmap.h>
1816572522SSrinivas Kandagatla #include <sound/soc.h>
1916572522SSrinivas Kandagatla #include <sound/soc-dapm.h>
2016572522SSrinivas Kandagatla #include "wcd938x.h"
2116572522SSrinivas Kandagatla 
2216572522SSrinivas Kandagatla #define SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(m) (0xE0 + 0x10 * (m))
2316572522SSrinivas Kandagatla 
2416572522SSrinivas Kandagatla static struct wcd938x_sdw_ch_info wcd938x_sdw_rx_ch_info[] = {
2516572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_HPH_L, WCD938X_HPH_PORT, BIT(0)),
2616572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_HPH_R, WCD938X_HPH_PORT, BIT(1)),
2716572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_CLSH, WCD938X_CLSH_PORT, BIT(0)),
2816572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_COMP_L, WCD938X_COMP_PORT, BIT(0)),
2916572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_COMP_R, WCD938X_COMP_PORT, BIT(1)),
3016572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_LO, WCD938X_LO_PORT, BIT(0)),
3116572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DSD_L, WCD938X_DSD_PORT, BIT(0)),
3216572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DSD_R, WCD938X_DSD_PORT, BIT(1)),
3316572522SSrinivas Kandagatla };
3416572522SSrinivas Kandagatla 
3516572522SSrinivas Kandagatla static struct wcd938x_sdw_ch_info wcd938x_sdw_tx_ch_info[] = {
3616572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_ADC1, WCD938X_ADC_1_2_PORT, BIT(0)),
3716572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_ADC2, WCD938X_ADC_1_2_PORT, BIT(1)),
3816572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_ADC3, WCD938X_ADC_3_4_PORT, BIT(0)),
3916572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_ADC4, WCD938X_ADC_3_4_PORT, BIT(1)),
4016572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DMIC0, WCD938X_DMIC_0_3_MBHC_PORT, BIT(0)),
4116572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DMIC1, WCD938X_DMIC_0_3_MBHC_PORT, BIT(1)),
4216572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_MBHC, WCD938X_DMIC_0_3_MBHC_PORT, BIT(2)),
4316572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DMIC2, WCD938X_DMIC_0_3_MBHC_PORT, BIT(2)),
4416572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DMIC3, WCD938X_DMIC_0_3_MBHC_PORT, BIT(3)),
4516572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DMIC4, WCD938X_DMIC_4_7_PORT, BIT(0)),
4616572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DMIC5, WCD938X_DMIC_4_7_PORT, BIT(1)),
4716572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DMIC6, WCD938X_DMIC_4_7_PORT, BIT(2)),
4816572522SSrinivas Kandagatla 	WCD_SDW_CH(WCD938X_DMIC7, WCD938X_DMIC_4_7_PORT, BIT(3)),
4916572522SSrinivas Kandagatla };
5016572522SSrinivas Kandagatla 
5116572522SSrinivas Kandagatla static struct sdw_dpn_prop wcd938x_dpn_prop[WCD938X_MAX_SWR_PORTS] = {
5216572522SSrinivas Kandagatla 	{
5316572522SSrinivas Kandagatla 		.num = 1,
5416572522SSrinivas Kandagatla 		.type = SDW_DPN_SIMPLE,
5516572522SSrinivas Kandagatla 		.min_ch = 1,
5616572522SSrinivas Kandagatla 		.max_ch = 8,
5716572522SSrinivas Kandagatla 		.simple_ch_prep_sm = true,
5816572522SSrinivas Kandagatla 	}, {
5916572522SSrinivas Kandagatla 		.num = 2,
6016572522SSrinivas Kandagatla 		.type = SDW_DPN_SIMPLE,
6116572522SSrinivas Kandagatla 		.min_ch = 1,
6216572522SSrinivas Kandagatla 		.max_ch = 4,
6316572522SSrinivas Kandagatla 		.simple_ch_prep_sm = true,
6416572522SSrinivas Kandagatla 	}, {
6516572522SSrinivas Kandagatla 		.num = 3,
6616572522SSrinivas Kandagatla 		.type = SDW_DPN_SIMPLE,
6716572522SSrinivas Kandagatla 		.min_ch = 1,
6816572522SSrinivas Kandagatla 		.max_ch = 4,
6916572522SSrinivas Kandagatla 		.simple_ch_prep_sm = true,
7016572522SSrinivas Kandagatla 	}, {
7116572522SSrinivas Kandagatla 		.num = 4,
7216572522SSrinivas Kandagatla 		.type = SDW_DPN_SIMPLE,
7316572522SSrinivas Kandagatla 		.min_ch = 1,
7416572522SSrinivas Kandagatla 		.max_ch = 4,
7516572522SSrinivas Kandagatla 		.simple_ch_prep_sm = true,
7616572522SSrinivas Kandagatla 	}, {
7716572522SSrinivas Kandagatla 		.num = 5,
7816572522SSrinivas Kandagatla 		.type = SDW_DPN_SIMPLE,
7916572522SSrinivas Kandagatla 		.min_ch = 1,
8016572522SSrinivas Kandagatla 		.max_ch = 4,
8116572522SSrinivas Kandagatla 		.simple_ch_prep_sm = true,
8216572522SSrinivas Kandagatla 	}
8316572522SSrinivas Kandagatla };
8416572522SSrinivas Kandagatla 
wcd938x_sdw_device_get(struct device_node * np)8516572522SSrinivas Kandagatla struct device *wcd938x_sdw_device_get(struct device_node *np)
8616572522SSrinivas Kandagatla {
8716572522SSrinivas Kandagatla 	return bus_find_device_by_of_node(&sdw_bus_type, np);
8816572522SSrinivas Kandagatla 
8916572522SSrinivas Kandagatla }
9016572522SSrinivas Kandagatla EXPORT_SYMBOL_GPL(wcd938x_sdw_device_get);
9116572522SSrinivas Kandagatla 
wcd938x_swr_get_current_bank(struct sdw_slave * sdev)9216572522SSrinivas Kandagatla int wcd938x_swr_get_current_bank(struct sdw_slave *sdev)
9316572522SSrinivas Kandagatla {
9416572522SSrinivas Kandagatla 	int bank;
9516572522SSrinivas Kandagatla 
9616572522SSrinivas Kandagatla 	bank  = sdw_read(sdev, SDW_SCP_CTRL);
9716572522SSrinivas Kandagatla 
9816572522SSrinivas Kandagatla 	return ((bank & 0x40) ? 1 : 0);
9916572522SSrinivas Kandagatla }
10016572522SSrinivas Kandagatla EXPORT_SYMBOL_GPL(wcd938x_swr_get_current_bank);
10116572522SSrinivas Kandagatla 
wcd938x_sdw_hw_params(struct wcd938x_sdw_priv * wcd,struct snd_pcm_substream * substream,struct snd_pcm_hw_params * params,struct snd_soc_dai * dai)10216572522SSrinivas Kandagatla int wcd938x_sdw_hw_params(struct wcd938x_sdw_priv *wcd,
10316572522SSrinivas Kandagatla 			  struct snd_pcm_substream *substream,
10416572522SSrinivas Kandagatla 			  struct snd_pcm_hw_params *params,
10516572522SSrinivas Kandagatla 			  struct snd_soc_dai *dai)
10616572522SSrinivas Kandagatla {
10716572522SSrinivas Kandagatla 	struct sdw_port_config port_config[WCD938X_MAX_SWR_PORTS];
10816572522SSrinivas Kandagatla 	unsigned long ch_mask;
10916572522SSrinivas Kandagatla 	int i, j;
11016572522SSrinivas Kandagatla 
11116572522SSrinivas Kandagatla 	wcd->sconfig.ch_count = 1;
11216572522SSrinivas Kandagatla 	wcd->active_ports = 0;
11316572522SSrinivas Kandagatla 	for (i = 0; i < WCD938X_MAX_SWR_PORTS; i++) {
11416572522SSrinivas Kandagatla 		ch_mask = wcd->port_config[i].ch_mask;
11516572522SSrinivas Kandagatla 
11616572522SSrinivas Kandagatla 		if (!ch_mask)
11716572522SSrinivas Kandagatla 			continue;
11816572522SSrinivas Kandagatla 
11916572522SSrinivas Kandagatla 		for_each_set_bit(j, &ch_mask, 4)
12016572522SSrinivas Kandagatla 			wcd->sconfig.ch_count++;
12116572522SSrinivas Kandagatla 
12216572522SSrinivas Kandagatla 		port_config[wcd->active_ports] = wcd->port_config[i];
12316572522SSrinivas Kandagatla 		wcd->active_ports++;
12416572522SSrinivas Kandagatla 	}
12516572522SSrinivas Kandagatla 
12616572522SSrinivas Kandagatla 	wcd->sconfig.bps = 1;
12716572522SSrinivas Kandagatla 	wcd->sconfig.frame_rate =  params_rate(params);
12816572522SSrinivas Kandagatla 	if (wcd->is_tx)
12916572522SSrinivas Kandagatla 		wcd->sconfig.direction = SDW_DATA_DIR_TX;
13016572522SSrinivas Kandagatla 	else
13116572522SSrinivas Kandagatla 		wcd->sconfig.direction = SDW_DATA_DIR_RX;
13216572522SSrinivas Kandagatla 
13316572522SSrinivas Kandagatla 	wcd->sconfig.type = SDW_STREAM_PCM;
13416572522SSrinivas Kandagatla 
13516572522SSrinivas Kandagatla 	return sdw_stream_add_slave(wcd->sdev, &wcd->sconfig,
13616572522SSrinivas Kandagatla 				    &port_config[0], wcd->active_ports,
13716572522SSrinivas Kandagatla 				    wcd->sruntime);
13816572522SSrinivas Kandagatla }
13916572522SSrinivas Kandagatla EXPORT_SYMBOL_GPL(wcd938x_sdw_hw_params);
14016572522SSrinivas Kandagatla 
wcd938x_sdw_free(struct wcd938x_sdw_priv * wcd,struct snd_pcm_substream * substream,struct snd_soc_dai * dai)14116572522SSrinivas Kandagatla int wcd938x_sdw_free(struct wcd938x_sdw_priv *wcd,
14216572522SSrinivas Kandagatla 		     struct snd_pcm_substream *substream,
14316572522SSrinivas Kandagatla 		     struct snd_soc_dai *dai)
14416572522SSrinivas Kandagatla {
14516572522SSrinivas Kandagatla 	sdw_stream_remove_slave(wcd->sdev, wcd->sruntime);
14616572522SSrinivas Kandagatla 
14716572522SSrinivas Kandagatla 	return 0;
14816572522SSrinivas Kandagatla }
14916572522SSrinivas Kandagatla EXPORT_SYMBOL_GPL(wcd938x_sdw_free);
15016572522SSrinivas Kandagatla 
wcd938x_sdw_set_sdw_stream(struct wcd938x_sdw_priv * wcd,struct snd_soc_dai * dai,void * stream,int direction)15116572522SSrinivas Kandagatla int wcd938x_sdw_set_sdw_stream(struct wcd938x_sdw_priv *wcd,
15216572522SSrinivas Kandagatla 			       struct snd_soc_dai *dai,
15316572522SSrinivas Kandagatla 			       void *stream, int direction)
15416572522SSrinivas Kandagatla {
15516572522SSrinivas Kandagatla 	wcd->sruntime = stream;
15616572522SSrinivas Kandagatla 
15716572522SSrinivas Kandagatla 	return 0;
15816572522SSrinivas Kandagatla }
15916572522SSrinivas Kandagatla EXPORT_SYMBOL_GPL(wcd938x_sdw_set_sdw_stream);
16016572522SSrinivas Kandagatla 
wcd9380_update_status(struct sdw_slave * slave,enum sdw_slave_status status)16116572522SSrinivas Kandagatla static int wcd9380_update_status(struct sdw_slave *slave,
16216572522SSrinivas Kandagatla 				 enum sdw_slave_status status)
16316572522SSrinivas Kandagatla {
16484822215SKrzysztof Kozlowski 	struct wcd938x_sdw_priv *wcd = dev_get_drvdata(&slave->dev);
16584822215SKrzysztof Kozlowski 
16684822215SKrzysztof Kozlowski 	if (wcd->regmap && (status == SDW_SLAVE_ATTACHED)) {
16784822215SKrzysztof Kozlowski 		/* Write out any cached changes that happened between probe and attach */
16884822215SKrzysztof Kozlowski 		regcache_cache_only(wcd->regmap, false);
16984822215SKrzysztof Kozlowski 		return regcache_sync(wcd->regmap);
17084822215SKrzysztof Kozlowski 	}
17184822215SKrzysztof Kozlowski 
17216572522SSrinivas Kandagatla 	return 0;
17316572522SSrinivas Kandagatla }
17416572522SSrinivas Kandagatla 
wcd9380_bus_config(struct sdw_slave * slave,struct sdw_bus_params * params)17516572522SSrinivas Kandagatla static int wcd9380_bus_config(struct sdw_slave *slave,
17616572522SSrinivas Kandagatla 			      struct sdw_bus_params *params)
17716572522SSrinivas Kandagatla {
17816572522SSrinivas Kandagatla 	sdw_write(slave, SWRS_SCP_HOST_CLK_DIV2_CTL_BANK(params->next_bank),  0x01);
17916572522SSrinivas Kandagatla 
18016572522SSrinivas Kandagatla 	return 0;
18116572522SSrinivas Kandagatla }
18216572522SSrinivas Kandagatla 
wcd9380_interrupt_callback(struct sdw_slave * slave,struct sdw_slave_intr_status * status)18316572522SSrinivas Kandagatla static int wcd9380_interrupt_callback(struct sdw_slave *slave,
18416572522SSrinivas Kandagatla 				      struct sdw_slave_intr_status *status)
18516572522SSrinivas Kandagatla {
18616572522SSrinivas Kandagatla 	struct wcd938x_sdw_priv *wcd = dev_get_drvdata(&slave->dev);
187b90d9398SSrinivas Kandagatla 	struct irq_domain *slave_irq = wcd->slave_irq;
188b90d9398SSrinivas Kandagatla 	u32 sts1, sts2, sts3;
18916572522SSrinivas Kandagatla 
190b90d9398SSrinivas Kandagatla 	do {
191b90d9398SSrinivas Kandagatla 		handle_nested_irq(irq_find_mapping(slave_irq, 0));
19284822215SKrzysztof Kozlowski 		regmap_read(wcd->regmap, WCD938X_DIGITAL_INTR_STATUS_0, &sts1);
19384822215SKrzysztof Kozlowski 		regmap_read(wcd->regmap, WCD938X_DIGITAL_INTR_STATUS_1, &sts2);
19484822215SKrzysztof Kozlowski 		regmap_read(wcd->regmap, WCD938X_DIGITAL_INTR_STATUS_2, &sts3);
195b90d9398SSrinivas Kandagatla 
196b90d9398SSrinivas Kandagatla 	} while (sts1 || sts2 || sts3);
197b90d9398SSrinivas Kandagatla 
198b90d9398SSrinivas Kandagatla 	return IRQ_HANDLED;
19916572522SSrinivas Kandagatla }
20016572522SSrinivas Kandagatla 
20184822215SKrzysztof Kozlowski static const struct reg_default wcd938x_defaults[] = {
20284822215SKrzysztof Kozlowski 	{WCD938X_ANA_PAGE_REGISTER,                            0x00},
20384822215SKrzysztof Kozlowski 	{WCD938X_ANA_BIAS,                                     0x00},
20484822215SKrzysztof Kozlowski 	{WCD938X_ANA_RX_SUPPLIES,                              0x00},
20584822215SKrzysztof Kozlowski 	{WCD938X_ANA_HPH,                                      0x0C},
20684822215SKrzysztof Kozlowski 	{WCD938X_ANA_EAR,                                      0x00},
20784822215SKrzysztof Kozlowski 	{WCD938X_ANA_EAR_COMPANDER_CTL,                        0x02},
20884822215SKrzysztof Kozlowski 	{WCD938X_ANA_TX_CH1,                                   0x20},
20984822215SKrzysztof Kozlowski 	{WCD938X_ANA_TX_CH2,                                   0x00},
21084822215SKrzysztof Kozlowski 	{WCD938X_ANA_TX_CH3,                                   0x20},
21184822215SKrzysztof Kozlowski 	{WCD938X_ANA_TX_CH4,                                   0x00},
21284822215SKrzysztof Kozlowski 	{WCD938X_ANA_MICB1_MICB2_DSP_EN_LOGIC,                 0x00},
21384822215SKrzysztof Kozlowski 	{WCD938X_ANA_MICB3_DSP_EN_LOGIC,                       0x00},
21484822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_MECH,                                0x39},
21584822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_ELECT,                               0x08},
21684822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_ZDET,                                0x00},
21784822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_RESULT_1,                            0x00},
21884822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_RESULT_2,                            0x00},
21984822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_RESULT_3,                            0x00},
22084822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_BTN0,                                0x00},
22184822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_BTN1,                                0x10},
22284822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_BTN2,                                0x20},
22384822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_BTN3,                                0x30},
22484822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_BTN4,                                0x40},
22584822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_BTN5,                                0x50},
22684822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_BTN6,                                0x60},
22784822215SKrzysztof Kozlowski 	{WCD938X_ANA_MBHC_BTN7,                                0x70},
22884822215SKrzysztof Kozlowski 	{WCD938X_ANA_MICB1,                                    0x10},
22984822215SKrzysztof Kozlowski 	{WCD938X_ANA_MICB2,                                    0x10},
23084822215SKrzysztof Kozlowski 	{WCD938X_ANA_MICB2_RAMP,                               0x00},
23184822215SKrzysztof Kozlowski 	{WCD938X_ANA_MICB3,                                    0x10},
23284822215SKrzysztof Kozlowski 	{WCD938X_ANA_MICB4,                                    0x10},
23384822215SKrzysztof Kozlowski 	{WCD938X_BIAS_CTL,                                     0x2A},
23484822215SKrzysztof Kozlowski 	{WCD938X_BIAS_VBG_FINE_ADJ,                            0x55},
23584822215SKrzysztof Kozlowski 	{WCD938X_LDOL_VDDCX_ADJUST,                            0x01},
23684822215SKrzysztof Kozlowski 	{WCD938X_LDOL_DISABLE_LDOL,                            0x00},
23784822215SKrzysztof Kozlowski 	{WCD938X_MBHC_CTL_CLK,                                 0x00},
23884822215SKrzysztof Kozlowski 	{WCD938X_MBHC_CTL_ANA,                                 0x00},
23984822215SKrzysztof Kozlowski 	{WCD938X_MBHC_CTL_SPARE_1,                             0x00},
24084822215SKrzysztof Kozlowski 	{WCD938X_MBHC_CTL_SPARE_2,                             0x00},
24184822215SKrzysztof Kozlowski 	{WCD938X_MBHC_CTL_BCS,                                 0x00},
24284822215SKrzysztof Kozlowski 	{WCD938X_MBHC_MOISTURE_DET_FSM_STATUS,                 0x00},
24384822215SKrzysztof Kozlowski 	{WCD938X_MBHC_TEST_CTL,                                0x00},
24484822215SKrzysztof Kozlowski 	{WCD938X_LDOH_MODE,                                    0x2B},
24584822215SKrzysztof Kozlowski 	{WCD938X_LDOH_BIAS,                                    0x68},
24684822215SKrzysztof Kozlowski 	{WCD938X_LDOH_STB_LOADS,                               0x00},
24784822215SKrzysztof Kozlowski 	{WCD938X_LDOH_SLOWRAMP,                                0x50},
24884822215SKrzysztof Kozlowski 	{WCD938X_MICB1_TEST_CTL_1,                             0x1A},
24984822215SKrzysztof Kozlowski 	{WCD938X_MICB1_TEST_CTL_2,                             0x00},
25084822215SKrzysztof Kozlowski 	{WCD938X_MICB1_TEST_CTL_3,                             0xA4},
25184822215SKrzysztof Kozlowski 	{WCD938X_MICB2_TEST_CTL_1,                             0x1A},
25284822215SKrzysztof Kozlowski 	{WCD938X_MICB2_TEST_CTL_2,                             0x00},
25384822215SKrzysztof Kozlowski 	{WCD938X_MICB2_TEST_CTL_3,                             0x24},
25484822215SKrzysztof Kozlowski 	{WCD938X_MICB3_TEST_CTL_1,                             0x1A},
25584822215SKrzysztof Kozlowski 	{WCD938X_MICB3_TEST_CTL_2,                             0x00},
25684822215SKrzysztof Kozlowski 	{WCD938X_MICB3_TEST_CTL_3,                             0xA4},
25784822215SKrzysztof Kozlowski 	{WCD938X_MICB4_TEST_CTL_1,                             0x1A},
25884822215SKrzysztof Kozlowski 	{WCD938X_MICB4_TEST_CTL_2,                             0x00},
25984822215SKrzysztof Kozlowski 	{WCD938X_MICB4_TEST_CTL_3,                             0xA4},
26084822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_ADC_VCM,                               0x39},
26184822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_BIAS_ATEST,                            0xE0},
26284822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_SPARE1,                                0x00},
26384822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_SPARE2,                                0x00},
26484822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_TXFE_DIV_CTL,                          0x22},
26584822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_TXFE_DIV_START,                        0x00},
26684822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_SPARE3,                                0x00},
26784822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_SPARE4,                                0x00},
26884822215SKrzysztof Kozlowski 	{WCD938X_TX_1_2_TEST_EN,                               0xCC},
26984822215SKrzysztof Kozlowski 	{WCD938X_TX_1_2_ADC_IB,                                0xE9},
27084822215SKrzysztof Kozlowski 	{WCD938X_TX_1_2_ATEST_REFCTL,                          0x0A},
27184822215SKrzysztof Kozlowski 	{WCD938X_TX_1_2_TEST_CTL,                              0x38},
27284822215SKrzysztof Kozlowski 	{WCD938X_TX_1_2_TEST_BLK_EN1,                          0xFF},
27384822215SKrzysztof Kozlowski 	{WCD938X_TX_1_2_TXFE1_CLKDIV,                          0x00},
27484822215SKrzysztof Kozlowski 	{WCD938X_TX_1_2_SAR2_ERR,                              0x00},
27584822215SKrzysztof Kozlowski 	{WCD938X_TX_1_2_SAR1_ERR,                              0x00},
27684822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_TEST_EN,                               0xCC},
27784822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_ADC_IB,                                0xE9},
27884822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_ATEST_REFCTL,                          0x0A},
27984822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_TEST_CTL,                              0x38},
28084822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_TEST_BLK_EN3,                          0xFF},
28184822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_TXFE3_CLKDIV,                          0x00},
28284822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_SAR4_ERR,                              0x00},
28384822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_SAR3_ERR,                              0x00},
28484822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_TEST_BLK_EN2,                          0xFB},
28584822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_TXFE2_CLKDIV,                          0x00},
28684822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_SPARE1,                                0x00},
28784822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_TEST_BLK_EN4,                          0xFB},
28884822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_TXFE4_CLKDIV,                          0x00},
28984822215SKrzysztof Kozlowski 	{WCD938X_TX_3_4_SPARE2,                                0x00},
29084822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_MODE_1,                                0x40},
29184822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_MODE_2,                                0x3A},
29284822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_MODE_3,                                0x00},
29384822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_CTRL_VCL_1,                            0x70},
29484822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_CTRL_VCL_2,                            0x82},
29584822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_CTRL_CCL_1,                            0x31},
29684822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_CTRL_CCL_2,                            0x80},
29784822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_CTRL_CCL_3,                            0x80},
29884822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_CTRL_CCL_4,                            0x51},
29984822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_CTRL_CCL_5,                            0x00},
30084822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_BUCK_TMUX_A_D,                         0x00},
30184822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_BUCK_SW_DRV_CNTL,                      0x77},
30284822215SKrzysztof Kozlowski 	{WCD938X_CLASSH_SPARE,                                 0x00},
30384822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_EN,                                   0x4E},
30484822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEG_CTRL_1,                          0x0B},
30584822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEG_CTRL_2,                          0x45},
30684822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEG_CTRL_3,                          0x74},
30784822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEG_CTRL_4,                          0x7F},
30884822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEG_CTRL_5,                          0x83},
30984822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEG_CTRL_6,                          0x98},
31084822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEG_CTRL_7,                          0xA9},
31184822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEG_CTRL_8,                          0x68},
31284822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEG_CTRL_9,                          0x64},
31384822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEGDAC_CTRL_1,                       0xED},
31484822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEGDAC_CTRL_2,                       0xF0},
31584822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_VNEGDAC_CTRL_3,                       0xA6},
31684822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_CTRL_1,                               0x65},
31784822215SKrzysztof Kozlowski 	{WCD938X_FLYBACK_TEST_CTL,                             0x00},
31884822215SKrzysztof Kozlowski 	{WCD938X_RX_AUX_SW_CTL,                                0x00},
31984822215SKrzysztof Kozlowski 	{WCD938X_RX_PA_AUX_IN_CONN,                            0x01},
32084822215SKrzysztof Kozlowski 	{WCD938X_RX_TIMER_DIV,                                 0x32},
32184822215SKrzysztof Kozlowski 	{WCD938X_RX_OCP_CTL,                                   0x1F},
32284822215SKrzysztof Kozlowski 	{WCD938X_RX_OCP_COUNT,                                 0x77},
32384822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_EAR_DAC,                              0xA0},
32484822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_EAR_AMP,                              0xAA},
32584822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_HPH_LDO,                              0xA9},
32684822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_HPH_PA,                               0xAA},
32784822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_HPH_RDACBUFF_CNP2,                    0x8A},
32884822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_HPH_RDAC_LDO,                         0x88},
32984822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_HPH_CNP1,                             0x82},
33084822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_HPH_LOWPOWER,                         0x82},
33184822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_AUX_DAC,                              0xA0},
33284822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_AUX_AMP,                              0xAA},
33384822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_VNEGDAC_BLEEDER,                      0x50},
33484822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_MISC,                                 0x00},
33584822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_BUCK_RST,                             0x08},
33684822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_BUCK_VREF_ERRAMP,                     0x44},
33784822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_FLYB_ERRAMP,                          0x40},
33884822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_FLYB_BUFF,                            0xAA},
33984822215SKrzysztof Kozlowski 	{WCD938X_RX_BIAS_FLYB_MID_RST,                         0x14},
34084822215SKrzysztof Kozlowski 	{WCD938X_HPH_L_STATUS,                                 0x04},
34184822215SKrzysztof Kozlowski 	{WCD938X_HPH_R_STATUS,                                 0x04},
34284822215SKrzysztof Kozlowski 	{WCD938X_HPH_CNP_EN,                                   0x80},
34384822215SKrzysztof Kozlowski 	{WCD938X_HPH_CNP_WG_CTL,                               0x9A},
34484822215SKrzysztof Kozlowski 	{WCD938X_HPH_CNP_WG_TIME,                              0x14},
34584822215SKrzysztof Kozlowski 	{WCD938X_HPH_OCP_CTL,                                  0x28},
34684822215SKrzysztof Kozlowski 	{WCD938X_HPH_AUTO_CHOP,                                0x16},
34784822215SKrzysztof Kozlowski 	{WCD938X_HPH_CHOP_CTL,                                 0x83},
34884822215SKrzysztof Kozlowski 	{WCD938X_HPH_PA_CTL1,                                  0x46},
34984822215SKrzysztof Kozlowski 	{WCD938X_HPH_PA_CTL2,                                  0x50},
35084822215SKrzysztof Kozlowski 	{WCD938X_HPH_L_EN,                                     0x80},
35184822215SKrzysztof Kozlowski 	{WCD938X_HPH_L_TEST,                                   0xE0},
35284822215SKrzysztof Kozlowski 	{WCD938X_HPH_L_ATEST,                                  0x50},
35384822215SKrzysztof Kozlowski 	{WCD938X_HPH_R_EN,                                     0x80},
35484822215SKrzysztof Kozlowski 	{WCD938X_HPH_R_TEST,                                   0xE0},
35584822215SKrzysztof Kozlowski 	{WCD938X_HPH_R_ATEST,                                  0x54},
35684822215SKrzysztof Kozlowski 	{WCD938X_HPH_RDAC_CLK_CTL1,                            0x99},
35784822215SKrzysztof Kozlowski 	{WCD938X_HPH_RDAC_CLK_CTL2,                            0x9B},
35884822215SKrzysztof Kozlowski 	{WCD938X_HPH_RDAC_LDO_CTL,                             0x33},
35984822215SKrzysztof Kozlowski 	{WCD938X_HPH_RDAC_CHOP_CLK_LP_CTL,                     0x00},
36084822215SKrzysztof Kozlowski 	{WCD938X_HPH_REFBUFF_UHQA_CTL,                         0x68},
36184822215SKrzysztof Kozlowski 	{WCD938X_HPH_REFBUFF_LP_CTL,                           0x0E},
36284822215SKrzysztof Kozlowski 	{WCD938X_HPH_L_DAC_CTL,                                0x20},
36384822215SKrzysztof Kozlowski 	{WCD938X_HPH_R_DAC_CTL,                                0x20},
36484822215SKrzysztof Kozlowski 	{WCD938X_HPH_SURGE_HPHLR_SURGE_COMP_SEL,               0x55},
36584822215SKrzysztof Kozlowski 	{WCD938X_HPH_SURGE_HPHLR_SURGE_EN,                     0x19},
36684822215SKrzysztof Kozlowski 	{WCD938X_HPH_SURGE_HPHLR_SURGE_MISC1,                  0xA0},
36784822215SKrzysztof Kozlowski 	{WCD938X_HPH_SURGE_HPHLR_SURGE_STATUS,                 0x00},
36884822215SKrzysztof Kozlowski 	{WCD938X_EAR_EAR_EN_REG,                               0x22},
36984822215SKrzysztof Kozlowski 	{WCD938X_EAR_EAR_PA_CON,                               0x44},
37084822215SKrzysztof Kozlowski 	{WCD938X_EAR_EAR_SP_CON,                               0xDB},
37184822215SKrzysztof Kozlowski 	{WCD938X_EAR_EAR_DAC_CON,                              0x80},
37284822215SKrzysztof Kozlowski 	{WCD938X_EAR_EAR_CNP_FSM_CON,                          0xB2},
37384822215SKrzysztof Kozlowski 	{WCD938X_EAR_TEST_CTL,                                 0x00},
37484822215SKrzysztof Kozlowski 	{WCD938X_EAR_STATUS_REG_1,                             0x00},
37584822215SKrzysztof Kozlowski 	{WCD938X_EAR_STATUS_REG_2,                             0x08},
37684822215SKrzysztof Kozlowski 	{WCD938X_ANA_NEW_PAGE_REGISTER,                        0x00},
37784822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_ANA_HPH2,                             0x00},
37884822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_ANA_HPH3,                             0x00},
37984822215SKrzysztof Kozlowski 	{WCD938X_SLEEP_CTL,                                    0x16},
38084822215SKrzysztof Kozlowski 	{WCD938X_SLEEP_WATCHDOG_CTL,                           0x00},
38184822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_ELECT_REM_CLAMP_CTL,                 0x00},
38284822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_CTL_1,                               0x02},
38384822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_CTL_2,                               0x05},
38484822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_PLUG_DETECT_CTL,                     0xE9},
38584822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_ZDET_ANA_CTL,                        0x0F},
38684822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_ZDET_RAMP_CTL,                       0x00},
38784822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_FSM_STATUS,                          0x00},
38884822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_ADC_RESULT,                          0x00},
38984822215SKrzysztof Kozlowski 	{WCD938X_TX_NEW_AMIC_MUX_CFG,                          0x00},
39084822215SKrzysztof Kozlowski 	{WCD938X_AUX_AUXPA,                                    0x00},
39184822215SKrzysztof Kozlowski 	{WCD938X_LDORXTX_MODE,                                 0x0C},
39284822215SKrzysztof Kozlowski 	{WCD938X_LDORXTX_CONFIG,                               0x10},
39384822215SKrzysztof Kozlowski 	{WCD938X_DIE_CRACK_DIE_CRK_DET_EN,                     0x00},
39484822215SKrzysztof Kozlowski 	{WCD938X_DIE_CRACK_DIE_CRK_DET_OUT,                    0x00},
39584822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_RDAC_GAIN_CTL,                    0x40},
39684822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_L,                   0x81},
39784822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_RDAC_VREF_CTL,                    0x10},
39884822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_RDAC_OVERRIDE_CTL,                0x00},
39984822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R,                   0x81},
40084822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_PA_MISC1,                         0x22},
40184822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_PA_MISC2,                         0x00},
40284822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_PA_RDAC_MISC,                     0x00},
40384822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_HPH_TIMER1,                       0xFE},
40484822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_HPH_TIMER2,                       0x02},
40584822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_HPH_TIMER3,                       0x4E},
40684822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_HPH_TIMER4,                       0x54},
40784822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_PA_RDAC_MISC2,                    0x00},
40884822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_PA_RDAC_MISC3,                    0x00},
40984822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_L_NEW,               0x90},
41084822215SKrzysztof Kozlowski 	{WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R_NEW,               0x90},
41184822215SKrzysztof Kozlowski 	{WCD938X_RX_NEW_INT_HPH_RDAC_BIAS_LOHIFI,              0x62},
41284822215SKrzysztof Kozlowski 	{WCD938X_RX_NEW_INT_HPH_RDAC_BIAS_ULP,                 0x01},
41384822215SKrzysztof Kozlowski 	{WCD938X_RX_NEW_INT_HPH_RDAC_LDO_LP,                   0x11},
41484822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_INT_MOISTURE_DET_DC_CTRL,            0x57},
41584822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_INT_MOISTURE_DET_POLLING_CTRL,       0x01},
41684822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_INT_MECH_DET_CURRENT,                0x00},
41784822215SKrzysztof Kozlowski 	{WCD938X_MBHC_NEW_INT_SPARE_2,                         0x00},
41884822215SKrzysztof Kozlowski 	{WCD938X_EAR_INT_NEW_EAR_CHOPPER_CON,                  0xA8},
41984822215SKrzysztof Kozlowski 	{WCD938X_EAR_INT_NEW_CNP_VCM_CON1,                     0x42},
42084822215SKrzysztof Kozlowski 	{WCD938X_EAR_INT_NEW_CNP_VCM_CON2,                     0x22},
42184822215SKrzysztof Kozlowski 	{WCD938X_EAR_INT_NEW_EAR_DYNAMIC_BIAS,                 0x00},
42284822215SKrzysztof Kozlowski 	{WCD938X_AUX_INT_EN_REG,                               0x00},
42384822215SKrzysztof Kozlowski 	{WCD938X_AUX_INT_PA_CTRL,                              0x06},
42484822215SKrzysztof Kozlowski 	{WCD938X_AUX_INT_SP_CTRL,                              0xD2},
42584822215SKrzysztof Kozlowski 	{WCD938X_AUX_INT_DAC_CTRL,                             0x80},
42684822215SKrzysztof Kozlowski 	{WCD938X_AUX_INT_CLK_CTRL,                             0x50},
42784822215SKrzysztof Kozlowski 	{WCD938X_AUX_INT_TEST_CTRL,                            0x00},
42884822215SKrzysztof Kozlowski 	{WCD938X_AUX_INT_STATUS_REG,                           0x00},
42984822215SKrzysztof Kozlowski 	{WCD938X_AUX_INT_MISC,                                 0x00},
43084822215SKrzysztof Kozlowski 	{WCD938X_LDORXTX_INT_BIAS,                             0x6E},
43184822215SKrzysztof Kozlowski 	{WCD938X_LDORXTX_INT_STB_LOADS_DTEST,                  0x50},
43284822215SKrzysztof Kozlowski 	{WCD938X_LDORXTX_INT_TEST0,                            0x1C},
43384822215SKrzysztof Kozlowski 	{WCD938X_LDORXTX_INT_STARTUP_TIMER,                    0xFF},
43484822215SKrzysztof Kozlowski 	{WCD938X_LDORXTX_INT_TEST1,                            0x1F},
43584822215SKrzysztof Kozlowski 	{WCD938X_LDORXTX_INT_STATUS,                           0x00},
43684822215SKrzysztof Kozlowski 	{WCD938X_SLEEP_INT_WATCHDOG_CTL_1,                     0x0A},
43784822215SKrzysztof Kozlowski 	{WCD938X_SLEEP_INT_WATCHDOG_CTL_2,                     0x0A},
43884822215SKrzysztof Kozlowski 	{WCD938X_DIE_CRACK_INT_DIE_CRK_DET_INT1,               0x02},
43984822215SKrzysztof Kozlowski 	{WCD938X_DIE_CRACK_INT_DIE_CRK_DET_INT2,               0x60},
44084822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L2,               0xFF},
44184822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L1,               0x7F},
44284822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L0,               0x3F},
44384822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_ULP1P2M,          0x1F},
44484822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_ULP0P6M,          0x0F},
44584822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_L2L1,          0xD7},
44684822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_L0,            0xC8},
44784822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_ULP,           0xC6},
44884822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_L2L1,      0xD5},
44984822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_L0,        0xCA},
45084822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_ULP,       0x05},
45184822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_L2L1L0,    0xA5},
45284822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_ULP,       0x13},
45384822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXADC_SCBIAS_L2L1,             0x88},
45484822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXADC_SCBIAS_L0ULP,            0x42},
45584822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXADC_INT_L2,                  0xFF},
45684822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXADC_INT_L1,                  0x64},
45784822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXADC_INT_L0,                  0x64},
45884822215SKrzysztof Kozlowski 	{WCD938X_TX_COM_NEW_INT_TXADC_INT_ULP,                 0x77},
45984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAGE_REGISTER,                        0x00},
46084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CHIP_ID0,                             0x00},
46184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CHIP_ID1,                             0x00},
46284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CHIP_ID2,                             0x0D},
46384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CHIP_ID3,                             0x01},
46484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_TX_CLK_RATE,                      0x00},
46584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_RST_CTL,                          0x03},
46684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TOP_CLK_CFG,                          0x00},
46784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_ANA_CLK_CTL,                      0x00},
46884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_DIG_CLK_CTL,                      0xF0},
46984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_RST_EN,                           0x00},
47084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_PATH_MODE,                        0x55},
47184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_RX_RST,                           0x00},
47284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_RX0_CTL,                          0xFC},
47384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_RX1_CTL,                          0xFC},
47484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_RX2_CTL,                          0xFC},
47584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_TX_ANA_MODE_0_1,                  0x00},
47684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_TX_ANA_MODE_2_3,                  0x00},
47784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_COMP_CTL_0,                       0x00},
47884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_ANA_TX_CLK_CTL,                   0x1E},
47984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A1_0,                     0x00},
48084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A1_1,                     0x01},
48184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A2_0,                     0x63},
48284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A2_1,                     0x04},
48384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A3_0,                     0xAC},
48484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A3_1,                     0x04},
48584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A4_0,                     0x1A},
48684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A4_1,                     0x03},
48784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A5_0,                     0xBC},
48884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A5_1,                     0x02},
48984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A6_0,                     0xC7},
49084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_A7_0,                     0xF8},
49184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_C_0,                      0x47},
49284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_C_1,                      0x43},
49384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_C_2,                      0xB1},
49484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_C_3,                      0x17},
49584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_R1,                       0x4D},
49684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_R2,                       0x29},
49784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_R3,                       0x34},
49884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_R4,                       0x59},
49984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_R5,                       0x66},
50084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_R6,                       0x87},
50184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_DSM_R7,                       0x64},
50284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A1_0,                     0x00},
50384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A1_1,                     0x01},
50484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A2_0,                     0x96},
50584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A2_1,                     0x09},
50684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A3_0,                     0xAB},
50784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A3_1,                     0x05},
50884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A4_0,                     0x1C},
50984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A4_1,                     0x02},
51084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A5_0,                     0x17},
51184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A5_1,                     0x02},
51284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A6_0,                     0xAA},
51384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_A7_0,                     0xE3},
51484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_C_0,                      0x69},
51584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_C_1,                      0x54},
51684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_C_2,                      0x02},
51784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_C_3,                      0x15},
51884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_R1,                       0xA4},
51984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_R2,                       0xB5},
52084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_R3,                       0x86},
52184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_R4,                       0x85},
52284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_R5,                       0xAA},
52384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_R6,                       0xE2},
52484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_DSM_R7,                       0x62},
52584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_GAIN_RX_0,                    0x55},
52684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_GAIN_RX_1,                    0xA9},
52784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_0,                   0x3D},
52884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_1,                   0x2E},
52984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_2,                   0x01},
53084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_0,                   0x00},
53184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_1,                   0xFC},
53284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_2,                   0x01},
53384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_HPH_GAIN_CTL,                     0x00},
53484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AUX_GAIN_CTL,                     0x00},
53584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_EAR_PATH_CTL,                     0x00},
53684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_SWR_CLH,                          0x00},
53784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_CLH_BYP,                          0x00},
53884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_TX0_CTL,                          0x68},
53984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_TX1_CTL,                          0x68},
54084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_TX2_CTL,                          0x68},
54184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_TX_RST,                           0x00},
54284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_REQ_CTL,                          0x01},
54384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_RST,                              0x00},
54484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_AMIC_CTL,                         0x0F},
54584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_DMIC_CTL,                         0x04},
54684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_DMIC1_CTL,                        0x01},
54784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_DMIC2_CTL,                        0x01},
54884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_DMIC3_CTL,                        0x01},
54984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_DMIC4_CTL,                        0x01},
55084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_PRG_CTL,                        0x00},
55184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_CTL,                            0x2B},
55284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_DMIC_RATE_1_2,                    0x11},
55384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_DMIC_RATE_3_4,                    0x11},
55484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PDM_WD_CTL0,                          0x00},
55584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PDM_WD_CTL1,                          0x00},
55684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PDM_WD_CTL2,                          0x00},
55784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_MODE,                            0x00},
55884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_MASK_0,                          0xFF},
55984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_MASK_1,                          0xFF},
56084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_MASK_2,                          0x3F},
56184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_STATUS_0,                        0x00},
56284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_STATUS_1,                        0x00},
56384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_STATUS_2,                        0x00},
56484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_CLEAR_0,                         0x00},
56584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_CLEAR_1,                         0x00},
56684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_CLEAR_2,                         0x00},
56784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_LEVEL_0,                         0x00},
56884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_LEVEL_1,                         0x00},
56984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_LEVEL_2,                         0x00},
57084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_SET_0,                           0x00},
57184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_SET_1,                           0x00},
57284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_SET_2,                           0x00},
57384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_TEST_0,                          0x00},
57484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_TEST_1,                          0x00},
57584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_INTR_TEST_2,                          0x00},
57684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TX_MODE_DBG_EN,                       0x00},
57784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TX_MODE_DBG_0_1,                      0x00},
57884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TX_MODE_DBG_2_3,                      0x00},
57984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_LB_IN_SEL_CTL,                        0x00},
58084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_LOOP_BACK_MODE,                       0x00},
58184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_DAC_TEST,                         0x00},
58284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_HM_TEST_RX_0,                     0x40},
58384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_HM_TEST_TX_0,                     0x40},
58484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_HM_TEST_RX_1,                     0x00},
58584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_HM_TEST_TX_1,                     0x00},
58684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_HM_TEST_TX_2,                     0x00},
58784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_HM_TEST_0,                        0x00},
58884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SWR_HM_TEST_1,                        0x00},
58984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAD_CTL_SWR_0,                        0x8F},
59084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAD_CTL_SWR_1,                        0x06},
59184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_I2C_CTL,                              0x00},
59284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_CDC_TX_TANGGU_SW_MODE,                0x00},
59384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_TEST_CTL_0,                     0x00},
59484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_TEST_CTL_1,                     0x00},
59584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_T_DATA_0,                       0x00},
59684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_T_DATA_1,                       0x00},
59784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAD_CTL_PDM_RX0,                      0xF1},
59884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAD_CTL_PDM_RX1,                      0xF1},
59984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAD_CTL_PDM_TX0,                      0xF1},
60084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAD_CTL_PDM_TX1,                      0xF1},
60184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAD_CTL_PDM_TX2,                      0xF1},
60284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAD_INP_DIS_0,                        0x00},
60384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PAD_INP_DIS_1,                        0x00},
60484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_DRIVE_STRENGTH_0,                     0x00},
60584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_DRIVE_STRENGTH_1,                     0x00},
60684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_DRIVE_STRENGTH_2,                     0x00},
60784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_RX_DATA_EDGE_CTL,                     0x1F},
60884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TX_DATA_EDGE_CTL,                     0x80},
60984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_GPIO_MODE,                            0x00},
61084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PIN_CTL_OE,                           0x00},
61184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PIN_CTL_DATA_0,                       0x00},
61284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PIN_CTL_DATA_1,                       0x00},
61384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PIN_STATUS_0,                         0x00},
61484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_PIN_STATUS_1,                         0x00},
61584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_DIG_DEBUG_CTL,                        0x00},
61684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_DIG_DEBUG_EN,                         0x00},
61784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_ANA_CSR_DBG_ADD,                      0x00},
61884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_ANA_CSR_DBG_CTL,                      0x48},
61984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SSP_DBG,                              0x00},
62084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_MODE_STATUS_0,                        0x00},
62184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_MODE_STATUS_1,                        0x00},
62284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SPARE_0,                              0x00},
62384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SPARE_1,                              0x00},
62484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_SPARE_2,                              0x00},
62584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_0,                          0x00},
62684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_1,                          0xFF},
62784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_2,                          0xFF},
62884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_3,                          0xFF},
62984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_4,                          0xFF},
63084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_5,                          0xFF},
63184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_6,                          0xFF},
63284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_7,                          0xFF},
63384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_8,                          0xFF},
63484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_9,                          0xFF},
63584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_10,                         0xFF},
63684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_11,                         0xFF},
63784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_12,                         0xFF},
63884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_13,                         0xFF},
63984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_14,                         0xFF},
64084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_15,                         0xFF},
64184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_16,                         0xFF},
64284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_17,                         0xFF},
64384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_18,                         0xFF},
64484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_19,                         0xFF},
64584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_20,                         0x0E},
64684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_21,                         0x00},
64784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_22,                         0x00},
64884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_23,                         0xF8},
64984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_24,                         0x16},
65084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_25,                         0x00},
65184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_26,                         0x00},
65284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_27,                         0x00},
65384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_28,                         0x00},
65484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_29,                         0x00},
65584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_30,                         0x00},
65684822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_EFUSE_REG_31,                         0x00},
65784822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TX_REQ_FB_CTL_0,                      0x88},
65884822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TX_REQ_FB_CTL_1,                      0x88},
65984822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TX_REQ_FB_CTL_2,                      0x88},
66084822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TX_REQ_FB_CTL_3,                      0x88},
66184822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_TX_REQ_FB_CTL_4,                      0x88},
66284822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_DEM_BYPASS_DATA0,                     0x55},
66384822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_DEM_BYPASS_DATA1,                     0x55},
66484822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_DEM_BYPASS_DATA2,                     0x55},
66584822215SKrzysztof Kozlowski 	{WCD938X_DIGITAL_DEM_BYPASS_DATA3,                     0x01},
66684822215SKrzysztof Kozlowski };
66784822215SKrzysztof Kozlowski 
wcd938x_rdwr_register(struct device * dev,unsigned int reg)66884822215SKrzysztof Kozlowski static bool wcd938x_rdwr_register(struct device *dev, unsigned int reg)
66984822215SKrzysztof Kozlowski {
67084822215SKrzysztof Kozlowski 	switch (reg) {
67184822215SKrzysztof Kozlowski 	case WCD938X_ANA_PAGE_REGISTER:
67284822215SKrzysztof Kozlowski 	case WCD938X_ANA_BIAS:
67384822215SKrzysztof Kozlowski 	case WCD938X_ANA_RX_SUPPLIES:
67484822215SKrzysztof Kozlowski 	case WCD938X_ANA_HPH:
67584822215SKrzysztof Kozlowski 	case WCD938X_ANA_EAR:
67684822215SKrzysztof Kozlowski 	case WCD938X_ANA_EAR_COMPANDER_CTL:
67784822215SKrzysztof Kozlowski 	case WCD938X_ANA_TX_CH1:
67884822215SKrzysztof Kozlowski 	case WCD938X_ANA_TX_CH2:
67984822215SKrzysztof Kozlowski 	case WCD938X_ANA_TX_CH3:
68084822215SKrzysztof Kozlowski 	case WCD938X_ANA_TX_CH4:
68184822215SKrzysztof Kozlowski 	case WCD938X_ANA_MICB1_MICB2_DSP_EN_LOGIC:
68284822215SKrzysztof Kozlowski 	case WCD938X_ANA_MICB3_DSP_EN_LOGIC:
68384822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_MECH:
68484822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_ELECT:
68584822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_ZDET:
68684822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_BTN0:
68784822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_BTN1:
68884822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_BTN2:
68984822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_BTN3:
69084822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_BTN4:
69184822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_BTN5:
69284822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_BTN6:
69384822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_BTN7:
69484822215SKrzysztof Kozlowski 	case WCD938X_ANA_MICB1:
69584822215SKrzysztof Kozlowski 	case WCD938X_ANA_MICB2:
69684822215SKrzysztof Kozlowski 	case WCD938X_ANA_MICB2_RAMP:
69784822215SKrzysztof Kozlowski 	case WCD938X_ANA_MICB3:
69884822215SKrzysztof Kozlowski 	case WCD938X_ANA_MICB4:
69984822215SKrzysztof Kozlowski 	case WCD938X_BIAS_CTL:
70084822215SKrzysztof Kozlowski 	case WCD938X_BIAS_VBG_FINE_ADJ:
70184822215SKrzysztof Kozlowski 	case WCD938X_LDOL_VDDCX_ADJUST:
70284822215SKrzysztof Kozlowski 	case WCD938X_LDOL_DISABLE_LDOL:
70384822215SKrzysztof Kozlowski 	case WCD938X_MBHC_CTL_CLK:
70484822215SKrzysztof Kozlowski 	case WCD938X_MBHC_CTL_ANA:
70584822215SKrzysztof Kozlowski 	case WCD938X_MBHC_CTL_SPARE_1:
70684822215SKrzysztof Kozlowski 	case WCD938X_MBHC_CTL_SPARE_2:
70784822215SKrzysztof Kozlowski 	case WCD938X_MBHC_CTL_BCS:
70884822215SKrzysztof Kozlowski 	case WCD938X_MBHC_TEST_CTL:
70984822215SKrzysztof Kozlowski 	case WCD938X_LDOH_MODE:
71084822215SKrzysztof Kozlowski 	case WCD938X_LDOH_BIAS:
71184822215SKrzysztof Kozlowski 	case WCD938X_LDOH_STB_LOADS:
71284822215SKrzysztof Kozlowski 	case WCD938X_LDOH_SLOWRAMP:
71384822215SKrzysztof Kozlowski 	case WCD938X_MICB1_TEST_CTL_1:
71484822215SKrzysztof Kozlowski 	case WCD938X_MICB1_TEST_CTL_2:
71584822215SKrzysztof Kozlowski 	case WCD938X_MICB1_TEST_CTL_3:
71684822215SKrzysztof Kozlowski 	case WCD938X_MICB2_TEST_CTL_1:
71784822215SKrzysztof Kozlowski 	case WCD938X_MICB2_TEST_CTL_2:
71884822215SKrzysztof Kozlowski 	case WCD938X_MICB2_TEST_CTL_3:
71984822215SKrzysztof Kozlowski 	case WCD938X_MICB3_TEST_CTL_1:
72084822215SKrzysztof Kozlowski 	case WCD938X_MICB3_TEST_CTL_2:
72184822215SKrzysztof Kozlowski 	case WCD938X_MICB3_TEST_CTL_3:
72284822215SKrzysztof Kozlowski 	case WCD938X_MICB4_TEST_CTL_1:
72384822215SKrzysztof Kozlowski 	case WCD938X_MICB4_TEST_CTL_2:
72484822215SKrzysztof Kozlowski 	case WCD938X_MICB4_TEST_CTL_3:
72584822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_ADC_VCM:
72684822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_BIAS_ATEST:
72784822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_SPARE1:
72884822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_SPARE2:
72984822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_TXFE_DIV_CTL:
73084822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_TXFE_DIV_START:
73184822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_SPARE3:
73284822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_SPARE4:
73384822215SKrzysztof Kozlowski 	case WCD938X_TX_1_2_TEST_EN:
73484822215SKrzysztof Kozlowski 	case WCD938X_TX_1_2_ADC_IB:
73584822215SKrzysztof Kozlowski 	case WCD938X_TX_1_2_ATEST_REFCTL:
73684822215SKrzysztof Kozlowski 	case WCD938X_TX_1_2_TEST_CTL:
73784822215SKrzysztof Kozlowski 	case WCD938X_TX_1_2_TEST_BLK_EN1:
73884822215SKrzysztof Kozlowski 	case WCD938X_TX_1_2_TXFE1_CLKDIV:
73984822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_TEST_EN:
74084822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_ADC_IB:
74184822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_ATEST_REFCTL:
74284822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_TEST_CTL:
74384822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_TEST_BLK_EN3:
74484822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_TXFE3_CLKDIV:
74584822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_TEST_BLK_EN2:
74684822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_TXFE2_CLKDIV:
74784822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_SPARE1:
74884822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_TEST_BLK_EN4:
74984822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_TXFE4_CLKDIV:
75084822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_SPARE2:
75184822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_MODE_1:
75284822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_MODE_2:
75384822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_MODE_3:
75484822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_CTRL_VCL_1:
75584822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_CTRL_VCL_2:
75684822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_CTRL_CCL_1:
75784822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_CTRL_CCL_2:
75884822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_CTRL_CCL_3:
75984822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_CTRL_CCL_4:
76084822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_CTRL_CCL_5:
76184822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_BUCK_TMUX_A_D:
76284822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_BUCK_SW_DRV_CNTL:
76384822215SKrzysztof Kozlowski 	case WCD938X_CLASSH_SPARE:
76484822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_EN:
76584822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEG_CTRL_1:
76684822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEG_CTRL_2:
76784822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEG_CTRL_3:
76884822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEG_CTRL_4:
76984822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEG_CTRL_5:
77084822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEG_CTRL_6:
77184822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEG_CTRL_7:
77284822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEG_CTRL_8:
77384822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEG_CTRL_9:
77484822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEGDAC_CTRL_1:
77584822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEGDAC_CTRL_2:
77684822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_VNEGDAC_CTRL_3:
77784822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_CTRL_1:
77884822215SKrzysztof Kozlowski 	case WCD938X_FLYBACK_TEST_CTL:
77984822215SKrzysztof Kozlowski 	case WCD938X_RX_AUX_SW_CTL:
78084822215SKrzysztof Kozlowski 	case WCD938X_RX_PA_AUX_IN_CONN:
78184822215SKrzysztof Kozlowski 	case WCD938X_RX_TIMER_DIV:
78284822215SKrzysztof Kozlowski 	case WCD938X_RX_OCP_CTL:
78384822215SKrzysztof Kozlowski 	case WCD938X_RX_OCP_COUNT:
78484822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_EAR_DAC:
78584822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_EAR_AMP:
78684822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_HPH_LDO:
78784822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_HPH_PA:
78884822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_HPH_RDACBUFF_CNP2:
78984822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_HPH_RDAC_LDO:
79084822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_HPH_CNP1:
79184822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_HPH_LOWPOWER:
79284822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_AUX_DAC:
79384822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_AUX_AMP:
79484822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_VNEGDAC_BLEEDER:
79584822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_MISC:
79684822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_BUCK_RST:
79784822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_BUCK_VREF_ERRAMP:
79884822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_FLYB_ERRAMP:
79984822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_FLYB_BUFF:
80084822215SKrzysztof Kozlowski 	case WCD938X_RX_BIAS_FLYB_MID_RST:
80184822215SKrzysztof Kozlowski 	case WCD938X_HPH_CNP_EN:
80284822215SKrzysztof Kozlowski 	case WCD938X_HPH_CNP_WG_CTL:
80384822215SKrzysztof Kozlowski 	case WCD938X_HPH_CNP_WG_TIME:
80484822215SKrzysztof Kozlowski 	case WCD938X_HPH_OCP_CTL:
80584822215SKrzysztof Kozlowski 	case WCD938X_HPH_AUTO_CHOP:
80684822215SKrzysztof Kozlowski 	case WCD938X_HPH_CHOP_CTL:
80784822215SKrzysztof Kozlowski 	case WCD938X_HPH_PA_CTL1:
80884822215SKrzysztof Kozlowski 	case WCD938X_HPH_PA_CTL2:
80984822215SKrzysztof Kozlowski 	case WCD938X_HPH_L_EN:
81084822215SKrzysztof Kozlowski 	case WCD938X_HPH_L_TEST:
81184822215SKrzysztof Kozlowski 	case WCD938X_HPH_L_ATEST:
81284822215SKrzysztof Kozlowski 	case WCD938X_HPH_R_EN:
81384822215SKrzysztof Kozlowski 	case WCD938X_HPH_R_TEST:
81484822215SKrzysztof Kozlowski 	case WCD938X_HPH_R_ATEST:
81584822215SKrzysztof Kozlowski 	case WCD938X_HPH_RDAC_CLK_CTL1:
81684822215SKrzysztof Kozlowski 	case WCD938X_HPH_RDAC_CLK_CTL2:
81784822215SKrzysztof Kozlowski 	case WCD938X_HPH_RDAC_LDO_CTL:
81884822215SKrzysztof Kozlowski 	case WCD938X_HPH_RDAC_CHOP_CLK_LP_CTL:
81984822215SKrzysztof Kozlowski 	case WCD938X_HPH_REFBUFF_UHQA_CTL:
82084822215SKrzysztof Kozlowski 	case WCD938X_HPH_REFBUFF_LP_CTL:
82184822215SKrzysztof Kozlowski 	case WCD938X_HPH_L_DAC_CTL:
82284822215SKrzysztof Kozlowski 	case WCD938X_HPH_R_DAC_CTL:
82384822215SKrzysztof Kozlowski 	case WCD938X_HPH_SURGE_HPHLR_SURGE_COMP_SEL:
82484822215SKrzysztof Kozlowski 	case WCD938X_HPH_SURGE_HPHLR_SURGE_EN:
82584822215SKrzysztof Kozlowski 	case WCD938X_HPH_SURGE_HPHLR_SURGE_MISC1:
82684822215SKrzysztof Kozlowski 	case WCD938X_EAR_EAR_EN_REG:
82784822215SKrzysztof Kozlowski 	case WCD938X_EAR_EAR_PA_CON:
82884822215SKrzysztof Kozlowski 	case WCD938X_EAR_EAR_SP_CON:
82984822215SKrzysztof Kozlowski 	case WCD938X_EAR_EAR_DAC_CON:
83084822215SKrzysztof Kozlowski 	case WCD938X_EAR_EAR_CNP_FSM_CON:
83184822215SKrzysztof Kozlowski 	case WCD938X_EAR_TEST_CTL:
83284822215SKrzysztof Kozlowski 	case WCD938X_ANA_NEW_PAGE_REGISTER:
83384822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_ANA_HPH2:
83484822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_ANA_HPH3:
83584822215SKrzysztof Kozlowski 	case WCD938X_SLEEP_CTL:
83684822215SKrzysztof Kozlowski 	case WCD938X_SLEEP_WATCHDOG_CTL:
83784822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_ELECT_REM_CLAMP_CTL:
83884822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_CTL_1:
83984822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_CTL_2:
84084822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_PLUG_DETECT_CTL:
84184822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_ZDET_ANA_CTL:
84284822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_ZDET_RAMP_CTL:
84384822215SKrzysztof Kozlowski 	case WCD938X_TX_NEW_AMIC_MUX_CFG:
84484822215SKrzysztof Kozlowski 	case WCD938X_AUX_AUXPA:
84584822215SKrzysztof Kozlowski 	case WCD938X_LDORXTX_MODE:
84684822215SKrzysztof Kozlowski 	case WCD938X_LDORXTX_CONFIG:
84784822215SKrzysztof Kozlowski 	case WCD938X_DIE_CRACK_DIE_CRK_DET_EN:
84884822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_RDAC_GAIN_CTL:
84984822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_L:
85084822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_RDAC_VREF_CTL:
85184822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_RDAC_OVERRIDE_CTL:
85284822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R:
85384822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_PA_MISC1:
85484822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_PA_MISC2:
85584822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_PA_RDAC_MISC:
85684822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_HPH_TIMER1:
85784822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_HPH_TIMER2:
85884822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_HPH_TIMER3:
85984822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_HPH_TIMER4:
86084822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_PA_RDAC_MISC2:
86184822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_PA_RDAC_MISC3:
86284822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_L_NEW:
86384822215SKrzysztof Kozlowski 	case WCD938X_HPH_NEW_INT_RDAC_HD2_CTL_R_NEW:
86484822215SKrzysztof Kozlowski 	case WCD938X_RX_NEW_INT_HPH_RDAC_BIAS_LOHIFI:
86584822215SKrzysztof Kozlowski 	case WCD938X_RX_NEW_INT_HPH_RDAC_BIAS_ULP:
86684822215SKrzysztof Kozlowski 	case WCD938X_RX_NEW_INT_HPH_RDAC_LDO_LP:
86784822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_INT_MOISTURE_DET_DC_CTRL:
86884822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_INT_MOISTURE_DET_POLLING_CTRL:
86984822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_INT_MECH_DET_CURRENT:
87084822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_INT_SPARE_2:
87184822215SKrzysztof Kozlowski 	case WCD938X_EAR_INT_NEW_EAR_CHOPPER_CON:
87284822215SKrzysztof Kozlowski 	case WCD938X_EAR_INT_NEW_CNP_VCM_CON1:
87384822215SKrzysztof Kozlowski 	case WCD938X_EAR_INT_NEW_CNP_VCM_CON2:
87484822215SKrzysztof Kozlowski 	case WCD938X_EAR_INT_NEW_EAR_DYNAMIC_BIAS:
87584822215SKrzysztof Kozlowski 	case WCD938X_AUX_INT_EN_REG:
87684822215SKrzysztof Kozlowski 	case WCD938X_AUX_INT_PA_CTRL:
87784822215SKrzysztof Kozlowski 	case WCD938X_AUX_INT_SP_CTRL:
87884822215SKrzysztof Kozlowski 	case WCD938X_AUX_INT_DAC_CTRL:
87984822215SKrzysztof Kozlowski 	case WCD938X_AUX_INT_CLK_CTRL:
88084822215SKrzysztof Kozlowski 	case WCD938X_AUX_INT_TEST_CTRL:
88184822215SKrzysztof Kozlowski 	case WCD938X_AUX_INT_MISC:
88284822215SKrzysztof Kozlowski 	case WCD938X_LDORXTX_INT_BIAS:
88384822215SKrzysztof Kozlowski 	case WCD938X_LDORXTX_INT_STB_LOADS_DTEST:
88484822215SKrzysztof Kozlowski 	case WCD938X_LDORXTX_INT_TEST0:
88584822215SKrzysztof Kozlowski 	case WCD938X_LDORXTX_INT_STARTUP_TIMER:
88684822215SKrzysztof Kozlowski 	case WCD938X_LDORXTX_INT_TEST1:
88784822215SKrzysztof Kozlowski 	case WCD938X_SLEEP_INT_WATCHDOG_CTL_1:
88884822215SKrzysztof Kozlowski 	case WCD938X_SLEEP_INT_WATCHDOG_CTL_2:
88984822215SKrzysztof Kozlowski 	case WCD938X_DIE_CRACK_INT_DIE_CRK_DET_INT1:
89084822215SKrzysztof Kozlowski 	case WCD938X_DIE_CRACK_INT_DIE_CRK_DET_INT2:
89184822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L2:
89284822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L1:
89384822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_L0:
89484822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_ULP1P2M:
89584822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_DIVSTOP_ULP0P6M:
89684822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_L2L1:
89784822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_L0:
89884822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG1_ULP:
89984822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_L2L1:
90084822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_L0:
90184822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2MAIN_ULP:
90284822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_L2L1L0:
90384822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXFE_ICTRL_STG2CASC_ULP:
90484822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXADC_SCBIAS_L2L1:
90584822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXADC_SCBIAS_L0ULP:
90684822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXADC_INT_L2:
90784822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXADC_INT_L1:
90884822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXADC_INT_L0:
90984822215SKrzysztof Kozlowski 	case WCD938X_TX_COM_NEW_INT_TXADC_INT_ULP:
91084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAGE_REGISTER:
91184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_TX_CLK_RATE:
91284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_RST_CTL:
91384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TOP_CLK_CFG:
91484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_ANA_CLK_CTL:
91584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_DIG_CLK_CTL:
91684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_RST_EN:
91784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_PATH_MODE:
91884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_RX_RST:
91984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_RX0_CTL:
92084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_RX1_CTL:
92184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_RX2_CTL:
92284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_TX_ANA_MODE_0_1:
92384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_TX_ANA_MODE_2_3:
92484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_COMP_CTL_0:
92584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_ANA_TX_CLK_CTL:
92684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A1_0:
92784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A1_1:
92884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A2_0:
92984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A2_1:
93084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A3_0:
93184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A3_1:
93284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A4_0:
93384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A4_1:
93484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A5_0:
93584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A5_1:
93684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A6_0:
93784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_A7_0:
93884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_C_0:
93984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_C_1:
94084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_C_2:
94184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_C_3:
94284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_R1:
94384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_R2:
94484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_R3:
94584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_R4:
94684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_R5:
94784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_R6:
94884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_DSM_R7:
94984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A1_0:
95084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A1_1:
95184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A2_0:
95284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A2_1:
95384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A3_0:
95484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A3_1:
95584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A4_0:
95684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A4_1:
95784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A5_0:
95884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A5_1:
95984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A6_0:
96084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_A7_0:
96184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_C_0:
96284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_C_1:
96384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_C_2:
96484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_C_3:
96584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_R1:
96684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_R2:
96784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_R3:
96884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_R4:
96984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_R5:
97084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_R6:
97184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_DSM_R7:
97284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_GAIN_RX_0:
97384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_GAIN_RX_1:
97484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_0:
97584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_1:
97684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_GAIN_DSD_2:
97784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_0:
97884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_1:
97984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_GAIN_DSD_2:
98084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_HPH_GAIN_CTL:
98184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AUX_GAIN_CTL:
98284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_EAR_PATH_CTL:
98384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_SWR_CLH:
98484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_CLH_BYP:
98584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_TX0_CTL:
98684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_TX1_CTL:
98784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_TX2_CTL:
98884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_TX_RST:
98984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_REQ_CTL:
99084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_RST:
99184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_AMIC_CTL:
99284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_DMIC_CTL:
99384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_DMIC1_CTL:
99484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_DMIC2_CTL:
99584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_DMIC3_CTL:
99684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_DMIC4_CTL:
99784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_PRG_CTL:
99884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_CTL:
99984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_DMIC_RATE_1_2:
100084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_DMIC_RATE_3_4:
100184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PDM_WD_CTL0:
100284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PDM_WD_CTL1:
100384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PDM_WD_CTL2:
100484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_MODE:
100584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_MASK_0:
100684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_MASK_1:
100784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_MASK_2:
100884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_CLEAR_0:
100984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_CLEAR_1:
101084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_CLEAR_2:
101184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_LEVEL_0:
101284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_LEVEL_1:
101384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_LEVEL_2:
101484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_SET_0:
101584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_SET_1:
101684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_SET_2:
101784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_TEST_0:
101884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_TEST_1:
101984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_TEST_2:
102084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TX_MODE_DBG_EN:
102184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TX_MODE_DBG_0_1:
102284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TX_MODE_DBG_2_3:
102384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_LB_IN_SEL_CTL:
102484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_LOOP_BACK_MODE:
102584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_DAC_TEST:
102684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_HM_TEST_RX_0:
102784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_HM_TEST_TX_0:
102884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_HM_TEST_RX_1:
102984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_HM_TEST_TX_1:
103084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_HM_TEST_TX_2:
103184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAD_CTL_SWR_0:
103284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAD_CTL_SWR_1:
103384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_I2C_CTL:
103484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CDC_TX_TANGGU_SW_MODE:
103584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_TEST_CTL_0:
103684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_TEST_CTL_1:
103784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAD_CTL_PDM_RX0:
103884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAD_CTL_PDM_RX1:
103984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAD_CTL_PDM_TX0:
104084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAD_CTL_PDM_TX1:
104184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAD_CTL_PDM_TX2:
104284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAD_INP_DIS_0:
104384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PAD_INP_DIS_1:
104484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_DRIVE_STRENGTH_0:
104584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_DRIVE_STRENGTH_1:
104684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_DRIVE_STRENGTH_2:
104784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_RX_DATA_EDGE_CTL:
104884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TX_DATA_EDGE_CTL:
104984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_GPIO_MODE:
105084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PIN_CTL_OE:
105184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PIN_CTL_DATA_0:
105284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PIN_CTL_DATA_1:
105384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_DIG_DEBUG_CTL:
105484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_DIG_DEBUG_EN:
105584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_ANA_CSR_DBG_ADD:
105684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_ANA_CSR_DBG_CTL:
105784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SSP_DBG:
105884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SPARE_0:
105984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SPARE_1:
106084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SPARE_2:
106184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TX_REQ_FB_CTL_0:
106284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TX_REQ_FB_CTL_1:
106384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TX_REQ_FB_CTL_2:
106484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TX_REQ_FB_CTL_3:
106584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_TX_REQ_FB_CTL_4:
106684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_DEM_BYPASS_DATA0:
106784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_DEM_BYPASS_DATA1:
106884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_DEM_BYPASS_DATA2:
106984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_DEM_BYPASS_DATA3:
107084822215SKrzysztof Kozlowski 		return true;
107184822215SKrzysztof Kozlowski 	}
107284822215SKrzysztof Kozlowski 
107384822215SKrzysztof Kozlowski 	return false;
107484822215SKrzysztof Kozlowski }
107584822215SKrzysztof Kozlowski 
wcd938x_readonly_register(struct device * dev,unsigned int reg)107684822215SKrzysztof Kozlowski static bool wcd938x_readonly_register(struct device *dev, unsigned int reg)
107784822215SKrzysztof Kozlowski {
107884822215SKrzysztof Kozlowski 	switch (reg) {
107984822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_RESULT_1:
108084822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_RESULT_2:
108184822215SKrzysztof Kozlowski 	case WCD938X_ANA_MBHC_RESULT_3:
108284822215SKrzysztof Kozlowski 	case WCD938X_MBHC_MOISTURE_DET_FSM_STATUS:
108384822215SKrzysztof Kozlowski 	case WCD938X_TX_1_2_SAR2_ERR:
108484822215SKrzysztof Kozlowski 	case WCD938X_TX_1_2_SAR1_ERR:
108584822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_SAR4_ERR:
108684822215SKrzysztof Kozlowski 	case WCD938X_TX_3_4_SAR3_ERR:
108784822215SKrzysztof Kozlowski 	case WCD938X_HPH_L_STATUS:
108884822215SKrzysztof Kozlowski 	case WCD938X_HPH_R_STATUS:
108984822215SKrzysztof Kozlowski 	case WCD938X_HPH_SURGE_HPHLR_SURGE_STATUS:
109084822215SKrzysztof Kozlowski 	case WCD938X_EAR_STATUS_REG_1:
109184822215SKrzysztof Kozlowski 	case WCD938X_EAR_STATUS_REG_2:
109284822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_FSM_STATUS:
109384822215SKrzysztof Kozlowski 	case WCD938X_MBHC_NEW_ADC_RESULT:
109484822215SKrzysztof Kozlowski 	case WCD938X_DIE_CRACK_DIE_CRK_DET_OUT:
109584822215SKrzysztof Kozlowski 	case WCD938X_AUX_INT_STATUS_REG:
109684822215SKrzysztof Kozlowski 	case WCD938X_LDORXTX_INT_STATUS:
109784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CHIP_ID0:
109884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CHIP_ID1:
109984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CHIP_ID2:
110084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_CHIP_ID3:
110184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_STATUS_0:
110284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_STATUS_1:
110384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_STATUS_2:
110484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_CLEAR_0:
110584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_CLEAR_1:
110684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_INTR_CLEAR_2:
110784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_HM_TEST_0:
110884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_SWR_HM_TEST_1:
110984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_T_DATA_0:
111084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_T_DATA_1:
111184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PIN_STATUS_0:
111284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_PIN_STATUS_1:
111384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_MODE_STATUS_0:
111484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_MODE_STATUS_1:
111584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_0:
111684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_1:
111784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_2:
111884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_3:
111984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_4:
112084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_5:
112184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_6:
112284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_7:
112384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_8:
112484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_9:
112584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_10:
112684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_11:
112784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_12:
112884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_13:
112984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_14:
113084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_15:
113184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_16:
113284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_17:
113384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_18:
113484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_19:
113584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_20:
113684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_21:
113784822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_22:
113884822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_23:
113984822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_24:
114084822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_25:
114184822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_26:
114284822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_27:
114384822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_28:
114484822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_29:
114584822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_30:
114684822215SKrzysztof Kozlowski 	case WCD938X_DIGITAL_EFUSE_REG_31:
114784822215SKrzysztof Kozlowski 		return true;
114884822215SKrzysztof Kozlowski 	}
114984822215SKrzysztof Kozlowski 	return false;
115084822215SKrzysztof Kozlowski }
115184822215SKrzysztof Kozlowski 
wcd938x_readable_register(struct device * dev,unsigned int reg)115284822215SKrzysztof Kozlowski static bool wcd938x_readable_register(struct device *dev, unsigned int reg)
115384822215SKrzysztof Kozlowski {
115484822215SKrzysztof Kozlowski 	bool ret;
115584822215SKrzysztof Kozlowski 
115684822215SKrzysztof Kozlowski 	ret = wcd938x_readonly_register(dev, reg);
115784822215SKrzysztof Kozlowski 	if (!ret)
115884822215SKrzysztof Kozlowski 		return wcd938x_rdwr_register(dev, reg);
115984822215SKrzysztof Kozlowski 
116084822215SKrzysztof Kozlowski 	return ret;
116184822215SKrzysztof Kozlowski }
116284822215SKrzysztof Kozlowski 
wcd938x_writeable_register(struct device * dev,unsigned int reg)116384822215SKrzysztof Kozlowski static bool wcd938x_writeable_register(struct device *dev, unsigned int reg)
116484822215SKrzysztof Kozlowski {
116584822215SKrzysztof Kozlowski 	return wcd938x_rdwr_register(dev, reg);
116684822215SKrzysztof Kozlowski }
116784822215SKrzysztof Kozlowski 
wcd938x_volatile_register(struct device * dev,unsigned int reg)116884822215SKrzysztof Kozlowski static bool wcd938x_volatile_register(struct device *dev, unsigned int reg)
116984822215SKrzysztof Kozlowski {
117084822215SKrzysztof Kozlowski 	if (reg <= WCD938X_BASE_ADDRESS)
117184822215SKrzysztof Kozlowski 		return false;
117284822215SKrzysztof Kozlowski 
117384822215SKrzysztof Kozlowski 	if (reg == WCD938X_DIGITAL_SWR_TX_CLK_RATE)
117484822215SKrzysztof Kozlowski 		return true;
117584822215SKrzysztof Kozlowski 
117684822215SKrzysztof Kozlowski 	if (wcd938x_readonly_register(dev, reg))
117784822215SKrzysztof Kozlowski 		return true;
117884822215SKrzysztof Kozlowski 
117984822215SKrzysztof Kozlowski 	return false;
118084822215SKrzysztof Kozlowski }
118184822215SKrzysztof Kozlowski 
118284822215SKrzysztof Kozlowski static const struct regmap_config wcd938x_regmap_config = {
118384822215SKrzysztof Kozlowski 	.name = "wcd938x_csr",
118484822215SKrzysztof Kozlowski 	.reg_bits = 32,
118584822215SKrzysztof Kozlowski 	.val_bits = 8,
11868caeeb54SMark Brown 	.cache_type = REGCACHE_MAPLE,
118784822215SKrzysztof Kozlowski 	.reg_defaults = wcd938x_defaults,
118884822215SKrzysztof Kozlowski 	.num_reg_defaults = ARRAY_SIZE(wcd938x_defaults),
118984822215SKrzysztof Kozlowski 	.max_register = WCD938X_MAX_REGISTER,
119084822215SKrzysztof Kozlowski 	.readable_reg = wcd938x_readable_register,
119184822215SKrzysztof Kozlowski 	.writeable_reg = wcd938x_writeable_register,
119284822215SKrzysztof Kozlowski 	.volatile_reg = wcd938x_volatile_register,
119384822215SKrzysztof Kozlowski };
119484822215SKrzysztof Kozlowski 
119565b7b869SKrzysztof Kozlowski static const struct sdw_slave_ops wcd9380_slave_ops = {
119616572522SSrinivas Kandagatla 	.update_status = wcd9380_update_status,
119716572522SSrinivas Kandagatla 	.interrupt_callback = wcd9380_interrupt_callback,
119816572522SSrinivas Kandagatla 	.bus_config = wcd9380_bus_config,
119916572522SSrinivas Kandagatla };
120016572522SSrinivas Kandagatla 
wcd938x_sdw_component_bind(struct device * dev,struct device * master,void * data)120116572522SSrinivas Kandagatla static int wcd938x_sdw_component_bind(struct device *dev,
120216572522SSrinivas Kandagatla 				      struct device *master, void *data)
120316572522SSrinivas Kandagatla {
120416572522SSrinivas Kandagatla 	return 0;
120516572522SSrinivas Kandagatla }
120616572522SSrinivas Kandagatla 
wcd938x_sdw_component_unbind(struct device * dev,struct device * master,void * data)120716572522SSrinivas Kandagatla static void wcd938x_sdw_component_unbind(struct device *dev,
120816572522SSrinivas Kandagatla 					 struct device *master, void *data)
120916572522SSrinivas Kandagatla {
121016572522SSrinivas Kandagatla }
121116572522SSrinivas Kandagatla 
121216572522SSrinivas Kandagatla static const struct component_ops wcd938x_sdw_component_ops = {
121316572522SSrinivas Kandagatla 	.bind   = wcd938x_sdw_component_bind,
121416572522SSrinivas Kandagatla 	.unbind = wcd938x_sdw_component_unbind,
121516572522SSrinivas Kandagatla };
121616572522SSrinivas Kandagatla 
wcd9380_probe(struct sdw_slave * pdev,const struct sdw_device_id * id)121716572522SSrinivas Kandagatla static int wcd9380_probe(struct sdw_slave *pdev,
121816572522SSrinivas Kandagatla 			 const struct sdw_device_id *id)
121916572522SSrinivas Kandagatla {
122016572522SSrinivas Kandagatla 	struct device *dev = &pdev->dev;
122116572522SSrinivas Kandagatla 	struct wcd938x_sdw_priv *wcd;
122216572522SSrinivas Kandagatla 	int ret;
122316572522SSrinivas Kandagatla 
122416572522SSrinivas Kandagatla 	wcd = devm_kzalloc(dev, sizeof(*wcd), GFP_KERNEL);
122516572522SSrinivas Kandagatla 	if (!wcd)
122616572522SSrinivas Kandagatla 		return -ENOMEM;
122716572522SSrinivas Kandagatla 
122816572522SSrinivas Kandagatla 	/**
122916572522SSrinivas Kandagatla 	 * Port map index starts with 0, however the data port for this codec
123016572522SSrinivas Kandagatla 	 * are from index 1
123116572522SSrinivas Kandagatla 	 */
123216572522SSrinivas Kandagatla 	if (of_property_read_bool(dev->of_node, "qcom,tx-port-mapping")) {
123316572522SSrinivas Kandagatla 		wcd->is_tx = true;
123416572522SSrinivas Kandagatla 		ret = of_property_read_u32_array(dev->of_node, "qcom,tx-port-mapping",
123516572522SSrinivas Kandagatla 						 &pdev->m_port_map[1],
123616572522SSrinivas Kandagatla 						 WCD938X_MAX_TX_SWR_PORTS);
123716572522SSrinivas Kandagatla 	} else {
123816572522SSrinivas Kandagatla 		ret = of_property_read_u32_array(dev->of_node, "qcom,rx-port-mapping",
123916572522SSrinivas Kandagatla 						 &pdev->m_port_map[1],
124016572522SSrinivas Kandagatla 						 WCD938X_MAX_SWR_PORTS);
124116572522SSrinivas Kandagatla 	}
124216572522SSrinivas Kandagatla 
124316572522SSrinivas Kandagatla 	if (ret < 0)
124416572522SSrinivas Kandagatla 		dev_info(dev, "Static Port mapping not specified\n");
124516572522SSrinivas Kandagatla 
124616572522SSrinivas Kandagatla 	wcd->sdev = pdev;
124716572522SSrinivas Kandagatla 	dev_set_drvdata(dev, wcd);
124816572522SSrinivas Kandagatla 
124916572522SSrinivas Kandagatla 	pdev->prop.scp_int1_mask = SDW_SCP_INT1_IMPL_DEF |
125016572522SSrinivas Kandagatla 					SDW_SCP_INT1_BUS_CLASH |
125116572522SSrinivas Kandagatla 					SDW_SCP_INT1_PARITY;
125216572522SSrinivas Kandagatla 	pdev->prop.lane_control_support = true;
1253584a6301SSrinivas Kandagatla 	pdev->prop.simple_clk_stop_capable = true;
125416572522SSrinivas Kandagatla 	if (wcd->is_tx) {
125516572522SSrinivas Kandagatla 		pdev->prop.source_ports = GENMASK(WCD938X_MAX_SWR_PORTS, 0);
125616572522SSrinivas Kandagatla 		pdev->prop.src_dpn_prop = wcd938x_dpn_prop;
125716572522SSrinivas Kandagatla 		wcd->ch_info = &wcd938x_sdw_tx_ch_info[0];
125816572522SSrinivas Kandagatla 		pdev->prop.wake_capable = true;
125916572522SSrinivas Kandagatla 	} else {
126016572522SSrinivas Kandagatla 		pdev->prop.sink_ports = GENMASK(WCD938X_MAX_SWR_PORTS, 0);
126116572522SSrinivas Kandagatla 		pdev->prop.sink_dpn_prop = wcd938x_dpn_prop;
126216572522SSrinivas Kandagatla 		wcd->ch_info = &wcd938x_sdw_rx_ch_info[0];
126316572522SSrinivas Kandagatla 	}
126416572522SSrinivas Kandagatla 
126584822215SKrzysztof Kozlowski 	if (wcd->is_tx) {
126684822215SKrzysztof Kozlowski 		wcd->regmap = devm_regmap_init_sdw(pdev, &wcd938x_regmap_config);
126784822215SKrzysztof Kozlowski 		if (IS_ERR(wcd->regmap))
126884822215SKrzysztof Kozlowski 			return dev_err_probe(dev, PTR_ERR(wcd->regmap),
126984822215SKrzysztof Kozlowski 					     "Regmap init failed\n");
127084822215SKrzysztof Kozlowski 
127184822215SKrzysztof Kozlowski 		/* Start in cache-only until device is enumerated */
127284822215SKrzysztof Kozlowski 		regcache_cache_only(wcd->regmap, true);
1273101b2383SYang Li 	}
127484822215SKrzysztof Kozlowski 
127516572522SSrinivas Kandagatla 	pm_runtime_set_autosuspend_delay(dev, 3000);
127616572522SSrinivas Kandagatla 	pm_runtime_use_autosuspend(dev);
127716572522SSrinivas Kandagatla 	pm_runtime_mark_last_busy(dev);
127816572522SSrinivas Kandagatla 	pm_runtime_set_active(dev);
127916572522SSrinivas Kandagatla 	pm_runtime_enable(dev);
128016572522SSrinivas Kandagatla 
1281*c5c03830SJohan Hovold 	ret = component_add(dev, &wcd938x_sdw_component_ops);
1282*c5c03830SJohan Hovold 	if (ret)
1283*c5c03830SJohan Hovold 		goto err_disable_rpm;
1284*c5c03830SJohan Hovold 
1285*c5c03830SJohan Hovold 	return 0;
1286*c5c03830SJohan Hovold 
1287*c5c03830SJohan Hovold err_disable_rpm:
1288*c5c03830SJohan Hovold 	pm_runtime_disable(dev);
1289*c5c03830SJohan Hovold 	pm_runtime_set_suspended(dev);
1290*c5c03830SJohan Hovold 	pm_runtime_dont_use_autosuspend(dev);
1291*c5c03830SJohan Hovold 
1292*c5c03830SJohan Hovold 	return ret;
129316572522SSrinivas Kandagatla }
129416572522SSrinivas Kandagatla 
wcd9380_remove(struct sdw_slave * pdev)1295f0dfdcbeSJohan Hovold static int wcd9380_remove(struct sdw_slave *pdev)
1296f0dfdcbeSJohan Hovold {
1297f0dfdcbeSJohan Hovold 	struct device *dev = &pdev->dev;
1298f0dfdcbeSJohan Hovold 
1299f0dfdcbeSJohan Hovold 	component_del(dev, &wcd938x_sdw_component_ops);
1300f0dfdcbeSJohan Hovold 
1301*c5c03830SJohan Hovold 	pm_runtime_disable(dev);
1302*c5c03830SJohan Hovold 	pm_runtime_set_suspended(dev);
1303*c5c03830SJohan Hovold 	pm_runtime_dont_use_autosuspend(dev);
1304*c5c03830SJohan Hovold 
1305f0dfdcbeSJohan Hovold 	return 0;
1306f0dfdcbeSJohan Hovold }
1307f0dfdcbeSJohan Hovold 
130816572522SSrinivas Kandagatla static const struct sdw_device_id wcd9380_slave_id[] = {
130916572522SSrinivas Kandagatla 	SDW_SLAVE_ENTRY(0x0217, 0x10d, 0),
131016572522SSrinivas Kandagatla 	{},
131116572522SSrinivas Kandagatla };
131216572522SSrinivas Kandagatla MODULE_DEVICE_TABLE(sdw, wcd9380_slave_id);
131316572522SSrinivas Kandagatla 
wcd938x_sdw_runtime_suspend(struct device * dev)131416572522SSrinivas Kandagatla static int __maybe_unused wcd938x_sdw_runtime_suspend(struct device *dev)
131516572522SSrinivas Kandagatla {
131684822215SKrzysztof Kozlowski 	struct wcd938x_sdw_priv *wcd = dev_get_drvdata(dev);
131716572522SSrinivas Kandagatla 
131884822215SKrzysztof Kozlowski 	if (wcd->regmap) {
131984822215SKrzysztof Kozlowski 		regcache_cache_only(wcd->regmap, true);
132084822215SKrzysztof Kozlowski 		regcache_mark_dirty(wcd->regmap);
132116572522SSrinivas Kandagatla 	}
132284822215SKrzysztof Kozlowski 
132316572522SSrinivas Kandagatla 	return 0;
132416572522SSrinivas Kandagatla }
132516572522SSrinivas Kandagatla 
wcd938x_sdw_runtime_resume(struct device * dev)132616572522SSrinivas Kandagatla static int __maybe_unused wcd938x_sdw_runtime_resume(struct device *dev)
132716572522SSrinivas Kandagatla {
132884822215SKrzysztof Kozlowski 	struct wcd938x_sdw_priv *wcd = dev_get_drvdata(dev);
132916572522SSrinivas Kandagatla 
133084822215SKrzysztof Kozlowski 	if (wcd->regmap) {
133184822215SKrzysztof Kozlowski 		regcache_cache_only(wcd->regmap, false);
133284822215SKrzysztof Kozlowski 		regcache_sync(wcd->regmap);
133316572522SSrinivas Kandagatla 	}
133416572522SSrinivas Kandagatla 
133516572522SSrinivas Kandagatla 	pm_runtime_mark_last_busy(dev);
133616572522SSrinivas Kandagatla 
133716572522SSrinivas Kandagatla 	return 0;
133816572522SSrinivas Kandagatla }
133916572522SSrinivas Kandagatla 
134016572522SSrinivas Kandagatla static const struct dev_pm_ops wcd938x_sdw_pm_ops = {
134116572522SSrinivas Kandagatla 	SET_RUNTIME_PM_OPS(wcd938x_sdw_runtime_suspend, wcd938x_sdw_runtime_resume, NULL)
134216572522SSrinivas Kandagatla };
134316572522SSrinivas Kandagatla 
134416572522SSrinivas Kandagatla 
134516572522SSrinivas Kandagatla static struct sdw_driver wcd9380_codec_driver = {
134616572522SSrinivas Kandagatla 	.probe	= wcd9380_probe,
1347f0dfdcbeSJohan Hovold 	.remove	= wcd9380_remove,
134816572522SSrinivas Kandagatla 	.ops = &wcd9380_slave_ops,
134916572522SSrinivas Kandagatla 	.id_table = wcd9380_slave_id,
135016572522SSrinivas Kandagatla 	.driver = {
135116572522SSrinivas Kandagatla 		.name	= "wcd9380-codec",
135216572522SSrinivas Kandagatla 		.pm = &wcd938x_sdw_pm_ops,
135316572522SSrinivas Kandagatla 	}
135416572522SSrinivas Kandagatla };
135516572522SSrinivas Kandagatla module_sdw_driver(wcd9380_codec_driver);
135616572522SSrinivas Kandagatla 
135716572522SSrinivas Kandagatla MODULE_DESCRIPTION("WCD938X SDW codec driver");
135816572522SSrinivas Kandagatla MODULE_LICENSE("GPL");
1359