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 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 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 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 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 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 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 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 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 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 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 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 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 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, 118684822215SKrzysztof Kozlowski .cache_type = REGCACHE_RBTREE, 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 .can_multi_write = true, 119484822215SKrzysztof Kozlowski }; 119584822215SKrzysztof Kozlowski 119665b7b869SKrzysztof Kozlowski static const struct sdw_slave_ops wcd9380_slave_ops = { 119716572522SSrinivas Kandagatla .update_status = wcd9380_update_status, 119816572522SSrinivas Kandagatla .interrupt_callback = wcd9380_interrupt_callback, 119916572522SSrinivas Kandagatla .bus_config = wcd9380_bus_config, 120016572522SSrinivas Kandagatla }; 120116572522SSrinivas Kandagatla 120216572522SSrinivas Kandagatla static int wcd938x_sdw_component_bind(struct device *dev, 120316572522SSrinivas Kandagatla struct device *master, void *data) 120416572522SSrinivas Kandagatla { 120516572522SSrinivas Kandagatla return 0; 120616572522SSrinivas Kandagatla } 120716572522SSrinivas Kandagatla 120816572522SSrinivas Kandagatla static void wcd938x_sdw_component_unbind(struct device *dev, 120916572522SSrinivas Kandagatla struct device *master, void *data) 121016572522SSrinivas Kandagatla { 121116572522SSrinivas Kandagatla } 121216572522SSrinivas Kandagatla 121316572522SSrinivas Kandagatla static const struct component_ops wcd938x_sdw_component_ops = { 121416572522SSrinivas Kandagatla .bind = wcd938x_sdw_component_bind, 121516572522SSrinivas Kandagatla .unbind = wcd938x_sdw_component_unbind, 121616572522SSrinivas Kandagatla }; 121716572522SSrinivas Kandagatla 121816572522SSrinivas Kandagatla static int wcd9380_probe(struct sdw_slave *pdev, 121916572522SSrinivas Kandagatla const struct sdw_device_id *id) 122016572522SSrinivas Kandagatla { 122116572522SSrinivas Kandagatla struct device *dev = &pdev->dev; 122216572522SSrinivas Kandagatla struct wcd938x_sdw_priv *wcd; 122316572522SSrinivas Kandagatla int ret; 122416572522SSrinivas Kandagatla 122516572522SSrinivas Kandagatla wcd = devm_kzalloc(dev, sizeof(*wcd), GFP_KERNEL); 122616572522SSrinivas Kandagatla if (!wcd) 122716572522SSrinivas Kandagatla return -ENOMEM; 122816572522SSrinivas Kandagatla 122916572522SSrinivas Kandagatla /** 123016572522SSrinivas Kandagatla * Port map index starts with 0, however the data port for this codec 123116572522SSrinivas Kandagatla * are from index 1 123216572522SSrinivas Kandagatla */ 123316572522SSrinivas Kandagatla if (of_property_read_bool(dev->of_node, "qcom,tx-port-mapping")) { 123416572522SSrinivas Kandagatla wcd->is_tx = true; 123516572522SSrinivas Kandagatla ret = of_property_read_u32_array(dev->of_node, "qcom,tx-port-mapping", 123616572522SSrinivas Kandagatla &pdev->m_port_map[1], 123716572522SSrinivas Kandagatla WCD938X_MAX_TX_SWR_PORTS); 123816572522SSrinivas Kandagatla } else { 123916572522SSrinivas Kandagatla ret = of_property_read_u32_array(dev->of_node, "qcom,rx-port-mapping", 124016572522SSrinivas Kandagatla &pdev->m_port_map[1], 124116572522SSrinivas Kandagatla WCD938X_MAX_SWR_PORTS); 124216572522SSrinivas Kandagatla } 124316572522SSrinivas Kandagatla 124416572522SSrinivas Kandagatla if (ret < 0) 124516572522SSrinivas Kandagatla dev_info(dev, "Static Port mapping not specified\n"); 124616572522SSrinivas Kandagatla 124716572522SSrinivas Kandagatla wcd->sdev = pdev; 124816572522SSrinivas Kandagatla dev_set_drvdata(dev, wcd); 124916572522SSrinivas Kandagatla 125016572522SSrinivas Kandagatla pdev->prop.scp_int1_mask = SDW_SCP_INT1_IMPL_DEF | 125116572522SSrinivas Kandagatla SDW_SCP_INT1_BUS_CLASH | 125216572522SSrinivas Kandagatla SDW_SCP_INT1_PARITY; 125316572522SSrinivas Kandagatla pdev->prop.lane_control_support = true; 1254584a6301SSrinivas Kandagatla pdev->prop.simple_clk_stop_capable = true; 125516572522SSrinivas Kandagatla if (wcd->is_tx) { 125616572522SSrinivas Kandagatla pdev->prop.source_ports = GENMASK(WCD938X_MAX_SWR_PORTS, 0); 125716572522SSrinivas Kandagatla pdev->prop.src_dpn_prop = wcd938x_dpn_prop; 125816572522SSrinivas Kandagatla wcd->ch_info = &wcd938x_sdw_tx_ch_info[0]; 125916572522SSrinivas Kandagatla pdev->prop.wake_capable = true; 126016572522SSrinivas Kandagatla } else { 126116572522SSrinivas Kandagatla pdev->prop.sink_ports = GENMASK(WCD938X_MAX_SWR_PORTS, 0); 126216572522SSrinivas Kandagatla pdev->prop.sink_dpn_prop = wcd938x_dpn_prop; 126316572522SSrinivas Kandagatla wcd->ch_info = &wcd938x_sdw_rx_ch_info[0]; 126416572522SSrinivas Kandagatla } 126516572522SSrinivas Kandagatla 126684822215SKrzysztof Kozlowski if (wcd->is_tx) { 126784822215SKrzysztof Kozlowski wcd->regmap = devm_regmap_init_sdw(pdev, &wcd938x_regmap_config); 126884822215SKrzysztof Kozlowski if (IS_ERR(wcd->regmap)) 126984822215SKrzysztof Kozlowski return dev_err_probe(dev, PTR_ERR(wcd->regmap), 127084822215SKrzysztof Kozlowski "Regmap init failed\n"); 127184822215SKrzysztof Kozlowski 127284822215SKrzysztof Kozlowski /* Start in cache-only until device is enumerated */ 127384822215SKrzysztof Kozlowski regcache_cache_only(wcd->regmap, true); 1274*101b2383SYang Li } 127584822215SKrzysztof Kozlowski 127616572522SSrinivas Kandagatla pm_runtime_set_autosuspend_delay(dev, 3000); 127716572522SSrinivas Kandagatla pm_runtime_use_autosuspend(dev); 127816572522SSrinivas Kandagatla pm_runtime_mark_last_busy(dev); 127916572522SSrinivas Kandagatla pm_runtime_set_active(dev); 128016572522SSrinivas Kandagatla pm_runtime_enable(dev); 128116572522SSrinivas Kandagatla 128216572522SSrinivas Kandagatla return component_add(dev, &wcd938x_sdw_component_ops); 128316572522SSrinivas Kandagatla } 128416572522SSrinivas Kandagatla 128516572522SSrinivas Kandagatla static const struct sdw_device_id wcd9380_slave_id[] = { 128616572522SSrinivas Kandagatla SDW_SLAVE_ENTRY(0x0217, 0x10d, 0), 128716572522SSrinivas Kandagatla {}, 128816572522SSrinivas Kandagatla }; 128916572522SSrinivas Kandagatla MODULE_DEVICE_TABLE(sdw, wcd9380_slave_id); 129016572522SSrinivas Kandagatla 129116572522SSrinivas Kandagatla static int __maybe_unused wcd938x_sdw_runtime_suspend(struct device *dev) 129216572522SSrinivas Kandagatla { 129384822215SKrzysztof Kozlowski struct wcd938x_sdw_priv *wcd = dev_get_drvdata(dev); 129416572522SSrinivas Kandagatla 129584822215SKrzysztof Kozlowski if (wcd->regmap) { 129684822215SKrzysztof Kozlowski regcache_cache_only(wcd->regmap, true); 129784822215SKrzysztof Kozlowski regcache_mark_dirty(wcd->regmap); 129816572522SSrinivas Kandagatla } 129984822215SKrzysztof Kozlowski 130016572522SSrinivas Kandagatla return 0; 130116572522SSrinivas Kandagatla } 130216572522SSrinivas Kandagatla 130316572522SSrinivas Kandagatla static int __maybe_unused wcd938x_sdw_runtime_resume(struct device *dev) 130416572522SSrinivas Kandagatla { 130584822215SKrzysztof Kozlowski struct wcd938x_sdw_priv *wcd = dev_get_drvdata(dev); 130616572522SSrinivas Kandagatla 130784822215SKrzysztof Kozlowski if (wcd->regmap) { 130884822215SKrzysztof Kozlowski regcache_cache_only(wcd->regmap, false); 130984822215SKrzysztof Kozlowski regcache_sync(wcd->regmap); 131016572522SSrinivas Kandagatla } 131116572522SSrinivas Kandagatla 131216572522SSrinivas Kandagatla pm_runtime_mark_last_busy(dev); 131316572522SSrinivas Kandagatla 131416572522SSrinivas Kandagatla return 0; 131516572522SSrinivas Kandagatla } 131616572522SSrinivas Kandagatla 131716572522SSrinivas Kandagatla static const struct dev_pm_ops wcd938x_sdw_pm_ops = { 131816572522SSrinivas Kandagatla SET_RUNTIME_PM_OPS(wcd938x_sdw_runtime_suspend, wcd938x_sdw_runtime_resume, NULL) 131916572522SSrinivas Kandagatla }; 132016572522SSrinivas Kandagatla 132116572522SSrinivas Kandagatla 132216572522SSrinivas Kandagatla static struct sdw_driver wcd9380_codec_driver = { 132316572522SSrinivas Kandagatla .probe = wcd9380_probe, 132416572522SSrinivas Kandagatla .ops = &wcd9380_slave_ops, 132516572522SSrinivas Kandagatla .id_table = wcd9380_slave_id, 132616572522SSrinivas Kandagatla .driver = { 132716572522SSrinivas Kandagatla .name = "wcd9380-codec", 132816572522SSrinivas Kandagatla .pm = &wcd938x_sdw_pm_ops, 132916572522SSrinivas Kandagatla } 133016572522SSrinivas Kandagatla }; 133116572522SSrinivas Kandagatla module_sdw_driver(wcd9380_codec_driver); 133216572522SSrinivas Kandagatla 133316572522SSrinivas Kandagatla MODULE_DESCRIPTION("WCD938X SDW codec driver"); 133416572522SSrinivas Kandagatla MODULE_LICENSE("GPL"); 1335