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