Lines Matching +full:dmic +full:- +full:sample +full:- +full:rate

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
19 #include <sound/soc-dapm.h>
26 #include "wcd-clsh-v2.h"
28 #include <dt-bindings/sound/qcom,wcd9335.h>
99 #define WCD9335_CALCULATE_VOUT_D(req_mv) (((req_mv - 650) * 10) / 25)
147 {"ADC MUX" #id, "DMIC", "DMIC MUX" #id}, \
149 {"DMIC MUX" #id, "DMIC0", "DMIC0"}, \
150 {"DMIC MUX" #id, "DMIC1", "DMIC1"}, \
151 {"DMIC MUX" #id, "DMIC2", "DMIC2"}, \
152 {"DMIC MUX" #id, "DMIC3", "DMIC3"}, \
153 {"DMIC MUX" #id, "DMIC4", "DMIC4"}, \
154 {"DMIC MUX" #id, "DMIC5", "DMIC5"}, \
394 int rate; member
407 {24000, -EINVAL},/* 24K */
549 "Class H Invalid", "Class-H Hi-Fi", "Class-H Low Power", "Class-AB",
550 "Class-H Hi-Fi Low Power"
558 "DMIC", "AMIC", "ANC_FB_TUNE1", "ANC_FB_TUNE2"
610 static const DECLARE_TLV_DB_SCALE(digital_gain, -8400, 100, -8400);
1178 SOC_DAPM_ENUM("DMIC MUX0 Mux", tx_dmic_mux0_enum);
1181 SOC_DAPM_ENUM("DMIC MUX1 Mux", tx_dmic_mux1_enum);
1184 SOC_DAPM_ENUM("DMIC MUX2 Mux", tx_dmic_mux2_enum);
1187 SOC_DAPM_ENUM("DMIC MUX3 Mux", tx_dmic_mux3_enum);
1190 SOC_DAPM_ENUM("DMIC MUX4 Mux", tx_dmic_mux4_enum);
1193 SOC_DAPM_ENUM("DMIC MUX5 Mux", tx_dmic_mux5_enum);
1196 SOC_DAPM_ENUM("DMIC MUX6 Mux", tx_dmic_mux6_enum);
1199 SOC_DAPM_ENUM("DMIC MUX7 Mux", tx_dmic_mux7_enum);
1202 SOC_DAPM_ENUM("DMIC MUX8 Mux", tx_dmic_mux8_enum);
1262 struct wcd9335_codec *wcd = dev_get_drvdata(w->dapm->dev); in slim_rx_mux_get()
1263 u32 port_id = w->shift; in slim_rx_mux_get()
1265 ucontrol->value.enumerated.item[0] = wcd->rx_port_value[port_id]; in slim_rx_mux_get()
1274 struct wcd9335_codec *wcd = dev_get_drvdata(w->dapm->dev); in slim_rx_mux_put()
1275 struct soc_enum *e = (struct soc_enum *)kc->private_value; in slim_rx_mux_put()
1277 u32 port_id = w->shift; in slim_rx_mux_put()
1279 if (wcd->rx_port_value[port_id] == ucontrol->value.enumerated.item[0]) in slim_rx_mux_put()
1282 wcd->rx_port_value[port_id] = ucontrol->value.enumerated.item[0]; in slim_rx_mux_put()
1285 list_del_init(&wcd->rx_chs[port_id].list); in slim_rx_mux_put()
1287 switch (wcd->rx_port_value[port_id]) { in slim_rx_mux_put()
1292 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
1293 &wcd->dai[AIF1_PB].slim_ch_list); in slim_rx_mux_put()
1296 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
1297 &wcd->dai[AIF2_PB].slim_ch_list); in slim_rx_mux_put()
1300 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
1301 &wcd->dai[AIF3_PB].slim_ch_list); in slim_rx_mux_put()
1304 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
1305 &wcd->dai[AIF4_PB].slim_ch_list); in slim_rx_mux_put()
1308 dev_err(wcd->dev, "Unknown AIF %d\n", wcd->rx_port_value[port_id]); in slim_rx_mux_put()
1312 snd_soc_dapm_mux_update_power(w->dapm, kc, wcd->rx_port_value[port_id], in slim_rx_mux_put()
1317 return -EINVAL; in slim_rx_mux_put()
1325 struct wcd9335_codec *wcd = dev_get_drvdata(dapm->dev); in slim_tx_mixer_get()
1328 (struct soc_mixer_control *)kc->private_value; in slim_tx_mixer_get()
1329 int dai_id = widget->shift; in slim_tx_mixer_get()
1330 int port_id = mixer->shift; in slim_tx_mixer_get()
1332 ucontrol->value.integer.value[0] = wcd->tx_port_value[port_id] == dai_id; in slim_tx_mixer_get()
1342 struct wcd9335_codec *wcd = dev_get_drvdata(widget->dapm->dev); in slim_tx_mixer_put()
1345 (struct soc_mixer_control *)kc->private_value; in slim_tx_mixer_put()
1346 int enable = ucontrol->value.integer.value[0]; in slim_tx_mixer_put()
1347 int dai_id = widget->shift; in slim_tx_mixer_put()
1348 int port_id = mixer->shift; in slim_tx_mixer_put()
1355 if (enable && wcd->tx_port_value[port_id] != dai_id) { in slim_tx_mixer_put()
1356 wcd->tx_port_value[port_id] = dai_id; in slim_tx_mixer_put()
1357 list_add_tail(&wcd->tx_chs[port_id].list, in slim_tx_mixer_put()
1358 &wcd->dai[dai_id].slim_ch_list); in slim_tx_mixer_put()
1359 } else if (!enable && wcd->tx_port_value[port_id] == dai_id) { in slim_tx_mixer_put()
1360 wcd->tx_port_value[port_id] = -1; in slim_tx_mixer_put()
1361 list_del_init(&wcd->tx_chs[port_id].list); in slim_tx_mixer_put()
1365 dev_err(wcd->dev, "Unknown AIF %d\n", dai_id); in slim_tx_mixer_put()
1366 return -EINVAL; in slim_tx_mixer_put()
1369 snd_soc_dapm_mixer_update_power(widget->dapm, kc, enable, update); in slim_tx_mixer_put()
1477 struct soc_enum *e = (struct soc_enum *)kc->private_value; in wcd9335_put_dec_enum()
1480 val = ucontrol->value.enumerated.item[0]; in wcd9335_put_dec_enum()
1482 switch (e->reg) { in wcd9335_put_dec_enum()
1511 return -EINVAL; in wcd9335_put_dec_enum()
1514 /* AMIC: 0, DMIC: 1 */ in wcd9335_put_dec_enum()
1526 struct soc_enum *e = (struct soc_enum *)kc->private_value; in wcd9335_int_dem_inp_mux_put()
1531 val = ucontrol->value.enumerated.item[0]; in wcd9335_int_dem_inp_mux_put()
1533 if (e->reg == WCD9335_CDC_RX0_RX_PATH_SEC0) in wcd9335_int_dem_inp_mux_put()
1535 else if (e->reg == WCD9335_CDC_RX1_RX_PATH_SEC0) in wcd9335_int_dem_inp_mux_put()
1537 else if (e->reg == WCD9335_CDC_RX2_RX_PATH_SEC0) in wcd9335_int_dem_inp_mux_put()
1540 return -EINVAL; in wcd9335_int_dem_inp_mux_put()
1612 u32 rate) in wcd9335_set_mix_interpolator_rate() argument
1614 struct snd_soc_component *component = dai->component; in wcd9335_set_mix_interpolator_rate()
1615 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_set_mix_interpolator_rate()
1619 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd9335_set_mix_interpolator_rate()
1625 if (val == (ch->shift + INTn_2_INP_SEL_RX0)) in wcd9335_set_mix_interpolator_rate()
1638 u32 rate) in wcd9335_set_prim_interpolator_rate() argument
1640 struct snd_soc_component *comp = dai->component; in wcd9335_set_prim_interpolator_rate()
1641 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_set_prim_interpolator_rate()
1646 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd9335_set_prim_interpolator_rate()
1647 inp = ch->shift + INTn_1_MIX_INP_SEL_RX0; in wcd9335_set_prim_interpolator_rate()
1668 /* rate is in Hz */ in wcd9335_set_prim_interpolator_rate()
1669 if ((j == 0) && (rate == 44100)) in wcd9335_set_prim_interpolator_rate()
1670 dev_info(wcd->dev, in wcd9335_set_prim_interpolator_rate()
1684 static int wcd9335_set_interpolator_rate(struct snd_soc_dai *dai, u32 rate) in wcd9335_set_interpolator_rate() argument
1688 /* set mixing path rate */ in wcd9335_set_interpolator_rate()
1690 if (rate == int_mix_rate_val[i].rate) { in wcd9335_set_interpolator_rate()
1692 int_mix_rate_val[i].rate_val, rate); in wcd9335_set_interpolator_rate()
1697 /* set primary path sample rate */ in wcd9335_set_interpolator_rate()
1699 if (rate == int_prim_rate_val[i].rate) { in wcd9335_set_interpolator_rate()
1701 int_prim_rate_val[i].rate_val, rate); in wcd9335_set_interpolator_rate()
1713 struct list_head *slim_ch_list = &dai_data->slim_ch_list; in wcd9335_slim_set_hw_params()
1714 struct slim_stream_config *cfg = &dai_data->sconfig; in wcd9335_slim_set_hw_params()
1719 cfg->ch_count = 0; in wcd9335_slim_set_hw_params()
1720 cfg->direction = direction; in wcd9335_slim_set_hw_params()
1721 cfg->port_mask = 0; in wcd9335_slim_set_hw_params()
1725 cfg->ch_count++; in wcd9335_slim_set_hw_params()
1726 payload |= 1 << ch->shift; in wcd9335_slim_set_hw_params()
1727 cfg->port_mask |= BIT(ch->port); in wcd9335_slim_set_hw_params()
1730 cfg->chs = kcalloc(cfg->ch_count, sizeof(unsigned int), GFP_KERNEL); in wcd9335_slim_set_hw_params()
1731 if (!cfg->chs) in wcd9335_slim_set_hw_params()
1732 return -ENOMEM; in wcd9335_slim_set_hw_params()
1736 cfg->chs[i++] = ch->ch_num; in wcd9335_slim_set_hw_params()
1739 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1740 WCD9335_SLIM_PGD_RX_PORT_MULTI_CHNL_0(ch->port), in wcd9335_slim_set_hw_params()
1747 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1748 WCD9335_SLIM_PGD_RX_PORT_CFG(ch->port), in wcd9335_slim_set_hw_params()
1753 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1754 WCD9335_SLIM_PGD_TX_PORT_MULTI_CHNL_0(ch->port), in wcd9335_slim_set_hw_params()
1760 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1761 WCD9335_SLIM_PGD_TX_PORT_MULTI_CHNL_1(ch->port), in wcd9335_slim_set_hw_params()
1767 ret = regmap_write(wcd->if_regmap, in wcd9335_slim_set_hw_params()
1768 WCD9335_SLIM_PGD_TX_PORT_CFG(ch->port), in wcd9335_slim_set_hw_params()
1776 dai_data->sruntime = slim_stream_allocate(wcd->slim, "WCD9335-SLIM"); in wcd9335_slim_set_hw_params()
1781 dev_err(wcd->dev, "Error Setting slim hw params\n"); in wcd9335_slim_set_hw_params()
1782 kfree(cfg->chs); in wcd9335_slim_set_hw_params()
1783 cfg->chs = NULL; in wcd9335_slim_set_hw_params()
1789 u8 rate_val, u32 rate) in wcd9335_set_decimator_rate() argument
1791 struct snd_soc_component *comp = dai->component; in wcd9335_set_decimator_rate()
1796 int decimator = -1; in wcd9335_set_decimator_rate()
1798 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd9335_set_decimator_rate()
1799 tx_port = ch->port; in wcd9335_set_decimator_rate()
1801 dev_err(wcd->dev, "Invalid SLIM TX%u port DAI ID:%d\n", in wcd9335_set_decimator_rate()
1802 tx_port, dai->id); in wcd9335_set_decimator_rate()
1803 return -EINVAL; in wcd9335_set_decimator_rate()
1805 /* Find the SB TX MUX input - which decimator is connected */ in wcd9335_set_decimator_rate()
1812 shift = ((tx_port - 4) << 1); in wcd9335_set_decimator_rate()
1816 shift = ((tx_port - 8) << 1); in wcd9335_set_decimator_rate()
1840 decimator = tx_mux_sel - 1; in wcd9335_set_decimator_rate()
1853 dev_err(wcd->dev, "RX_MIX_TX%u going to SLIM TX%u\n", in wcd9335_set_decimator_rate()
1856 dev_err(wcd->dev, "ERROR: Invalid decimator: %d\n", in wcd9335_set_decimator_rate()
1858 return -EINVAL; in wcd9335_set_decimator_rate()
1872 wcd = snd_soc_component_get_drvdata(dai->component); in wcd9335_hw_params()
1874 switch (substream->stream) { in wcd9335_hw_params()
1878 dev_err(wcd->dev, "cannot set sample rate: %u\n", in wcd9335_hw_params()
1884 wcd->dai[dai->id].sconfig.bps = params_width(params); in wcd9335_hw_params()
1887 dev_err(wcd->dev, "%s: Invalid format 0x%x\n", in wcd9335_hw_params()
1889 return -EINVAL; in wcd9335_hw_params()
1917 dev_err(wcd->dev, "%s: Invalid TX sample rate: %d\n", in wcd9335_hw_params()
1919 return -EINVAL; in wcd9335_hw_params()
1926 dev_err(wcd->dev, "Cannot set TX Decimator rate\n"); in wcd9335_hw_params()
1931 wcd->dai[dai->id].sconfig.bps = params_width(params); in wcd9335_hw_params()
1934 dev_err(wcd->dev, "%s: Invalid format 0x%x\n", in wcd9335_hw_params()
1936 return -EINVAL; in wcd9335_hw_params()
1940 dev_err(wcd->dev, "Invalid stream type %d\n", in wcd9335_hw_params()
1941 substream->stream); in wcd9335_hw_params()
1942 return -EINVAL; in wcd9335_hw_params()
1945 wcd->dai[dai->id].sconfig.rate = params_rate(params); in wcd9335_hw_params()
1946 wcd9335_slim_set_hw_params(wcd, &wcd->dai[dai->id], substream->stream); in wcd9335_hw_params()
1958 wcd = snd_soc_component_get_drvdata(dai->component); in wcd9335_trigger()
1960 dai_data = &wcd->dai[dai->id]; in wcd9335_trigger()
1966 cfg = &dai_data->sconfig; in wcd9335_trigger()
1967 slim_stream_prepare(dai_data->sruntime, cfg); in wcd9335_trigger()
1968 slim_stream_enable(dai_data->sruntime); in wcd9335_trigger()
1973 slim_stream_disable(dai_data->sruntime); in wcd9335_trigger()
1974 slim_stream_unprepare(dai_data->sruntime); in wcd9335_trigger()
1992 wcd = snd_soc_component_get_drvdata(dai->component); in wcd9335_set_channel_map()
1995 dev_err(wcd->dev, "Invalid tx_slot=%p, rx_slot=%p\n", in wcd9335_set_channel_map()
1997 return -EINVAL; in wcd9335_set_channel_map()
2000 wcd->num_rx_port = rx_num; in wcd9335_set_channel_map()
2002 wcd->rx_chs[i].ch_num = rx_slot[i]; in wcd9335_set_channel_map()
2003 INIT_LIST_HEAD(&wcd->rx_chs[i].list); in wcd9335_set_channel_map()
2006 wcd->num_tx_port = tx_num; in wcd9335_set_channel_map()
2008 wcd->tx_chs[i].ch_num = tx_slot[i]; in wcd9335_set_channel_map()
2009 INIT_LIST_HEAD(&wcd->tx_chs[i].list); in wcd9335_set_channel_map()
2023 wcd = snd_soc_component_get_drvdata(dai->component); in wcd9335_get_channel_map()
2025 switch (dai->id) { in wcd9335_get_channel_map()
2031 dev_err(wcd->dev, "Invalid rx_slot %p or rx_num %p\n", in wcd9335_get_channel_map()
2033 return -EINVAL; in wcd9335_get_channel_map()
2036 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd9335_get_channel_map()
2037 rx_slot[i++] = ch->ch_num; in wcd9335_get_channel_map()
2045 dev_err(wcd->dev, "Invalid tx_slot %p or tx_num %p\n", in wcd9335_get_channel_map()
2047 return -EINVAL; in wcd9335_get_channel_map()
2049 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd9335_get_channel_map()
2050 tx_slot[i++] = ch->ch_num; in wcd9335_get_channel_map()
2055 dev_err(wcd->dev, "Invalid DAI ID %x\n", dai->id); in wcd9335_get_channel_map()
2179 int comp = ((struct soc_mixer_control *)kc->private_value)->shift; in wcd9335_get_compander()
2180 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_get_compander()
2182 ucontrol->value.integer.value[0] = wcd->comp_enabled[comp]; in wcd9335_get_compander()
2190 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_set_compander()
2191 int comp = ((struct soc_mixer_control *) kc->private_value)->shift; in wcd9335_set_compander()
2192 int value = ucontrol->value.integer.value[0]; in wcd9335_set_compander()
2195 wcd->comp_enabled[comp] = value; in wcd9335_set_compander()
2229 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_rx_hph_mode_get()
2231 ucontrol->value.enumerated.item[0] = wcd->hph_mode; in wcd9335_rx_hph_mode_get()
2240 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_rx_hph_mode_put()
2243 mode_val = ucontrol->value.enumerated.item[0]; in wcd9335_rx_hph_mode_put()
2246 dev_err(wcd->dev, "Invalid HPH Mode, default to ClSH HiFi\n"); in wcd9335_rx_hph_mode_put()
2249 wcd->hph_mode = mode_val; in wcd9335_rx_hph_mode_put()
2255 /* -84dB min - 40dB max */
2257 -84, 40, digital_gain),
2259 -84, 40, digital_gain),
2261 -84, 40, digital_gain),
2263 -84, 40, digital_gain),
2265 -84, 40, digital_gain),
2267 -84, 40, digital_gain),
2269 -84, 40, digital_gain),
2271 -84, 40, digital_gain),
2273 -84, 40, digital_gain),
2275 -84, 40, digital_gain),
2277 -84, 40, digital_gain),
2279 -84, 40, digital_gain),
2281 -84, 40, digital_gain),
2283 -84, 40, digital_gain),
2285 -84, 40, digital_gain),
2287 -84, 40, digital_gain),
2289 -84, 40, digital_gain),
2291 -84, 40, digital_gain),
2499 int micb_index = micb_num - 1; in wcd9335_micbias_control()
2502 if ((micb_index < 0) || (micb_index > WCD9335_MAX_MICBIAS - 1)) { in wcd9335_micbias_control()
2503 dev_err(wcd->dev, "Invalid micbias index, micb_ind:%d\n", in wcd9335_micbias_control()
2505 return -EINVAL; in wcd9335_micbias_control()
2522 dev_err(component->dev, "%s: Invalid micbias number: %d\n", in wcd9335_micbias_control()
2524 return -EINVAL; in wcd9335_micbias_control()
2529 wcd->pullup_ref[micb_index]++; in wcd9335_micbias_control()
2530 if ((wcd->pullup_ref[micb_index] == 1) && in wcd9335_micbias_control()
2531 (wcd->micb_ref[micb_index] == 0)) in wcd9335_micbias_control()
2536 wcd->pullup_ref[micb_index]--; in wcd9335_micbias_control()
2537 if ((wcd->pullup_ref[micb_index] == 0) && in wcd9335_micbias_control()
2538 (wcd->micb_ref[micb_index] == 0)) in wcd9335_micbias_control()
2543 wcd->micb_ref[micb_index]++; in wcd9335_micbias_control()
2544 if (wcd->micb_ref[micb_index] == 1) in wcd9335_micbias_control()
2549 wcd->micb_ref[micb_index]--; in wcd9335_micbias_control()
2550 if ((wcd->micb_ref[micb_index] == 0) && in wcd9335_micbias_control()
2551 (wcd->pullup_ref[micb_index] > 0)) in wcd9335_micbias_control()
2554 else if ((wcd->micb_ref[micb_index] == 0) && in wcd9335_micbias_control()
2555 (wcd->pullup_ref[micb_index] == 0)) { in wcd9335_micbias_control()
2568 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in __wcd9335_codec_enable_micbias()
2571 if (strnstr(w->name, "MIC BIAS1", sizeof("MIC BIAS1"))) in __wcd9335_codec_enable_micbias()
2573 else if (strnstr(w->name, "MIC BIAS2", sizeof("MIC BIAS2"))) in __wcd9335_codec_enable_micbias()
2575 else if (strnstr(w->name, "MIC BIAS3", sizeof("MIC BIAS3"))) in __wcd9335_codec_enable_micbias()
2577 else if (strnstr(w->name, "MIC BIAS4", sizeof("MIC BIAS4"))) in __wcd9335_codec_enable_micbias()
2580 return -EINVAL; in __wcd9335_codec_enable_micbias()
2638 dev_err(comp->dev, "%s: invalid amic: %d\n", in wcd9335_codec_set_tx_hold()
2647 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_adc()
2651 wcd9335_codec_set_tx_hold(comp, w->reg, true); in wcd9335_codec_enable_adc()
2669 /* Check whether adc mux input is AMIC or DMIC */ in wcd9335_codec_find_amic_input()
2675 reg = WCD9335_CDC_TX_INP_MUX_ADC_MUX4_CFG0 + adc_mux_n - 4; in wcd9335_codec_find_amic_input()
2707 dev_err(comp->dev, "invalid amic: %d\n", amic); in wcd9335_codec_get_amic_pwlvl_reg()
2717 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_dec()
2727 char *wname __free(kfree) = kmemdup_nul(w->name, 15, GFP_KERNEL); in wcd9335_codec_enable_dec()
2729 return -ENOMEM; in wcd9335_codec_enable_dec()
2734 dev_err(comp->dev, "%s: Invalid decimator = %s\n", in wcd9335_codec_enable_dec()
2735 __func__, w->name); in wcd9335_codec_enable_dec()
2736 return -EINVAL; in wcd9335_codec_enable_dec()
2742 dev_err(comp->dev, "%s: decimator index not found\n", in wcd9335_codec_enable_dec()
2744 return -EINVAL; in wcd9335_codec_enable_dec()
2749 dev_err(comp->dev, "%s: Invalid decimator = %s\n", in wcd9335_codec_enable_dec()
2751 return -EINVAL; in wcd9335_codec_enable_dec()
2858 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_dmic()
2864 unsigned int dmic; in wcd9335_codec_enable_dmic() local
2868 wname = strpbrk(w->name, "012345"); in wcd9335_codec_enable_dmic()
2870 dev_err(comp->dev, "%s: widget not found\n", __func__); in wcd9335_codec_enable_dmic()
2871 return -EINVAL; in wcd9335_codec_enable_dmic()
2874 ret = kstrtouint(wname, 10, &dmic); in wcd9335_codec_enable_dmic()
2876 dev_err(comp->dev, "%s: Invalid DMIC line on the codec\n", in wcd9335_codec_enable_dmic()
2878 return -EINVAL; in wcd9335_codec_enable_dmic()
2881 switch (dmic) { in wcd9335_codec_enable_dmic()
2884 dmic_clk_cnt = &(wcd->dmic_0_1_clk_cnt); in wcd9335_codec_enable_dmic()
2889 dmic_clk_cnt = &(wcd->dmic_2_3_clk_cnt); in wcd9335_codec_enable_dmic()
2894 dmic_clk_cnt = &(wcd->dmic_4_5_clk_cnt); in wcd9335_codec_enable_dmic()
2898 dev_err(comp->dev, "%s: Invalid DMIC Selection\n", in wcd9335_codec_enable_dmic()
2900 return -EINVAL; in wcd9335_codec_enable_dmic()
2905 dmic_rate_val = wcd9335_get_dmic_clk_val(comp, wcd->mclk_rate); in wcd9335_codec_enable_dmic()
2917 dmic_rate_val = wcd9335_get_dmic_clk_val(comp, wcd->mclk_rate); in wcd9335_codec_enable_dmic()
2918 (*dmic_clk_cnt)--; in wcd9335_codec_enable_dmic()
2938 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_codec_enable_int_port()
2941 list_for_each_entry(ch, &dai->slim_ch_list, list) { in wcd9335_codec_enable_int_port()
2942 if (ch->port >= WCD9335_RX_START) { in wcd9335_codec_enable_int_port()
2943 port_num = ch->port - WCD9335_RX_START; in wcd9335_codec_enable_int_port()
2946 port_num = ch->port; in wcd9335_codec_enable_int_port()
2950 regmap_read(wcd->if_regmap, reg, &val); in wcd9335_codec_enable_int_port()
2952 regmap_write(wcd->if_regmap, reg, in wcd9335_codec_enable_int_port()
2961 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_slim()
2963 struct wcd_slim_codec_dai_data *dai = &wcd->dai[w->shift]; in wcd9335_codec_enable_slim()
2970 kfree(dai->sconfig.chs); in wcd9335_codec_enable_slim()
2981 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_mix_path()
2985 switch (w->reg) { in wcd9335_codec_enable_mix_path()
3014 dev_err(comp->dev, "%s: No gain register avail for %s\n", in wcd9335_codec_enable_mix_path()
3015 __func__, w->name); in wcd9335_codec_enable_mix_path()
3130 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_enable_prim_interpolator()
3136 wcd->prim_int_users[ind]++; in wcd9335_codec_enable_prim_interpolator()
3137 if (wcd->prim_int_users[ind] == 1) { in wcd9335_codec_enable_prim_interpolator()
3155 wcd->prim_int_users[ind]--; in wcd9335_codec_enable_prim_interpolator()
3156 if (wcd->prim_int_users[ind] == 0) { in wcd9335_codec_enable_prim_interpolator()
3177 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_config_compander()
3185 comp = interp_n - 1; in wcd9335_config_compander()
3186 if (!wcd->comp_enabled[comp]) in wcd9335_config_compander()
3238 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_interpolator()
3271 dev_err(comp->dev, "%s: Interpolator reg not found\n", in wcd9335_codec_enable_interpolator()
3273 return -EINVAL; in wcd9335_codec_enable_interpolator()
3282 wcd9335_config_compander(comp, w->shift, event); in wcd9335_codec_enable_interpolator()
3287 wcd9335_config_compander(comp, w->shift, event); in wcd9335_codec_enable_interpolator()
3298 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_codec_hph_mode_gain_opt()
3322 wcd->hph_l_gain = hph_l_en & 0x1F; in wcd9335_codec_hph_mode_gain_opt()
3327 wcd->hph_r_gain = hph_r_en & 0x1F; in wcd9335_codec_hph_mode_gain_opt()
3472 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_hphl_dac_event()
3473 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_hphl_dac_event()
3474 int hph_mode = wcd->hph_mode; in wcd9335_codec_hphl_dac_event()
3484 dev_err(comp->dev, "Incorrect DEM Input\n"); in wcd9335_codec_hphl_dac_event()
3485 return -EINVAL; in wcd9335_codec_hphl_dac_event()
3487 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd9335_codec_hphl_dac_event()
3504 if (!(wcd_clsh_ctrl_get_state(wcd->clsh_ctrl) & in wcd9335_codec_hphl_dac_event()
3508 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd9335_codec_hphl_dac_event()
3521 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_lineout_dac_event()
3522 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_lineout_dac_event()
3526 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd9335_codec_lineout_dac_event()
3530 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd9335_codec_lineout_dac_event()
3541 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_ear_dac_event()
3542 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_ear_dac_event()
3546 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd9335_codec_ear_dac_event()
3551 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd9335_codec_ear_dac_event()
3581 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3586 if (wcd->comp_enabled[COMPANDER_1] || in wcd9335_codec_hph_post_pa_config()
3587 wcd->comp_enabled[COMPANDER_2]) { in wcd9335_codec_hph_post_pa_config()
3589 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3593 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3597 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3602 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3605 wcd->hph_l_gain); in wcd9335_codec_hph_post_pa_config()
3606 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3609 wcd->hph_r_gain); in wcd9335_codec_hph_post_pa_config()
3613 snd_soc_component_update_bits(wcd->component, in wcd9335_codec_hph_post_pa_config()
3623 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_hphr_dac_event()
3624 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_hphr_dac_event()
3625 int hph_mode = wcd->hph_mode; in wcd9335_codec_hphr_dac_event()
3637 dev_err(comp->dev, "DEM Input not set correctly, hph_mode: %d\n", in wcd9335_codec_hphr_dac_event()
3639 return -EINVAL; in wcd9335_codec_hphr_dac_event()
3642 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, in wcd9335_codec_hphr_dac_event()
3655 if (!(wcd_clsh_ctrl_get_state(wcd->clsh_ctrl) & in wcd9335_codec_hphr_dac_event()
3659 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd9335_codec_hphr_dac_event()
3672 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_hphl_pa()
3673 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_enable_hphl_pa()
3674 int hph_mode = wcd->hph_mode; in wcd9335_codec_enable_hphl_pa()
3720 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_lineout_pa()
3723 if (w->reg == WCD9335_ANA_LO_1_2) { in wcd9335_codec_enable_lineout_pa()
3724 if (w->shift == 7) { in wcd9335_codec_enable_lineout_pa()
3727 } else if (w->shift == 6) { in wcd9335_codec_enable_lineout_pa()
3731 } else if (w->reg == WCD9335_ANA_LO_3_4) { in wcd9335_codec_enable_lineout_pa()
3732 if (w->shift == 7) { in wcd9335_codec_enable_lineout_pa()
3735 } else if (w->shift == 6) { in wcd9335_codec_enable_lineout_pa()
3740 dev_err(comp->dev, "Error enabling lineout PA\n"); in wcd9335_codec_enable_lineout_pa()
3741 return -EINVAL; in wcd9335_codec_enable_lineout_pa()
3791 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_rx_bias()
3792 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_enable_rx_bias()
3796 wcd->rx_bias_count++; in wcd9335_codec_enable_rx_bias()
3797 if (wcd->rx_bias_count == 1) { in wcd9335_codec_enable_rx_bias()
3806 wcd->rx_bias_count--; in wcd9335_codec_enable_rx_bias()
3807 if (!wcd->rx_bias_count) in wcd9335_codec_enable_rx_bias()
3821 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_hphr_pa()
3822 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_enable_hphr_pa()
3823 int hph_mode = wcd->hph_mode; in wcd9335_codec_enable_hphr_pa()
3867 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_ear_pa()
3912 regmap_read(wcd->if_regmap, i, &val); in wcd9335_slimbus_irq()
3918 port_id = (tx ? j - 16 : j); in wcd9335_slimbus_irq()
3919 regmap_read(wcd->if_regmap, in wcd9335_slimbus_irq()
3929 wcd->if_regmap, reg, &int_val); in wcd9335_slimbus_irq()
3939 dev_err_ratelimited(wcd->dev, in wcd9335_slimbus_irq()
3944 dev_err_ratelimited(wcd->dev, in wcd9335_slimbus_irq()
3957 wcd->if_regmap, reg, &int_val); in wcd9335_slimbus_irq()
3960 regmap_write(wcd->if_regmap, in wcd9335_slimbus_irq()
3965 regmap_write(wcd->if_regmap, in wcd9335_slimbus_irq()
3987 irq = regmap_irq_get_virq(wcd->irq_data, wcd9335_irqs[i].irq); in wcd9335_setup_irqs()
3989 dev_err(wcd->dev, "Failed to get %s\n", in wcd9335_setup_irqs()
3994 ret = devm_request_threaded_irq(wcd->dev, irq, NULL, in wcd9335_setup_irqs()
4000 dev_err(wcd->dev, "Failed to request %s\n", in wcd9335_setup_irqs()
4008 regmap_write(wcd->if_regmap, WCD9335_SLIM_PGD_PORT_INT_EN0 + i, in wcd9335_setup_irqs()
4020 regmap_write(wcd->if_regmap, WCD9335_SLIM_PGD_PORT_INT_EN0 + i, in wcd9335_teardown_irqs()
4027 struct snd_soc_component *comp = wcd->component; in wcd9335_cdc_sido_ccl_enable()
4030 if (++wcd->sido_ccl_cnt == 1) in wcd9335_cdc_sido_ccl_enable()
4034 if (wcd->sido_ccl_cnt == 0) { in wcd9335_cdc_sido_ccl_enable()
4035 dev_err(wcd->dev, "sido_ccl already disabled\n"); in wcd9335_cdc_sido_ccl_enable()
4038 if (--wcd->sido_ccl_cnt == 0) in wcd9335_cdc_sido_ccl_enable()
4046 wcd->master_bias_users++; in wcd9335_enable_master_bias()
4047 if (wcd->master_bias_users == 1) { in wcd9335_enable_master_bias()
4048 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_enable_master_bias()
4051 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_enable_master_bias()
4055 * 1ms delay is required after pre-charge is enabled in wcd9335_enable_master_bias()
4059 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_enable_master_bias()
4062 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_enable_master_bias()
4073 if (wcd->master_bias_users <= 0) in wcd9335_enable_mclk()
4074 return -EINVAL; in wcd9335_enable_mclk()
4076 if (((wcd->clk_mclk_users == 0) && (wcd->clk_type == WCD_CLK_MCLK)) || in wcd9335_enable_mclk()
4077 ((wcd->clk_mclk_users > 0) && (wcd->clk_type != WCD_CLK_MCLK))) { in wcd9335_enable_mclk()
4078 dev_err(wcd->dev, "Error enabling MCLK, clk_type: %d\n", in wcd9335_enable_mclk()
4079 wcd->clk_type); in wcd9335_enable_mclk()
4080 return -EINVAL; in wcd9335_enable_mclk()
4083 if (++wcd->clk_mclk_users == 1) { in wcd9335_enable_mclk()
4084 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_enable_mclk()
4087 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_enable_mclk()
4090 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_enable_mclk()
4093 regmap_update_bits(wcd->regmap, in wcd9335_enable_mclk()
4097 regmap_update_bits(wcd->regmap, in wcd9335_enable_mclk()
4108 wcd->clk_type = WCD_CLK_MCLK; in wcd9335_enable_mclk()
4115 if (wcd->clk_mclk_users <= 0) in wcd9335_disable_mclk()
4116 return -EINVAL; in wcd9335_disable_mclk()
4118 if (--wcd->clk_mclk_users == 0) { in wcd9335_disable_mclk()
4119 if (wcd->clk_rco_users > 0) { in wcd9335_disable_mclk()
4121 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_disable_mclk()
4124 wcd->clk_type = WCD_CLK_RCO; in wcd9335_disable_mclk()
4126 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_disable_mclk()
4129 wcd->clk_type = WCD_CLK_OFF; in wcd9335_disable_mclk()
4132 regmap_update_bits(wcd->regmap, WCD9335_ANA_CLK_TOP, in wcd9335_disable_mclk()
4142 if (wcd->master_bias_users <= 0) in wcd9335_disable_master_bias()
4143 return -EINVAL; in wcd9335_disable_master_bias()
4145 wcd->master_bias_users--; in wcd9335_disable_master_bias()
4146 if (wcd->master_bias_users == 0) { in wcd9335_disable_master_bias()
4147 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_disable_master_bias()
4150 regmap_update_bits(wcd->regmap, WCD9335_ANA_BIAS, in wcd9335_disable_master_bias()
4164 ret = clk_prepare_enable(wcd->mclk); in wcd9335_cdc_req_mclk_enable()
4166 dev_err(wcd->dev, "%s: ext clk enable failed\n", in wcd9335_cdc_req_mclk_enable()
4180 clk_disable_unprepare(wcd->mclk); in wcd9335_cdc_req_mclk_enable()
4190 struct snd_soc_component *comp = wcd->component; in wcd9335_codec_apply_sido_voltage()
4193 if (req_mv == wcd->sido_voltage) in wcd9335_codec_apply_sido_voltage()
4206 wcd->sido_voltage = req_mv; in wcd9335_codec_apply_sido_voltage()
4220 dev_err(wcd->dev, "Ext clk enable failed\n"); in wcd9335_codec_update_sido_voltage()
4234 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in _wcd9335_codec_enable_mclk()
4246 wcd->sido_voltage); in _wcd9335_codec_enable_mclk()
4256 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd9335_codec_enable_mclk()
4611 SND_SOC_DAPM_MUX("DMIC MUX0", SND_SOC_NOPM, 0, 0,
4613 SND_SOC_DAPM_MUX("DMIC MUX1", SND_SOC_NOPM, 0, 0,
4615 SND_SOC_DAPM_MUX("DMIC MUX2", SND_SOC_NOPM, 0, 0,
4617 SND_SOC_DAPM_MUX("DMIC MUX3", SND_SOC_NOPM, 0, 0,
4619 SND_SOC_DAPM_MUX("DMIC MUX4", SND_SOC_NOPM, 0, 0,
4621 SND_SOC_DAPM_MUX("DMIC MUX5", SND_SOC_NOPM, 0, 0,
4623 SND_SOC_DAPM_MUX("DMIC MUX6", SND_SOC_NOPM, 0, 0,
4625 SND_SOC_DAPM_MUX("DMIC MUX7", SND_SOC_NOPM, 0, 0,
4627 SND_SOC_DAPM_MUX("DMIC MUX8", SND_SOC_NOPM, 0, 0,
4725 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_enable_sido_buck()
4740 wcd->sido_input_src = SIDO_SOURCE_RCO_BG; in wcd9335_enable_sido_buck()
4769 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_codec_init()
4772 /* ungate MCLK and set clk rate */ in wcd9335_codec_init()
4773 regmap_update_bits(wcd->regmap, WCD9335_CODEC_RPM_CLK_GATE, in wcd9335_codec_init()
4776 regmap_update_bits(wcd->regmap, WCD9335_CODEC_RPM_CLK_MCLK_CFG, in wcd9335_codec_init()
4791 struct wcd9335_codec *wcd = dev_get_drvdata(component->dev); in wcd9335_codec_probe()
4795 snd_soc_component_init_regmap(component, wcd->regmap); in wcd9335_codec_probe()
4796 /* Class-H Init*/ in wcd9335_codec_probe()
4797 wcd->clsh_ctrl = wcd_clsh_ctrl_alloc(component, WCD9335); in wcd9335_codec_probe()
4798 if (IS_ERR(wcd->clsh_ctrl)) in wcd9335_codec_probe()
4799 return PTR_ERR(wcd->clsh_ctrl); in wcd9335_codec_probe()
4801 /* Default HPH Mode to Class-H HiFi */ in wcd9335_codec_probe()
4802 wcd->hph_mode = CLS_H_HIFI; in wcd9335_codec_probe()
4803 wcd->component = component; in wcd9335_codec_probe()
4808 INIT_LIST_HEAD(&wcd->dai[i].slim_ch_list); in wcd9335_codec_probe()
4817 wcd_clsh_ctrl_free(wcd->clsh_ctrl); in wcd9335_codec_probe()
4823 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_remove()
4825 wcd_clsh_ctrl_free(wcd->clsh_ctrl); in wcd9335_codec_remove()
4833 struct wcd9335_codec *wcd = dev_get_drvdata(comp->dev); in wcd9335_codec_set_sysclk()
4835 wcd->mclk_rate = freq; in wcd9335_codec_set_sysclk()
4837 if (wcd->mclk_rate == WCD9335_MCLK_CLK_12P288MHZ) in wcd9335_codec_set_sysclk()
4842 else if (wcd->mclk_rate == WCD9335_MCLK_CLK_9P6MHZ) in wcd9335_codec_set_sysclk()
4848 return clk_set_rate(wcd->mclk, freq); in wcd9335_codec_set_sysclk()
4866 struct device *dev = wcd->dev; in wcd9335_probe()
4868 memcpy(wcd->rx_chs, wcd9335_rx_chs, sizeof(wcd9335_rx_chs)); in wcd9335_probe()
4869 memcpy(wcd->tx_chs, wcd9335_tx_chs, sizeof(wcd9335_tx_chs)); in wcd9335_probe()
4871 wcd->sido_input_src = SIDO_SOURCE_INTERNAL; in wcd9335_probe()
4872 wcd->sido_voltage = SIDO_VOLTAGE_NOMINAL_MV; in wcd9335_probe()
4924 .name = "WCD9335-IFC-DEV",
4977 struct device *dev = wcd->dev; in wcd9335_parse_dt()
4978 struct device_node *np = dev->of_node; in wcd9335_parse_dt()
4981 wcd->reset_gpio = of_get_named_gpio(np, "reset-gpios", 0); in wcd9335_parse_dt()
4982 if (wcd->reset_gpio < 0) in wcd9335_parse_dt()
4983 return dev_err_probe(dev, wcd->reset_gpio, "Reset GPIO missing from DT\n"); in wcd9335_parse_dt()
4985 wcd->mclk = devm_clk_get(dev, "mclk"); in wcd9335_parse_dt()
4986 if (IS_ERR(wcd->mclk)) in wcd9335_parse_dt()
4987 return dev_err_probe(dev, PTR_ERR(wcd->mclk), "mclk not found\n"); in wcd9335_parse_dt()
4989 wcd->native_clk = devm_clk_get(dev, "slimbus"); in wcd9335_parse_dt()
4990 if (IS_ERR(wcd->native_clk)) in wcd9335_parse_dt()
4991 return dev_err_probe(dev, PTR_ERR(wcd->native_clk), "slimbus clock not found\n"); in wcd9335_parse_dt()
4993 wcd->supplies[0].supply = "vdd-buck"; in wcd9335_parse_dt()
4994 wcd->supplies[1].supply = "vdd-buck-sido"; in wcd9335_parse_dt()
4995 wcd->supplies[2].supply = "vdd-tx"; in wcd9335_parse_dt()
4996 wcd->supplies[3].supply = "vdd-rx"; in wcd9335_parse_dt()
4997 wcd->supplies[4].supply = "vdd-io"; in wcd9335_parse_dt()
4999 ret = regulator_bulk_get(dev, WCD9335_MAX_SUPPLY, wcd->supplies); in wcd9335_parse_dt()
5008 struct device *dev = wcd->dev; in wcd9335_power_on_reset()
5011 ret = regulator_bulk_enable(WCD9335_MAX_SUPPLY, wcd->supplies); in wcd9335_power_on_reset()
5026 gpio_direction_output(wcd->reset_gpio, 0); in wcd9335_power_on_reset()
5028 gpio_set_value(wcd->reset_gpio, 1); in wcd9335_power_on_reset()
5036 struct regmap *rm = wcd->regmap; in wcd9335_bring_up()
5043 dev_err(wcd->dev, "WCD9335 CODEC version detection fail!\n"); in wcd9335_bring_up()
5044 return -EINVAL; in wcd9335_bring_up()
5048 dev_info(wcd->dev, "WCD9335 CODEC version is v2.0\n"); in wcd9335_bring_up()
5058 dev_err(wcd->dev, "WCD9335 CODEC version not supported\n"); in wcd9335_bring_up()
5059 return -EINVAL; in wcd9335_bring_up()
5074 wcd->intr1 = of_irq_get_byname(wcd->dev->of_node, "intr1"); in wcd9335_irq_init()
5075 if (wcd->intr1 < 0) in wcd9335_irq_init()
5076 return dev_err_probe(wcd->dev, wcd->intr1, in wcd9335_irq_init()
5079 ret = devm_regmap_add_irq_chip(wcd->dev, wcd->regmap, wcd->intr1, in wcd9335_irq_init()
5081 &wcd9335_regmap_irq1_chip, &wcd->irq_data); in wcd9335_irq_init()
5083 return dev_err_probe(wcd->dev, ret, "Failed to register IRQ chip\n"); in wcd9335_irq_init()
5090 struct device *dev = &slim->dev; in wcd9335_slim_probe()
5096 return -ENOMEM; in wcd9335_slim_probe()
5098 wcd->dev = dev; in wcd9335_slim_probe()
5115 struct device *dev = &sdev->dev; in wcd9335_slim_status()
5122 ifc_dev_np = of_parse_phandle(dev->of_node, "slim-ifc-dev", 0); in wcd9335_slim_status()
5125 return -EINVAL; in wcd9335_slim_status()
5128 wcd->slim = sdev; in wcd9335_slim_status()
5129 wcd->slim_ifc_dev = of_slim_get_device(sdev->ctrl, ifc_dev_np); in wcd9335_slim_status()
5131 if (!wcd->slim_ifc_dev) { in wcd9335_slim_status()
5133 return -EINVAL; in wcd9335_slim_status()
5136 slim_get_logical_addr(wcd->slim_ifc_dev); in wcd9335_slim_status()
5138 wcd->regmap = regmap_init_slimbus(sdev, &wcd9335_regmap_config); in wcd9335_slim_status()
5139 if (IS_ERR(wcd->regmap)) in wcd9335_slim_status()
5140 return dev_err_probe(dev, PTR_ERR(wcd->regmap), in wcd9335_slim_status()
5143 wcd->if_regmap = regmap_init_slimbus(wcd->slim_ifc_dev, in wcd9335_slim_status()
5145 if (IS_ERR(wcd->if_regmap)) in wcd9335_slim_status()
5146 return dev_err_probe(dev, PTR_ERR(wcd->if_regmap), in wcd9335_slim_status()
5172 .name = "wcd9335-slim",