• Home
  • Raw
  • Download

Lines Matching +full:amic +full:- +full:delay +full:- +full:ms

1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
3 // Copyright (c) 2017-2018, Linaro Limited
13 #include <linux/delay.h>
18 #include <sound/soc-dapm.h>
25 #include "wcd-clsh-v2.h"
27 #include <dt-bindings/sound/qcom,wcd9335.h>
98 #define WCD9335_CALCULATE_VOUT_D(req_mv) (((req_mv - 650) * 10) / 25)
147 {"ADC MUX" #id, "AMIC", "AMIC MUX" #id}, \
154 {"AMIC MUX" #id, "ADC1", "ADC1"}, \
155 {"AMIC MUX" #id, "ADC2", "ADC2"}, \
156 {"AMIC MUX" #id, "ADC3", "ADC3"}, \
157 {"AMIC MUX" #id, "ADC4", "ADC4"}, \
158 {"AMIC MUX" #id, "ADC5", "ADC5"}, \
159 {"AMIC MUX" #id, "ADC6", "ADC6"}
360 "vdd-buck", "vdd-buck-sido", "vdd-tx", "vdd-rx", "vdd-io",
412 {24000, -EINVAL},/* 24K */
554 "Class H Invalid", "Class-H Hi-Fi", "Class-H Low Power", "Class-AB",
555 "Class-H Hi-Fi Low Power"
563 "DMIC", "AMIC", "ANC_FB_TUNE1", "ANC_FB_TUNE2"
615 static const DECLARE_TLV_DB_SCALE(digital_gain, -8400, 100, -8400);
1210 SOC_DAPM_ENUM("AMIC MUX0 Mux", tx_amic_mux0_enum);
1213 SOC_DAPM_ENUM("AMIC MUX1 Mux", tx_amic_mux1_enum);
1216 SOC_DAPM_ENUM("AMIC MUX2 Mux", tx_amic_mux2_enum);
1219 SOC_DAPM_ENUM("AMIC MUX3 Mux", tx_amic_mux3_enum);
1222 SOC_DAPM_ENUM("AMIC MUX4 Mux", tx_amic_mux4_enum);
1225 SOC_DAPM_ENUM("AMIC MUX5 Mux", tx_amic_mux5_enum);
1228 SOC_DAPM_ENUM("AMIC MUX6 Mux", tx_amic_mux6_enum);
1231 SOC_DAPM_ENUM("AMIC MUX7 Mux", tx_amic_mux7_enum);
1234 SOC_DAPM_ENUM("AMIC MUX8 Mux", tx_amic_mux8_enum);
1267 struct wcd9335_codec *wcd = dev_get_drvdata(w->dapm->dev); in slim_rx_mux_get()
1268 u32 port_id = w->shift; in slim_rx_mux_get()
1270 ucontrol->value.enumerated.item[0] = wcd->rx_port_value[port_id]; in slim_rx_mux_get()
1279 struct wcd9335_codec *wcd = dev_get_drvdata(w->dapm->dev); in slim_rx_mux_put()
1280 struct soc_enum *e = (struct soc_enum *)kc->private_value; in slim_rx_mux_put()
1282 u32 port_id = w->shift; in slim_rx_mux_put()
1284 if (wcd->rx_port_value[port_id] == ucontrol->value.enumerated.item[0]) in slim_rx_mux_put()
1287 wcd->rx_port_value[port_id] = ucontrol->value.enumerated.item[0]; in slim_rx_mux_put()
1290 list_del_init(&wcd->rx_chs[port_id].list); in slim_rx_mux_put()
1292 switch (wcd->rx_port_value[port_id]) { in slim_rx_mux_put()
1297 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
1298 &wcd->dai[AIF1_PB].slim_ch_list); in slim_rx_mux_put()
1301 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
1302 &wcd->dai[AIF2_PB].slim_ch_list); in slim_rx_mux_put()
1305 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
1306 &wcd->dai[AIF3_PB].slim_ch_list); in slim_rx_mux_put()
1309 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
1310 &wcd->dai[AIF4_PB].slim_ch_list); in slim_rx_mux_put()
1313 dev_err(wcd->dev, "Unknown AIF %d\n", wcd->rx_port_value[port_id]); in slim_rx_mux_put()
1317 snd_soc_dapm_mux_update_power(w->dapm, kc, wcd->rx_port_value[port_id], in slim_rx_mux_put()
1322 return -EINVAL; in slim_rx_mux_put()
1330 struct wcd9335_codec *wcd = dev_get_drvdata(dapm->dev); in slim_tx_mixer_get()
1333 (struct soc_mixer_control *)kc->private_value; in slim_tx_mixer_get()
1334 int dai_id = widget->shift; in slim_tx_mixer_get()
1335 int port_id = mixer->shift; in slim_tx_mixer_get()
1337 ucontrol->value.integer.value[0] = wcd->tx_port_value[port_id] == dai_id; in slim_tx_mixer_get()
1347 struct wcd9335_codec *wcd = dev_get_drvdata(widget->dapm->dev); in slim_tx_mixer_put()
1350 (struct soc_mixer_control *)kc->private_value; in slim_tx_mixer_put()
1351 int enable = ucontrol->value.integer.value[0]; in slim_tx_mixer_put()
1352 int dai_id = widget->shift; in slim_tx_mixer_put()
1353 int port_id = mixer->shift; in slim_tx_mixer_put()
1360 if (enable && wcd->tx_port_value[port_id] != dai_id) { in slim_tx_mixer_put()
1361 wcd->tx_port_value[port_id] = dai_id; in slim_tx_mixer_put()
1362 list_add_tail(&wcd->tx_chs[port_id].list, in slim_tx_mixer_put()
1363 &wcd->dai[dai_id].slim_ch_list); in slim_tx_mixer_put()
1364 } else if (!enable && wcd->tx_port_value[port_id] == dai_id) { in slim_tx_mixer_put()
1365 wcd->tx_port_value[port_id] = -1; in slim_tx_mixer_put()
1366 list_del_init(&wcd->tx_chs[port_id].list); in slim_tx_mixer_put()
1370 dev_err(wcd->dev, "Unknown AIF %d\n", dai_id); in slim_tx_mixer_put()
1371 return -EINVAL; in slim_tx_mixer_put()
1374 snd_soc_dapm_mixer_update_power(widget->dapm, kc, enable, update); in slim_tx_mixer_put()
1482 struct soc_enum *e = (struct soc_enum *)kc->private_value; in wcd9335_put_dec_enum()
1485 val = ucontrol->value.enumerated.item[0]; in wcd9335_put_dec_enum()
1487 switch (e->reg) { in wcd9335_put_dec_enum()
1516 return -EINVAL; in wcd9335_put_dec_enum()
1519 /* AMIC: 0, DMIC: 1 */ in wcd9335_put_dec_enum()
1531 struct soc_enum *e = (struct soc_enum *)kc->private_value; in wcd9335_int_dem_inp_mux_put()
1536 val = ucontrol->value.enumerated.item[0]; in wcd9335_int_dem_inp_mux_put()
1538 if (e->reg == WCD9335_CDC_RX0_RX_PATH_SEC0) in wcd9335_int_dem_inp_mux_put()
1540 else if (e->reg == WCD9335_CDC_RX1_RX_PATH_SEC0) in wcd9335_int_dem_inp_mux_put()
1542 else if (e->reg == WCD9335_CDC_RX2_RX_PATH_SEC0) in wcd9335_int_dem_inp_mux_put()
1545 return -EINVAL; in wcd9335_int_dem_inp_mux_put()
1547 /* Set Look Ahead Delay */ in wcd9335_int_dem_inp_mux_put()
1619 struct snd_soc_component *component = dai->component; in wcd9335_set_mix_interpolator_rate()
1620 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_set_mix_interpolator_rate()
1624 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd9335_set_mix_interpolator_rate()
1630 if (val == (ch->shift + INTn_2_INP_SEL_RX0)) in wcd9335_set_mix_interpolator_rate()
1645 struct snd_soc_component *comp = dai->component; in wcd9335_set_prim_interpolator_rate()
1646 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_set_prim_interpolator_rate()
1651 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd9335_set_prim_interpolator_rate()
1652 inp = ch->shift + INTn_1_MIX_INP_SEL_RX0; in wcd9335_set_prim_interpolator_rate()
1675 dev_info(wcd->dev, in wcd9335_set_prim_interpolator_rate()
1718 struct list_head *slim_ch_list = &dai_data->slim_ch_list; in wcd9335_slim_set_hw_params()
1719 struct slim_stream_config *cfg = &dai_data->sconfig; in wcd9335_slim_set_hw_params()
1724 cfg->ch_count = 0; in wcd9335_slim_set_hw_params()
1725 cfg->direction = direction; in wcd9335_slim_set_hw_params()
1726 cfg->port_mask = 0; in wcd9335_slim_set_hw_params()
1730 cfg->ch_count++; in wcd9335_slim_set_hw_params()
1731 payload |= 1 << ch->shift; in wcd9335_slim_set_hw_params()
1732 cfg->port_mask |= BIT(ch->port); in wcd9335_slim_set_hw_params()
1735 cfg->chs = kcalloc(cfg->ch_count, sizeof(unsigned int), GFP_KERNEL); in wcd9335_slim_set_hw_params()
1736 if (!cfg->chs) in wcd9335_slim_set_hw_params()
1737 return -ENOMEM; in wcd9335_slim_set_hw_params()
1741 cfg->chs[i++] = ch->ch_num; in wcd9335_slim_set_hw_params()
1744 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1745 WCD9335_SLIM_PGD_RX_PORT_MULTI_CHNL_0(ch->port), in wcd9335_slim_set_hw_params()
1752 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1753 WCD9335_SLIM_PGD_RX_PORT_CFG(ch->port), in wcd9335_slim_set_hw_params()
1758 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1759 WCD9335_SLIM_PGD_TX_PORT_MULTI_CHNL_0(ch->port), in wcd9335_slim_set_hw_params()
1765 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1766 WCD9335_SLIM_PGD_TX_PORT_MULTI_CHNL_1(ch->port), in wcd9335_slim_set_hw_params()
1772 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1773 WCD9335_SLIM_PGD_TX_PORT_CFG(ch->port), in wcd9335_slim_set_hw_params()
1781 dai_data->sruntime = slim_stream_allocate(wcd->slim, "WCD9335-SLIM"); in wcd9335_slim_set_hw_params()
1786 dev_err(wcd->dev, "Error Setting slim hw params\n"); in wcd9335_slim_set_hw_params()
1787 kfree(cfg->chs); in wcd9335_slim_set_hw_params()
1788 cfg->chs = NULL; in wcd9335_slim_set_hw_params()
1796 struct snd_soc_component *comp = dai->component; in wcd9335_set_decimator_rate()
1801 int decimator = -1; in wcd9335_set_decimator_rate()
1803 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd9335_set_decimator_rate()
1804 tx_port = ch->port; in wcd9335_set_decimator_rate()
1806 dev_err(wcd->dev, "Invalid SLIM TX%u port DAI ID:%d\n", in wcd9335_set_decimator_rate()
1807 tx_port, dai->id); in wcd9335_set_decimator_rate()
1808 return -EINVAL; in wcd9335_set_decimator_rate()
1810 /* Find the SB TX MUX input - which decimator is connected */ in wcd9335_set_decimator_rate()
1817 shift = ((tx_port - 4) << 1); in wcd9335_set_decimator_rate()
1821 shift = ((tx_port - 8) << 1); in wcd9335_set_decimator_rate()
1845 decimator = tx_mux_sel - 1; in wcd9335_set_decimator_rate()
1858 dev_err(wcd->dev, "RX_MIX_TX%u going to SLIM TX%u\n", in wcd9335_set_decimator_rate()
1861 dev_err(wcd->dev, "ERROR: Invalid decimator: %d\n", in wcd9335_set_decimator_rate()
1863 return -EINVAL; in wcd9335_set_decimator_rate()
1877 wcd = snd_soc_component_get_drvdata(dai->component); in wcd9335_hw_params()
1879 switch (substream->stream) { in wcd9335_hw_params()
1883 dev_err(wcd->dev, "cannot set sample rate: %u\n", in wcd9335_hw_params()
1889 wcd->dai[dai->id].sconfig.bps = params_width(params); in wcd9335_hw_params()
1892 dev_err(wcd->dev, "%s: Invalid format 0x%x\n", in wcd9335_hw_params()
1894 return -EINVAL; in wcd9335_hw_params()
1922 dev_err(wcd->dev, "%s: Invalid TX sample rate: %d\n", in wcd9335_hw_params()
1924 return -EINVAL; in wcd9335_hw_params()
1931 dev_err(wcd->dev, "Cannot set TX Decimator rate\n"); in wcd9335_hw_params()
1936 wcd->dai[dai->id].sconfig.bps = params_width(params); in wcd9335_hw_params()
1939 dev_err(wcd->dev, "%s: Invalid format 0x%x\n", in wcd9335_hw_params()
1941 return -EINVAL; in wcd9335_hw_params()
1945 dev_err(wcd->dev, "Invalid stream type %d\n", in wcd9335_hw_params()
1946 substream->stream); in wcd9335_hw_params()
1947 return -EINVAL; in wcd9335_hw_params()
1950 wcd->dai[dai->id].sconfig.rate = params_rate(params); in wcd9335_hw_params()
1951 wcd9335_slim_set_hw_params(wcd, &wcd->dai[dai->id], substream->stream); in wcd9335_hw_params()
1963 wcd = snd_soc_component_get_drvdata(dai->component); in wcd9335_trigger()
1965 dai_data = &wcd->dai[dai->id]; in wcd9335_trigger()
1971 cfg = &dai_data->sconfig; in wcd9335_trigger()
1972 slim_stream_prepare(dai_data->sruntime, cfg); in wcd9335_trigger()
1973 slim_stream_enable(dai_data->sruntime); in wcd9335_trigger()
1978 slim_stream_disable(dai_data->sruntime); in wcd9335_trigger()
1979 slim_stream_unprepare(dai_data->sruntime); in wcd9335_trigger()
1995 wcd = snd_soc_component_get_drvdata(dai->component); in wcd9335_set_channel_map()
1998 dev_err(wcd->dev, "Invalid tx_slot=%p, rx_slot=%p\n", in wcd9335_set_channel_map()
2000 return -EINVAL; in wcd9335_set_channel_map()
2003 wcd->num_rx_port = rx_num; in wcd9335_set_channel_map()
2005 wcd->rx_chs[i].ch_num = rx_slot[i]; in wcd9335_set_channel_map()
2006 INIT_LIST_HEAD(&wcd->rx_chs[i].list); in wcd9335_set_channel_map()
2009 wcd->num_tx_port = tx_num; in wcd9335_set_channel_map()
2011 wcd->tx_chs[i].ch_num = tx_slot[i]; in wcd9335_set_channel_map()
2012 INIT_LIST_HEAD(&wcd->tx_chs[i].list); in wcd9335_set_channel_map()
2026 wcd = snd_soc_component_get_drvdata(dai->component); in wcd9335_get_channel_map()
2028 switch (dai->id) { in wcd9335_get_channel_map()
2034 dev_err(wcd->dev, "Invalid rx_slot %p or rx_num %p\n", in wcd9335_get_channel_map()
2036 return -EINVAL; in wcd9335_get_channel_map()
2039 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd9335_get_channel_map()
2040 rx_slot[i++] = ch->ch_num; in wcd9335_get_channel_map()
2048 dev_err(wcd->dev, "Invalid tx_slot %p or tx_num %p\n", in wcd9335_get_channel_map()
2050 return -EINVAL; in wcd9335_get_channel_map()
2052 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd9335_get_channel_map()
2053 tx_slot[i++] = ch->ch_num; in wcd9335_get_channel_map()
2058 dev_err(wcd->dev, "Invalid DAI ID %x\n", dai->id); in wcd9335_get_channel_map()
2182 int comp = ((struct soc_mixer_control *)kc->private_value)->shift; in wcd9335_get_compander()
2183 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_get_compander()
2185 ucontrol->value.integer.value[0] = wcd->comp_enabled[comp]; in wcd9335_get_compander()
2193 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_set_compander()
2194 int comp = ((struct soc_mixer_control *) kc->private_value)->shift; in wcd9335_set_compander()
2195 int value = ucontrol->value.integer.value[0]; in wcd9335_set_compander()
2198 wcd->comp_enabled[comp] = value; in wcd9335_set_compander()
2232 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_rx_hph_mode_get()
2234 ucontrol->value.enumerated.item[0] = wcd->hph_mode; in wcd9335_rx_hph_mode_get()
2243 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_rx_hph_mode_put()
2246 mode_val = ucontrol->value.enumerated.item[0]; in wcd9335_rx_hph_mode_put()
2249 dev_err(wcd->dev, "Invalid HPH Mode, default to ClSH HiFi\n"); in wcd9335_rx_hph_mode_put()
2252 wcd->hph_mode = mode_val; in wcd9335_rx_hph_mode_put()
2258 /* -84dB min - 40dB max */
2260 -84, 40, digital_gain),
2262 -84, 40, digital_gain),
2264 -84, 40, digital_gain),
2266 -84, 40, digital_gain),
2268 -84, 40, digital_gain),
2270 -84, 40, digital_gain),
2272 -84, 40, digital_gain),
2274 -84, 40, digital_gain),
2276 -84, 40, digital_gain),
2278 -84, 40, digital_gain),
2280 -84, 40, digital_gain),
2282 -84, 40, digital_gain),
2284 -84, 40, digital_gain),
2286 -84, 40, digital_gain),
2288 -84, 40, digital_gain),
2290 -84, 40, digital_gain),
2292 -84, 40, digital_gain),
2294 -84, 40, digital_gain),
2502 int micb_index = micb_num - 1; in wcd9335_micbias_control()
2505 if ((micb_index < 0) || (micb_index > WCD9335_MAX_MICBIAS - 1)) { in wcd9335_micbias_control()
2506 dev_err(wcd->dev, "Invalid micbias index, micb_ind:%d\n", in wcd9335_micbias_control()
2508 return -EINVAL; in wcd9335_micbias_control()
2525 dev_err(component->dev, "%s: Invalid micbias number: %d\n", in wcd9335_micbias_control()
2527 return -EINVAL; in wcd9335_micbias_control()
2532 wcd->pullup_ref[micb_index]++; in wcd9335_micbias_control()
2533 if ((wcd->pullup_ref[micb_index] == 1) && in wcd9335_micbias_control()
2534 (wcd->micb_ref[micb_index] == 0)) in wcd9335_micbias_control()
2539 wcd->pullup_ref[micb_index]--; in wcd9335_micbias_control()
2540 if ((wcd->pullup_ref[micb_index] == 0) && in wcd9335_micbias_control()
2541 (wcd->micb_ref[micb_index] == 0)) in wcd9335_micbias_control()
2546 wcd->micb_ref[micb_index]++; in wcd9335_micbias_control()
2547 if (wcd->micb_ref[micb_index] == 1) in wcd9335_micbias_control()
2552 wcd->micb_ref[micb_index]--; in wcd9335_micbias_control()
2553 if ((wcd->micb_ref[micb_index] == 0) && in wcd9335_micbias_control()
2554 (wcd->pullup_ref[micb_index] > 0)) in wcd9335_micbias_control()
2557 else if ((wcd->micb_ref[micb_index] == 0) && in wcd9335_micbias_control()
2558 (wcd->pullup_ref[micb_index] == 0)) { in wcd9335_micbias_control()
2571 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in __wcd9335_codec_enable_micbias()
2574 if (strnstr(w->name, "MIC BIAS1", sizeof("MIC BIAS1"))) in __wcd9335_codec_enable_micbias()
2576 else if (strnstr(w->name, "MIC BIAS2", sizeof("MIC BIAS2"))) in __wcd9335_codec_enable_micbias()
2578 else if (strnstr(w->name, "MIC BIAS3", sizeof("MIC BIAS3"))) in __wcd9335_codec_enable_micbias()
2580 else if (strnstr(w->name, "MIC BIAS4", sizeof("MIC BIAS4"))) in __wcd9335_codec_enable_micbias()
2583 return -EINVAL; in __wcd9335_codec_enable_micbias()
2641 dev_err(comp->dev, "%s: invalid amic: %d\n", in wcd9335_codec_set_tx_hold()
2650 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_adc()
2654 wcd9335_codec_set_tx_hold(comp, w->reg, true); in wcd9335_codec_enable_adc()
2672 /* Check whether adc mux input is AMIC or DMIC */ in wcd9335_codec_find_amic_input()
2678 reg = WCD9335_CDC_TX_INP_MUX_ADC_MUX4_CFG0 + adc_mux_n - 4; in wcd9335_codec_find_amic_input()
2690 int amic) in wcd9335_codec_get_amic_pwlvl_reg() argument
2694 switch (amic) { in wcd9335_codec_get_amic_pwlvl_reg()
2710 dev_err(comp->dev, "invalid amic: %d\n", amic); in wcd9335_codec_get_amic_pwlvl_reg()
2720 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_dec()
2731 widget_name = kmemdup_nul(w->name, 15, GFP_KERNEL); in wcd9335_codec_enable_dec()
2733 return -ENOMEM; in wcd9335_codec_enable_dec()
2738 dev_err(comp->dev, "%s: Invalid decimator = %s\n", in wcd9335_codec_enable_dec()
2739 __func__, w->name); in wcd9335_codec_enable_dec()
2740 ret = -EINVAL; in wcd9335_codec_enable_dec()
2747 dev_err(comp->dev, "%s: decimator index not found\n", in wcd9335_codec_enable_dec()
2749 ret = -EINVAL; in wcd9335_codec_enable_dec()
2755 dev_err(comp->dev, "%s: Invalid decimator = %s\n", in wcd9335_codec_enable_dec()
2757 ret = -EINVAL; in wcd9335_codec_enable_dec()
2856 dev_err(component->dev, in wcd9335_get_dmic_clk_val()
2867 dev_err(component->dev, in wcd9335_get_dmic_clk_val()
2894 dev_err(component->dev, in wcd9335_get_dmic_clk_val()
2907 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_dmic()
2917 wname = strpbrk(w->name, "012345"); in wcd9335_codec_enable_dmic()
2919 dev_err(comp->dev, "%s: widget not found\n", __func__); in wcd9335_codec_enable_dmic()
2920 return -EINVAL; in wcd9335_codec_enable_dmic()
2925 dev_err(comp->dev, "%s: Invalid DMIC line on the codec\n", in wcd9335_codec_enable_dmic()
2927 return -EINVAL; in wcd9335_codec_enable_dmic()
2933 dmic_clk_cnt = &(wcd->dmic_0_1_clk_cnt); in wcd9335_codec_enable_dmic()
2938 dmic_clk_cnt = &(wcd->dmic_2_3_clk_cnt); in wcd9335_codec_enable_dmic()
2943 dmic_clk_cnt = &(wcd->dmic_4_5_clk_cnt); in wcd9335_codec_enable_dmic()
2947 dev_err(comp->dev, "%s: Invalid DMIC Selection\n", in wcd9335_codec_enable_dmic()
2949 return -EINVAL; in wcd9335_codec_enable_dmic()
2956 wcd->mclk_rate, in wcd9335_codec_enable_dmic()
2957 wcd->dmic_sample_rate); in wcd9335_codec_enable_dmic()
2972 wcd->mclk_rate, in wcd9335_codec_enable_dmic()
2973 wcd->mad_dmic_sample_rate); in wcd9335_codec_enable_dmic()
2974 (*dmic_clk_cnt)--; in wcd9335_codec_enable_dmic()
2994 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_codec_enable_int_port()
2997 list_for_each_entry(ch, &dai->slim_ch_list, list) { in wcd9335_codec_enable_int_port()
2998 if (ch->port >= WCD9335_RX_START) { in wcd9335_codec_enable_int_port()
2999 port_num = ch->port - WCD9335_RX_START; in wcd9335_codec_enable_int_port()
3002 port_num = ch->port; in wcd9335_codec_enable_int_port()
3006 regmap_read(wcd->if_regmap, reg, &val); in wcd9335_codec_enable_int_port()
3008 regmap_write(wcd->if_regmap, reg, in wcd9335_codec_enable_int_port()
3017 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_slim()
3019 struct wcd_slim_codec_dai_data *dai = &wcd->dai[w->shift]; in wcd9335_codec_enable_slim()
3026 kfree(dai->sconfig.chs); in wcd9335_codec_enable_slim()
3037 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_mix_path()
3042 switch (w->reg) { in wcd9335_codec_enable_mix_path()
3071 dev_err(comp->dev, "%s: No gain register avail for %s\n", in wcd9335_codec_enable_mix_path()
3072 __func__, w->name); in wcd9335_codec_enable_mix_path()
3188 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_enable_prim_interpolator()
3194 wcd->prim_int_users[ind]++; in wcd9335_codec_enable_prim_interpolator()
3195 if (wcd->prim_int_users[ind] == 1) { in wcd9335_codec_enable_prim_interpolator()
3213 wcd->prim_int_users[ind]--; in wcd9335_codec_enable_prim_interpolator()
3214 if (wcd->prim_int_users[ind] == 0) { in wcd9335_codec_enable_prim_interpolator()
3235 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_config_compander()
3243 comp = interp_n - 1; in wcd9335_config_compander()
3244 if (!wcd->comp_enabled[comp]) in wcd9335_config_compander()
3296 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_interpolator()
3302 if (!(strcmp(w->name, "RX INT0 INTERP"))) { in wcd9335_codec_enable_interpolator()
3305 } else if (!(strcmp(w->name, "RX INT1 INTERP"))) { in wcd9335_codec_enable_interpolator()
3308 } else if (!(strcmp(w->name, "RX INT2 INTERP"))) { in wcd9335_codec_enable_interpolator()
3311 } else if (!(strcmp(w->name, "RX INT3 INTERP"))) { in wcd9335_codec_enable_interpolator()
3314 } else if (!(strcmp(w->name, "RX INT4 INTERP"))) { in wcd9335_codec_enable_interpolator()
3317 } else if (!(strcmp(w->name, "RX INT5 INTERP"))) { in wcd9335_codec_enable_interpolator()
3320 } else if (!(strcmp(w->name, "RX INT6 INTERP"))) { in wcd9335_codec_enable_interpolator()
3323 } else if (!(strcmp(w->name, "RX INT7 INTERP"))) { in wcd9335_codec_enable_interpolator()
3326 } else if (!(strcmp(w->name, "RX INT8 INTERP"))) { in wcd9335_codec_enable_interpolator()
3330 dev_err(comp->dev, "%s: Interpolator reg not found\n", in wcd9335_codec_enable_interpolator()
3332 return -EINVAL; in wcd9335_codec_enable_interpolator()
3341 wcd9335_config_compander(comp, w->shift, event); in wcd9335_codec_enable_interpolator()
3347 wcd9335_config_compander(comp, w->shift, event); in wcd9335_codec_enable_interpolator()
3358 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_codec_hph_mode_gain_opt()
3382 wcd->hph_l_gain = hph_l_en & 0x1F; in wcd9335_codec_hph_mode_gain_opt()
3387 wcd->hph_r_gain = hph_r_en & 0x1F; in wcd9335_codec_hph_mode_gain_opt()
3532 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_hphl_dac_event()
3533 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_hphl_dac_event()
3534 int hph_mode = wcd->hph_mode; in wcd9335_codec_hphl_dac_event()
3544 dev_err(comp->dev, "Incorrect DEM Input\n"); in wcd9335_codec_hphl_dac_event()
3545 return -EINVAL; in wcd9335_codec_hphl_dac_event()
3547 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd9335_codec_hphl_dac_event()
3564 if (!(wcd_clsh_ctrl_get_state(wcd->clsh_ctrl) & in wcd9335_codec_hphl_dac_event()
3568 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd9335_codec_hphl_dac_event()
3581 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_lineout_dac_event()
3582 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_lineout_dac_event()
3586 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd9335_codec_lineout_dac_event()
3590 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd9335_codec_lineout_dac_event()
3601 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_ear_dac_event()
3602 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_ear_dac_event()
3606 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd9335_codec_ear_dac_event()
3611 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd9335_codec_ear_dac_event()
3641 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3646 if (wcd->comp_enabled[COMPANDER_1] || in wcd9335_codec_hph_post_pa_config()
3647 wcd->comp_enabled[COMPANDER_2]) { in wcd9335_codec_hph_post_pa_config()
3649 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3653 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3657 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3662 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3665 wcd->hph_l_gain); in wcd9335_codec_hph_post_pa_config()
3666 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3669 wcd->hph_r_gain); in wcd9335_codec_hph_post_pa_config()
3673 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3683 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_hphr_dac_event()
3684 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_hphr_dac_event()
3685 int hph_mode = wcd->hph_mode; in wcd9335_codec_hphr_dac_event()
3697 dev_err(comp->dev, "DEM Input not set correctly, hph_mode: %d\n", in wcd9335_codec_hphr_dac_event()
3699 return -EINVAL; in wcd9335_codec_hphr_dac_event()
3702 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, in wcd9335_codec_hphr_dac_event()
3715 if (!(wcd_clsh_ctrl_get_state(wcd->clsh_ctrl) & in wcd9335_codec_hphr_dac_event()
3719 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd9335_codec_hphr_dac_event()
3732 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_hphl_pa()
3733 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_enable_hphl_pa()
3734 int hph_mode = wcd->hph_mode; in wcd9335_codec_enable_hphl_pa()
3741 * 7ms sleep is required after PA is enabled as per in wcd9335_codec_enable_hphl_pa()
3766 /* 5ms sleep is required after PA is disabled as per in wcd9335_codec_enable_hphl_pa()
3780 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_lineout_pa()
3783 if (w->reg == WCD9335_ANA_LO_1_2) { in wcd9335_codec_enable_lineout_pa()
3784 if (w->shift == 7) { in wcd9335_codec_enable_lineout_pa()
3787 } else if (w->shift == 6) { in wcd9335_codec_enable_lineout_pa()
3791 } else if (w->reg == WCD9335_ANA_LO_3_4) { in wcd9335_codec_enable_lineout_pa()
3792 if (w->shift == 7) { in wcd9335_codec_enable_lineout_pa()
3795 } else if (w->shift == 6) { in wcd9335_codec_enable_lineout_pa()
3800 dev_err(comp->dev, "Error enabling lineout PA\n"); in wcd9335_codec_enable_lineout_pa()
3801 return -EINVAL; in wcd9335_codec_enable_lineout_pa()
3806 /* 5ms sleep is required after PA is enabled as per in wcd9335_codec_enable_lineout_pa()
3822 /* 5ms sleep is required after PA is disabled as per in wcd9335_codec_enable_lineout_pa()
3851 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_rx_bias()
3852 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_enable_rx_bias()
3856 wcd->rx_bias_count++; in wcd9335_codec_enable_rx_bias()
3857 if (wcd->rx_bias_count == 1) { in wcd9335_codec_enable_rx_bias()
3866 wcd->rx_bias_count--; in wcd9335_codec_enable_rx_bias()
3867 if (!wcd->rx_bias_count) in wcd9335_codec_enable_rx_bias()
3881 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_hphr_pa()
3882 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_enable_hphr_pa()
3883 int hph_mode = wcd->hph_mode; in wcd9335_codec_enable_hphr_pa()
3890 * 7ms sleep is required after PA is enabled as per in wcd9335_codec_enable_hphr_pa()
3914 /* 5ms sleep is required after PA is disabled as per in wcd9335_codec_enable_hphr_pa()
3927 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_ear_pa()
3931 /* 5ms sleep is required after PA is enabled as per in wcd9335_codec_enable_ear_pa()
3949 /* 5ms sleep is required after PA is disabled as per in wcd9335_codec_enable_ear_pa()
3972 regmap_read(wcd->if_regmap, i, &val); in wcd9335_slimbus_irq()
3978 port_id = (tx ? j - 16 : j); in wcd9335_slimbus_irq()
3979 regmap_read(wcd->if_regmap, in wcd9335_slimbus_irq()
3989 wcd->if_regmap, reg, &int_val); in wcd9335_slimbus_irq()
3999 dev_err_ratelimited(wcd->dev, in wcd9335_slimbus_irq()
4004 dev_err_ratelimited(wcd->dev, in wcd9335_slimbus_irq()
4017 wcd->if_regmap, reg, &int_val); in wcd9335_slimbus_irq()
4020 regmap_write(wcd->if_regmap, in wcd9335_slimbus_irq()
4025 regmap_write(wcd->if_regmap, in wcd9335_slimbus_irq()
4047 irq = regmap_irq_get_virq(wcd->irq_data, wcd9335_irqs[i].irq); in wcd9335_setup_irqs()
4049 dev_err(wcd->dev, "Failed to get %s\n", in wcd9335_setup_irqs()
4054 ret = devm_request_threaded_irq(wcd->dev, irq, NULL, in wcd9335_setup_irqs()
4060 dev_err(wcd->dev, "Failed to request %s\n", in wcd9335_setup_irqs()
4068 regmap_write(wcd->if_regmap, WCD9335_SLIM_PGD_PORT_INT_EN0 + i, in wcd9335_setup_irqs()
4080 regmap_write(wcd->if_regmap, WCD9335_SLIM_PGD_PORT_INT_EN0 + i, in wcd9335_teardown_irqs()
4087 struct snd_soc_component *comp = wcd->component; in wcd9335_cdc_sido_ccl_enable()
4090 if (++wcd->sido_ccl_cnt == 1) in wcd9335_cdc_sido_ccl_enable()
4094 if (wcd->sido_ccl_cnt == 0) { in wcd9335_cdc_sido_ccl_enable()
4095 dev_err(wcd->dev, "sido_ccl already disabled\n"); in wcd9335_cdc_sido_ccl_enable()
4098 if (--wcd->sido_ccl_cnt == 0) in wcd9335_cdc_sido_ccl_enable()
4106 wcd->master_bias_users++; in wcd9335_enable_master_bias()
4107 if (wcd->master_bias_users == 1) { in wcd9335_enable_master_bias()
4108 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_enable_master_bias()
4111 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_enable_master_bias()
4115 * 1ms delay is required after pre-charge is enabled in wcd9335_enable_master_bias()
4119 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_enable_master_bias()
4122 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_enable_master_bias()
4133 if (wcd->master_bias_users <= 0) in wcd9335_enable_mclk()
4134 return -EINVAL; in wcd9335_enable_mclk()
4136 if (((wcd->clk_mclk_users == 0) && (wcd->clk_type == WCD_CLK_MCLK)) || in wcd9335_enable_mclk()
4137 ((wcd->clk_mclk_users > 0) && (wcd->clk_type != WCD_CLK_MCLK))) { in wcd9335_enable_mclk()
4138 dev_err(wcd->dev, "Error enabling MCLK, clk_type: %d\n", in wcd9335_enable_mclk()
4139 wcd->clk_type); in wcd9335_enable_mclk()
4140 return -EINVAL; in wcd9335_enable_mclk()
4143 if (++wcd->clk_mclk_users == 1) { in wcd9335_enable_mclk()
4144 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_enable_mclk()
4147 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_enable_mclk()
4150 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_enable_mclk()
4153 regmap_update_bits(wcd->regmap, in wcd9335_enable_mclk()
4157 regmap_update_bits(wcd->regmap, in wcd9335_enable_mclk()
4168 wcd->clk_type = WCD_CLK_MCLK; in wcd9335_enable_mclk()
4175 if (wcd->clk_mclk_users <= 0) in wcd9335_disable_mclk()
4176 return -EINVAL; in wcd9335_disable_mclk()
4178 if (--wcd->clk_mclk_users == 0) { in wcd9335_disable_mclk()
4179 if (wcd->clk_rco_users > 0) { in wcd9335_disable_mclk()
4181 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_disable_mclk()
4184 wcd->clk_type = WCD_CLK_RCO; in wcd9335_disable_mclk()
4186 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_disable_mclk()
4189 wcd->clk_type = WCD_CLK_OFF; in wcd9335_disable_mclk()
4192 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_disable_mclk()
4202 if (wcd->master_bias_users <= 0) in wcd9335_disable_master_bias()
4203 return -EINVAL; in wcd9335_disable_master_bias()
4205 wcd->master_bias_users--; in wcd9335_disable_master_bias()
4206 if (wcd->master_bias_users == 0) { in wcd9335_disable_master_bias()
4207 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_disable_master_bias()
4210 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_disable_master_bias()
4224 ret = clk_prepare_enable(wcd->mclk); in wcd9335_cdc_req_mclk_enable()
4226 dev_err(wcd->dev, "%s: ext clk enable failed\n", in wcd9335_cdc_req_mclk_enable()
4240 clk_disable_unprepare(wcd->mclk); in wcd9335_cdc_req_mclk_enable()
4250 struct snd_soc_component *comp = wcd->component; in wcd9335_codec_apply_sido_voltage()
4253 if (req_mv == wcd->sido_voltage) in wcd9335_codec_apply_sido_voltage()
4266 wcd->sido_voltage = req_mv; in wcd9335_codec_apply_sido_voltage()
4280 dev_err(wcd->dev, "Ext clk enable failed\n"); in wcd9335_codec_update_sido_voltage()
4294 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in _wcd9335_codec_enable_mclk()
4306 wcd->sido_voltage); in _wcd9335_codec_enable_mclk()
4316 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_mclk()
4690 SND_SOC_DAPM_MUX("AMIC MUX0", SND_SOC_NOPM, 0, 0,
4692 SND_SOC_DAPM_MUX("AMIC MUX1", SND_SOC_NOPM, 0, 0,
4694 SND_SOC_DAPM_MUX("AMIC MUX2", SND_SOC_NOPM, 0, 0,
4696 SND_SOC_DAPM_MUX("AMIC MUX3", SND_SOC_NOPM, 0, 0,
4698 SND_SOC_DAPM_MUX("AMIC MUX4", SND_SOC_NOPM, 0, 0,
4700 SND_SOC_DAPM_MUX("AMIC MUX5", SND_SOC_NOPM, 0, 0,
4702 SND_SOC_DAPM_MUX("AMIC MUX6", SND_SOC_NOPM, 0, 0,
4704 SND_SOC_DAPM_MUX("AMIC MUX7", SND_SOC_NOPM, 0, 0,
4706 SND_SOC_DAPM_MUX("AMIC MUX8", SND_SOC_NOPM, 0, 0,
4785 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_enable_sido_buck()
4800 wcd->sido_input_src = SIDO_SOURCE_RCO_BG; in wcd9335_enable_sido_buck()
4811 * 5ms sleep required after enabling efuse control in wcd9335_enable_efuse_sensing()
4829 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_codec_init()
4833 regmap_update_bits(wcd->regmap, WCD9335_CODEC_RPM_CLK_GATE, in wcd9335_codec_init()
4836 regmap_update_bits(wcd->regmap, WCD9335_CODEC_RPM_CLK_MCLK_CFG, in wcd9335_codec_init()
4851 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_codec_probe()
4855 snd_soc_component_init_regmap(component, wcd->regmap); in wcd9335_codec_probe()
4856 /* Class-H Init*/ in wcd9335_codec_probe()
4857 wcd->clsh_ctrl = wcd_clsh_ctrl_alloc(component, WCD9335); in wcd9335_codec_probe()
4858 if (IS_ERR(wcd->clsh_ctrl)) in wcd9335_codec_probe()
4859 return PTR_ERR(wcd->clsh_ctrl); in wcd9335_codec_probe()
4861 /* Default HPH Mode to Class-H HiFi */ in wcd9335_codec_probe()
4862 wcd->hph_mode = CLS_H_HIFI; in wcd9335_codec_probe()
4863 wcd->component = component; in wcd9335_codec_probe()
4868 INIT_LIST_HEAD(&wcd->dai[i].slim_ch_list); in wcd9335_codec_probe()
4877 wcd_clsh_ctrl_free(wcd->clsh_ctrl); in wcd9335_codec_probe()
4883 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_remove()
4885 wcd_clsh_ctrl_free(wcd->clsh_ctrl); in wcd9335_codec_remove()
4893 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_set_sysclk()
4895 wcd->mclk_rate = freq; in wcd9335_codec_set_sysclk()
4897 if (wcd->mclk_rate == WCD9335_MCLK_CLK_12P288MHZ) in wcd9335_codec_set_sysclk()
4902 else if (wcd->mclk_rate == WCD9335_MCLK_CLK_9P6MHZ) in wcd9335_codec_set_sysclk()
4908 return clk_set_rate(wcd->mclk, freq); in wcd9335_codec_set_sysclk()
4926 struct device *dev = wcd->dev; in wcd9335_probe()
4928 memcpy(wcd->rx_chs, wcd9335_rx_chs, sizeof(wcd9335_rx_chs)); in wcd9335_probe()
4929 memcpy(wcd->tx_chs, wcd9335_tx_chs, sizeof(wcd9335_tx_chs)); in wcd9335_probe()
4931 wcd->sido_input_src = SIDO_SOURCE_INTERNAL; in wcd9335_probe()
4932 wcd->sido_voltage = SIDO_VOLTAGE_NOMINAL_MV; in wcd9335_probe()
4984 .name = "WCD9335-IFC-DEV",
5037 struct device *dev = wcd->dev; in wcd9335_parse_dt()
5040 wcd->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in wcd9335_parse_dt()
5041 if (IS_ERR(wcd->reset_gpio)) in wcd9335_parse_dt()
5042 return dev_err_probe(dev, PTR_ERR(wcd->reset_gpio), "Reset GPIO missing from DT\n"); in wcd9335_parse_dt()
5044 wcd->mclk = devm_clk_get(dev, "mclk"); in wcd9335_parse_dt()
5045 if (IS_ERR(wcd->mclk)) in wcd9335_parse_dt()
5046 return dev_err_probe(dev, PTR_ERR(wcd->mclk), "mclk not found\n"); in wcd9335_parse_dt()
5048 wcd->native_clk = devm_clk_get(dev, "slimbus"); in wcd9335_parse_dt()
5049 if (IS_ERR(wcd->native_clk)) in wcd9335_parse_dt()
5050 return dev_err_probe(dev, PTR_ERR(wcd->native_clk), "slimbus clock not found\n"); in wcd9335_parse_dt()
5071 gpiod_set_value(wcd->reset_gpio, 1); in wcd9335_power_on_reset()
5073 gpiod_set_value(wcd->reset_gpio, 0); in wcd9335_power_on_reset()
5081 struct regmap *rm = wcd->regmap; in wcd9335_bring_up()
5088 dev_err(wcd->dev, "WCD9335 CODEC version detection fail!\n"); in wcd9335_bring_up()
5089 return -EINVAL; in wcd9335_bring_up()
5093 dev_info(wcd->dev, "WCD9335 CODEC version is v2.0\n"); in wcd9335_bring_up()
5094 wcd->version = WCD9335_VERSION_2_0; in wcd9335_bring_up()
5104 dev_err(wcd->dev, "WCD9335 CODEC version not supported\n"); in wcd9335_bring_up()
5105 return -EINVAL; in wcd9335_bring_up()
5120 wcd->intr1 = of_irq_get_byname(wcd->dev->of_node, "intr1"); in wcd9335_irq_init()
5121 if (wcd->intr1 < 0) in wcd9335_irq_init()
5122 return dev_err_probe(wcd->dev, wcd->intr1, in wcd9335_irq_init()
5125 ret = devm_regmap_add_irq_chip(wcd->dev, wcd->regmap, wcd->intr1, in wcd9335_irq_init()
5127 &wcd9335_regmap_irq1_chip, &wcd->irq_data); in wcd9335_irq_init()
5129 return dev_err_probe(wcd->dev, ret, "Failed to register IRQ chip\n"); in wcd9335_irq_init()
5136 struct device *dev = &slim->dev; in wcd9335_slim_probe()
5142 return -ENOMEM; in wcd9335_slim_probe()
5144 wcd->dev = dev; in wcd9335_slim_probe()
5161 struct device *dev = &sdev->dev; in wcd9335_slim_status()
5168 ifc_dev_np = of_parse_phandle(dev->of_node, "slim-ifc-dev", 0); in wcd9335_slim_status()
5171 return -EINVAL; in wcd9335_slim_status()
5174 wcd->slim = sdev; in wcd9335_slim_status()
5175 wcd->slim_ifc_dev = of_slim_get_device(sdev->ctrl, ifc_dev_np); in wcd9335_slim_status()
5177 if (!wcd->slim_ifc_dev) { in wcd9335_slim_status()
5179 return -EINVAL; in wcd9335_slim_status()
5182 slim_get_logical_addr(wcd->slim_ifc_dev); in wcd9335_slim_status()
5184 wcd->regmap = regmap_init_slimbus(sdev, &wcd9335_regmap_config); in wcd9335_slim_status()
5185 if (IS_ERR(wcd->regmap)) in wcd9335_slim_status()
5186 return dev_err_probe(dev, PTR_ERR(wcd->regmap), in wcd9335_slim_status()
5189 wcd->if_regmap = regmap_init_slimbus(wcd->slim_ifc_dev, in wcd9335_slim_status()
5191 if (IS_ERR(wcd->if_regmap)) in wcd9335_slim_status()
5192 return dev_err_probe(dev, PTR_ERR(wcd->if_regmap), in wcd9335_slim_status()
5218 .name = "wcd9335-slim",