Lines Matching +full:mux +full:- +full:ctrl +full:- +full:list

1 // SPDX-License-Identifier: GPL-2.0
5 #include <linux/clk-provider.h>
21 #include <sound/soc-dapm.h>
23 #include "wcd-clsh-v2.h"
24 #include "wcd-mbhc-v2.h"
187 {"RX INT" #id "_2 MUX", "RX0", "SLIM RX0"}, \
188 {"RX INT" #id "_2 MUX", "RX1", "SLIM RX1"}, \
189 {"RX INT" #id "_2 MUX", "RX2", "SLIM RX2"}, \
190 {"RX INT" #id "_2 MUX", "RX3", "SLIM RX3"}, \
191 {"RX INT" #id "_2 MUX", "RX4", "SLIM RX4"}, \
192 {"RX INT" #id "_2 MUX", "RX5", "SLIM RX5"}, \
193 {"RX INT" #id "_2 MUX", "RX6", "SLIM RX6"}, \
194 {"RX INT" #id "_2 MUX", "RX7", "SLIM RX7"}, \
195 {"RX INT" #id "_2 MUX", NULL, "INT" #id "_CLK"}, \
196 {"RX INT" #id "_2 MUX", NULL, "DSMDEM" #id "_CLK"}, \
197 {"RX INT" #id "_2 INTERP", NULL, "RX INT" #id "_2 MUX"}, \
209 {"SLIM RX"#id" MUX", "AIF1_PB", "AIF1 PB"}, \
210 {"SLIM RX"#id" MUX", "AIF2_PB", "AIF2 PB"}, \
211 {"SLIM RX"#id" MUX", "AIF3_PB", "AIF3 PB"}, \
212 {"SLIM RX"#id" MUX", "AIF4_PB", "AIF4 PB"}, \
213 {"SLIM RX"#id, NULL, "SLIM RX"#id" MUX"}
216 {"ADC MUX" #id, "DMIC", "DMIC MUX" #id }, \
217 {"ADC MUX" #id, "AMIC", "AMIC MUX" #id }, \
218 {"DMIC MUX" #id, "DMIC0", "DMIC0"}, \
219 {"DMIC MUX" #id, "DMIC1", "DMIC1"}, \
220 {"DMIC MUX" #id, "DMIC2", "DMIC2"}, \
221 {"DMIC MUX" #id, "DMIC3", "DMIC3"}, \
222 {"DMIC MUX" #id, "DMIC4", "DMIC4"}, \
223 {"DMIC MUX" #id, "DMIC5", "DMIC5"}, \
224 {"AMIC MUX" #id, "ADC1", "ADC1"}, \
225 {"AMIC MUX" #id, "ADC2", "ADC2"}, \
226 {"AMIC MUX" #id, "ADC3", "ADC3"}, \
227 {"AMIC MUX" #id, "ADC4", "ADC4"}
230 {"IIR" #id, NULL, "IIR" #id " INP0 MUX"}, \
231 {"IIR" #id " INP0 MUX", "DEC0", "ADC MUX0"}, \
232 {"IIR" #id " INP0 MUX", "DEC1", "ADC MUX1"}, \
233 {"IIR" #id " INP0 MUX", "DEC2", "ADC MUX2"}, \
234 {"IIR" #id " INP0 MUX", "DEC3", "ADC MUX3"}, \
235 {"IIR" #id " INP0 MUX", "DEC4", "ADC MUX4"}, \
236 {"IIR" #id " INP0 MUX", "DEC5", "ADC MUX5"}, \
237 {"IIR" #id " INP0 MUX", "DEC6", "ADC MUX6"}, \
238 {"IIR" #id " INP0 MUX", "DEC7", "ADC MUX7"}, \
239 {"IIR" #id " INP0 MUX", "DEC8", "ADC MUX8"}, \
240 {"IIR" #id " INP0 MUX", "RX0", "SLIM RX0"}, \
241 {"IIR" #id " INP0 MUX", "RX1", "SLIM RX1"}, \
242 {"IIR" #id " INP0 MUX", "RX2", "SLIM RX2"}, \
243 {"IIR" #id " INP0 MUX", "RX3", "SLIM RX3"}, \
244 {"IIR" #id " INP0 MUX", "RX4", "SLIM RX4"}, \
245 {"IIR" #id " INP0 MUX", "RX5", "SLIM RX5"}, \
246 {"IIR" #id " INP0 MUX", "RX6", "SLIM RX6"}, \
247 {"IIR" #id " INP0 MUX", "RX7", "SLIM RX7"}, \
248 {"IIR" #id, NULL, "IIR" #id " INP1 MUX"}, \
249 {"IIR" #id " INP1 MUX", "DEC0", "ADC MUX0"}, \
250 {"IIR" #id " INP1 MUX", "DEC1", "ADC MUX1"}, \
251 {"IIR" #id " INP1 MUX", "DEC2", "ADC MUX2"}, \
252 {"IIR" #id " INP1 MUX", "DEC3", "ADC MUX3"}, \
253 {"IIR" #id " INP1 MUX", "DEC4", "ADC MUX4"}, \
254 {"IIR" #id " INP1 MUX", "DEC5", "ADC MUX5"}, \
255 {"IIR" #id " INP1 MUX", "DEC6", "ADC MUX6"}, \
256 {"IIR" #id " INP1 MUX", "DEC7", "ADC MUX7"}, \
257 {"IIR" #id " INP1 MUX", "DEC8", "ADC MUX8"}, \
258 {"IIR" #id " INP1 MUX", "RX0", "SLIM RX0"}, \
259 {"IIR" #id " INP1 MUX", "RX1", "SLIM RX1"}, \
260 {"IIR" #id " INP1 MUX", "RX2", "SLIM RX2"}, \
261 {"IIR" #id " INP1 MUX", "RX3", "SLIM RX3"}, \
262 {"IIR" #id " INP1 MUX", "RX4", "SLIM RX4"}, \
263 {"IIR" #id " INP1 MUX", "RX5", "SLIM RX5"}, \
264 {"IIR" #id " INP1 MUX", "RX6", "SLIM RX6"}, \
265 {"IIR" #id " INP1 MUX", "RX7", "SLIM RX7"}, \
266 {"IIR" #id, NULL, "IIR" #id " INP2 MUX"}, \
267 {"IIR" #id " INP2 MUX", "DEC0", "ADC MUX0"}, \
268 {"IIR" #id " INP2 MUX", "DEC1", "ADC MUX1"}, \
269 {"IIR" #id " INP2 MUX", "DEC2", "ADC MUX2"}, \
270 {"IIR" #id " INP2 MUX", "DEC3", "ADC MUX3"}, \
271 {"IIR" #id " INP2 MUX", "DEC4", "ADC MUX4"}, \
272 {"IIR" #id " INP2 MUX", "DEC5", "ADC MUX5"}, \
273 {"IIR" #id " INP2 MUX", "DEC6", "ADC MUX6"}, \
274 {"IIR" #id " INP2 MUX", "DEC7", "ADC MUX7"}, \
275 {"IIR" #id " INP2 MUX", "DEC8", "ADC MUX8"}, \
276 {"IIR" #id " INP2 MUX", "RX0", "SLIM RX0"}, \
277 {"IIR" #id " INP2 MUX", "RX1", "SLIM RX1"}, \
278 {"IIR" #id " INP2 MUX", "RX2", "SLIM RX2"}, \
279 {"IIR" #id " INP2 MUX", "RX3", "SLIM RX3"}, \
280 {"IIR" #id " INP2 MUX", "RX4", "SLIM RX4"}, \
281 {"IIR" #id " INP2 MUX", "RX5", "SLIM RX5"}, \
282 {"IIR" #id " INP2 MUX", "RX6", "SLIM RX6"}, \
283 {"IIR" #id " INP2 MUX", "RX7", "SLIM RX7"}, \
284 {"IIR" #id, NULL, "IIR" #id " INP3 MUX"}, \
285 {"IIR" #id " INP3 MUX", "DEC0", "ADC MUX0"}, \
286 {"IIR" #id " INP3 MUX", "DEC1", "ADC MUX1"}, \
287 {"IIR" #id " INP3 MUX", "DEC2", "ADC MUX2"}, \
288 {"IIR" #id " INP3 MUX", "DEC3", "ADC MUX3"}, \
289 {"IIR" #id " INP3 MUX", "DEC4", "ADC MUX4"}, \
290 {"IIR" #id " INP3 MUX", "DEC5", "ADC MUX5"}, \
291 {"IIR" #id " INP3 MUX", "DEC6", "ADC MUX6"}, \
292 {"IIR" #id " INP3 MUX", "DEC7", "ADC MUX7"}, \
293 {"IIR" #id " INP3 MUX", "DEC8", "ADC MUX8"}, \
294 {"IIR" #id " INP3 MUX", "RX0", "SLIM RX0"}, \
295 {"IIR" #id " INP3 MUX", "RX1", "SLIM RX1"}, \
296 {"IIR" #id " INP3 MUX", "RX2", "SLIM RX2"}, \
297 {"IIR" #id " INP3 MUX", "RX3", "SLIM RX3"}, \
298 {"IIR" #id " INP3 MUX", "RX4", "SLIM RX4"}, \
299 {"IIR" #id " INP3 MUX", "RX5", "SLIM RX5"}, \
300 {"IIR" #id " INP3 MUX", "RX6", "SLIM RX6"}, \
301 {"IIR" #id " INP3 MUX", "RX7", "SLIM RX7"}
307 {"SLIM TX" #id, NULL, "CDC_IF TX" #id " MUX"}
370 struct list_head list; member
430 COMPANDER_5, /* LO3_SE - not used in Tavil */
431 COMPANDER_6, /* LO4_SE - not used in Tavil */
520 .name = "WCD9335-IFC-DEV",
589 static const DECLARE_TLV_DB_SCALE(digital_gain, -8400, 100, -8400);
605 "Class H Invalid", "Class-H Hi-Fi", "Class-H Low Power", "Class-AB",
606 "Class-H Hi-Fi Low Power"
670 "ZERO", "RX INT0_2 MUX",
674 "ZERO", "RX INT1_2 MUX",
678 "ZERO", "RX INT2_2 MUX",
682 "ZERO", "RX INT3_2 MUX",
686 "ZERO", "RX INT4_2 MUX",
690 "ZERO", "RX INT7_2 MUX",
694 "ZERO", "RX INT8_2 MUX",
1274 if (sido_src == wcd->sido_input_src) in wcd934x_set_sido_input_src()
1278 regmap_update_bits(wcd->regmap, WCD934X_ANA_RCO, in wcd934x_set_sido_input_src()
1283 wcd->sido_input_src = sido_src; in wcd934x_set_sido_input_src()
1290 mutex_lock(&wcd->sysclk_mutex); in wcd934x_enable_ana_bias_and_sysclk()
1292 if (++wcd->sysclk_users != 1) { in wcd934x_enable_ana_bias_and_sysclk()
1293 mutex_unlock(&wcd->sysclk_mutex); in wcd934x_enable_ana_bias_and_sysclk()
1296 mutex_unlock(&wcd->sysclk_mutex); in wcd934x_enable_ana_bias_and_sysclk()
1298 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_enable_ana_bias_and_sysclk()
1301 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_enable_ana_bias_and_sysclk()
1305 * 1ms delay is required after pre-charge is enabled in wcd934x_enable_ana_bias_and_sysclk()
1309 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_enable_ana_bias_and_sysclk()
1311 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_enable_ana_bias_and_sysclk()
1319 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_enable_ana_bias_and_sysclk()
1322 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_enable_ana_bias_and_sysclk()
1325 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_enable_ana_bias_and_sysclk()
1328 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_enable_ana_bias_and_sysclk()
1330 regmap_update_bits(wcd->regmap, in wcd934x_enable_ana_bias_and_sysclk()
1334 regmap_update_bits(wcd->regmap, in wcd934x_enable_ana_bias_and_sysclk()
1338 regmap_update_bits(wcd->regmap, WCD934X_CODEC_RPM_CLK_GATE, in wcd934x_enable_ana_bias_and_sysclk()
1353 mutex_lock(&wcd->sysclk_mutex); in wcd934x_disable_ana_bias_and_syclk()
1354 if (--wcd->sysclk_users != 0) { in wcd934x_disable_ana_bias_and_syclk()
1355 mutex_unlock(&wcd->sysclk_mutex); in wcd934x_disable_ana_bias_and_syclk()
1358 mutex_unlock(&wcd->sysclk_mutex); in wcd934x_disable_ana_bias_and_syclk()
1360 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_disable_ana_bias_and_syclk()
1363 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_disable_ana_bias_and_syclk()
1365 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_disable_ana_bias_and_syclk()
1376 ret = clk_prepare_enable(wcd->extclk); in __wcd934x_cdc_mclk_enable()
1379 dev_err(wcd->dev, "%s: ext clk enable failed\n", in __wcd934x_cdc_mclk_enable()
1387 regmap_read(wcd->regmap, WCD934X_CDC_CLK_RST_CTRL_SWR_CONTROL, in __wcd934x_cdc_mclk_enable()
1395 clk_disable_unprepare(wcd->extclk); in __wcd934x_cdc_mclk_enable()
1404 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_mclk()
1405 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_enable_mclk()
1424 regmap = wcd->regmap; in wcd934x_get_version()
1454 wcd->version = ver; in wcd934x_get_version()
1455 dev_info(wcd->dev, "WCD934X Minor:0x%x Version:0x%x\n", id_minor, ver); in wcd934x_get_version()
1466 regmap_update_bits(wcd->regmap, in wcd934x_enable_efuse_sensing()
1470 regmap_update_bits(wcd->regmap, in wcd934x_enable_efuse_sensing()
1481 rc = regmap_read(wcd->regmap, in wcd934x_enable_efuse_sensing()
1494 regmap_update_bits(wcd->regmap, in wcd934x_swrm_clock()
1499 regmap_update_bits(wcd->regmap, in wcd934x_swrm_clock()
1511 struct snd_soc_component *comp = dai->component; in wcd934x_set_prim_interpolator_rate()
1512 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_set_prim_interpolator_rate()
1517 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd934x_set_prim_interpolator_rate()
1518 inp = ch->shift + INTn_1_INP_SEL_RX0; in wcd934x_set_prim_interpolator_rate()
1520 * Loop through all interpolator MUX inputs and find out in wcd934x_set_prim_interpolator_rate()
1550 dev_err(wcd->dev, in wcd934x_set_prim_interpolator_rate()
1568 struct snd_soc_component *component = dai->component; in wcd934x_set_mix_interpolator_rate()
1569 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_set_mix_interpolator_rate()
1573 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd934x_set_mix_interpolator_rate()
1582 if (val == (ch->shift + INTn_2_INP_SEL_RX0)) { in wcd934x_set_mix_interpolator_rate()
1590 dev_err(component->dev, in wcd934x_set_mix_interpolator_rate()
1592 dai->id); in wcd934x_set_mix_interpolator_rate()
1593 return -EINVAL; in wcd934x_set_mix_interpolator_rate()
1620 dev_err(dai->dev, "Unsupported sample rate: %d\n", sample_rate); in wcd934x_set_interpolator_rate()
1621 return -EINVAL; in wcd934x_set_interpolator_rate()
1637 struct snd_soc_component *comp = dai->component; in wcd934x_set_decimator_rate()
1642 int decimator = -1; in wcd934x_set_decimator_rate()
1644 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd934x_set_decimator_rate()
1645 tx_port = ch->port; in wcd934x_set_decimator_rate()
1646 /* Find the SB TX MUX input - which decimator is connected */ in wcd934x_set_decimator_rate()
1655 shift = ((tx_port - 4) << 1); in wcd934x_set_decimator_rate()
1660 shift = ((tx_port - 8) << 1); in wcd934x_set_decimator_rate()
1674 dev_err(wcd->dev, "Invalid SLIM TX%u port DAI ID:%d\n", in wcd934x_set_decimator_rate()
1675 tx_port, dai->id); in wcd934x_set_decimator_rate()
1676 return -EINVAL; in wcd934x_set_decimator_rate()
1694 decimator = tx_mux_sel - 1; in wcd934x_set_decimator_rate()
1701 dev_err(wcd->dev, "ERROR: Invalid tx_port: %d\n", in wcd934x_set_decimator_rate()
1703 return -EINVAL; in wcd934x_set_decimator_rate()
1719 struct list_head *slim_ch_list = &dai_data->slim_ch_list; in wcd934x_slim_set_hw_params()
1720 struct slim_stream_config *cfg = &dai_data->sconfig; in wcd934x_slim_set_hw_params()
1725 cfg->ch_count = 0; in wcd934x_slim_set_hw_params()
1726 cfg->direction = direction; in wcd934x_slim_set_hw_params()
1727 cfg->port_mask = 0; in wcd934x_slim_set_hw_params()
1730 list_for_each_entry(ch, slim_ch_list, list) { in wcd934x_slim_set_hw_params()
1731 cfg->ch_count++; in wcd934x_slim_set_hw_params()
1732 payload |= 1 << ch->shift; in wcd934x_slim_set_hw_params()
1733 cfg->port_mask |= BIT(ch->port); in wcd934x_slim_set_hw_params()
1736 cfg->chs = kcalloc(cfg->ch_count, sizeof(unsigned int), GFP_KERNEL); in wcd934x_slim_set_hw_params()
1737 if (!cfg->chs) in wcd934x_slim_set_hw_params()
1738 return -ENOMEM; in wcd934x_slim_set_hw_params()
1741 list_for_each_entry(ch, slim_ch_list, list) { in wcd934x_slim_set_hw_params()
1742 cfg->chs[i++] = ch->ch_num; in wcd934x_slim_set_hw_params()
1745 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1746 WCD934X_SLIM_PGD_RX_PORT_MULTI_CHNL_0(ch->port), in wcd934x_slim_set_hw_params()
1753 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1754 WCD934X_SLIM_PGD_RX_PORT_CFG(ch->port), in wcd934x_slim_set_hw_params()
1759 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1760 WCD934X_SLIM_PGD_TX_PORT_MULTI_CHNL_0(ch->port), in wcd934x_slim_set_hw_params()
1766 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1767 WCD934X_SLIM_PGD_TX_PORT_MULTI_CHNL_1(ch->port), in wcd934x_slim_set_hw_params()
1773 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1774 WCD934X_SLIM_PGD_TX_PORT_CFG(ch->port), in wcd934x_slim_set_hw_params()
1782 dai_data->sruntime = slim_stream_allocate(wcd->sdev, "WCD934x-SLIM"); in wcd934x_slim_set_hw_params()
1787 dev_err(wcd->dev, "Error Setting slim hw params\n"); in wcd934x_slim_set_hw_params()
1788 kfree(cfg->chs); in wcd934x_slim_set_hw_params()
1789 cfg->chs = NULL; in wcd934x_slim_set_hw_params()
1801 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_hw_params()
1803 switch (substream->stream) { in wcd934x_hw_params()
1807 dev_err(wcd->dev, "cannot set sample rate: %u\n", in wcd934x_hw_params()
1813 wcd->dai[dai->id].sconfig.bps = params_width(params); in wcd934x_hw_params()
1816 dev_err(wcd->dev, "Invalid format 0x%x\n", in wcd934x_hw_params()
1818 return -EINVAL; in wcd934x_hw_params()
1846 dev_err(wcd->dev, "Invalid TX sample rate: %d\n", in wcd934x_hw_params()
1848 return -EINVAL; in wcd934x_hw_params()
1855 dev_err(wcd->dev, "Cannot set TX Decimator rate\n"); in wcd934x_hw_params()
1860 wcd->dai[dai->id].sconfig.bps = params_width(params); in wcd934x_hw_params()
1863 dev_err(wcd->dev, "Invalid format 0x%x\n", in wcd934x_hw_params()
1865 return -EINVAL; in wcd934x_hw_params()
1869 dev_err(wcd->dev, "Invalid stream type %d\n", in wcd934x_hw_params()
1870 substream->stream); in wcd934x_hw_params()
1871 return -EINVAL; in wcd934x_hw_params()
1874 wcd->dai[dai->id].sconfig.rate = params_rate(params); in wcd934x_hw_params()
1876 return wcd934x_slim_set_hw_params(wcd, &wcd->dai[dai->id], substream->stream); in wcd934x_hw_params()
1885 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_hw_free()
1887 dai_data = &wcd->dai[dai->id]; in wcd934x_hw_free()
1889 kfree(dai_data->sconfig.chs); in wcd934x_hw_free()
1901 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_trigger()
1903 dai_data = &wcd->dai[dai->id]; in wcd934x_trigger()
1909 cfg = &dai_data->sconfig; in wcd934x_trigger()
1910 slim_stream_prepare(dai_data->sruntime, cfg); in wcd934x_trigger()
1911 slim_stream_enable(dai_data->sruntime); in wcd934x_trigger()
1916 slim_stream_disable(dai_data->sruntime); in wcd934x_trigger()
1917 slim_stream_unprepare(dai_data->sruntime); in wcd934x_trigger()
1933 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_set_channel_map()
1936 dev_err(wcd->dev, "Invalid tx %d or rx %d channel count\n", in wcd934x_set_channel_map()
1938 return -EINVAL; in wcd934x_set_channel_map()
1942 dev_err(wcd->dev, "Invalid tx_slot=%p, rx_slot=%p\n", in wcd934x_set_channel_map()
1944 return -EINVAL; in wcd934x_set_channel_map()
1947 wcd->num_rx_port = rx_num; in wcd934x_set_channel_map()
1949 wcd->rx_chs[i].ch_num = rx_slot[i]; in wcd934x_set_channel_map()
1950 INIT_LIST_HEAD(&wcd->rx_chs[i].list); in wcd934x_set_channel_map()
1953 wcd->num_tx_port = tx_num; in wcd934x_set_channel_map()
1955 wcd->tx_chs[i].ch_num = tx_slot[i]; in wcd934x_set_channel_map()
1956 INIT_LIST_HEAD(&wcd->tx_chs[i].list); in wcd934x_set_channel_map()
1970 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_get_channel_map()
1972 switch (dai->id) { in wcd934x_get_channel_map()
1978 dev_err(wcd->dev, "Invalid rx_slot %p or rx_num %p\n", in wcd934x_get_channel_map()
1980 return -EINVAL; in wcd934x_get_channel_map()
1983 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd934x_get_channel_map()
1984 rx_slot[i++] = ch->ch_num; in wcd934x_get_channel_map()
1992 dev_err(wcd->dev, "Invalid tx_slot %p or tx_num %p\n", in wcd934x_get_channel_map()
1994 return -EINVAL; in wcd934x_get_channel_map()
1997 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd934x_get_channel_map()
1998 tx_slot[i++] = ch->ch_num; in wcd934x_get_channel_map()
2003 dev_err(wcd->dev, "Invalid DAI ID %x\n", dai->id); in wcd934x_get_channel_map()
2134 regmap_read(wcd->regmap, WCD934X_CDC_CLK_RST_CTRL_SWR_CONTROL, &val); in swclk_gate_is_enabled()
2156 struct clk *parent = wcd->extclk; in wcd934x_register_mclk_output()
2157 struct device *dev = wcd->dev; in wcd934x_register_mclk_output()
2158 struct device_node *np = dev->parent->of_node; in wcd934x_register_mclk_output()
2165 if (of_property_read_u32(np, "clock-frequency", &wcd->rate)) in wcd934x_register_mclk_output()
2170 of_property_read_string(np, "clock-output-names", &clk_name); in wcd934x_register_mclk_output()
2177 wcd->hw.init = &init; in wcd934x_register_mclk_output()
2179 hw = &wcd->hw; in wcd934x_register_mclk_output()
2180 ret = devm_clk_hw_register(wcd->dev->parent, hw); in wcd934x_register_mclk_output()
2196 if (of_property_read_u32(dev->parent->of_node, micbias, &mv)) { in wcd934x_get_micbias_val()
2212 return (mv - 1000) / 50; in wcd934x_get_micbias_val()
2218 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_init_dmic()
2221 vout_ctl_1 = wcd934x_get_micbias_val(comp->dev, in wcd934x_init_dmic()
2222 "qcom,micbias1-microvolt", in wcd934x_init_dmic()
2223 &wcd->micb1_mv); in wcd934x_init_dmic()
2224 vout_ctl_2 = wcd934x_get_micbias_val(comp->dev, in wcd934x_init_dmic()
2225 "qcom,micbias2-microvolt", in wcd934x_init_dmic()
2226 &wcd->micb2_mv); in wcd934x_init_dmic()
2227 vout_ctl_3 = wcd934x_get_micbias_val(comp->dev, in wcd934x_init_dmic()
2228 "qcom,micbias3-microvolt", in wcd934x_init_dmic()
2229 &wcd->micb3_mv); in wcd934x_init_dmic()
2230 vout_ctl_4 = wcd934x_get_micbias_val(comp->dev, in wcd934x_init_dmic()
2231 "qcom,micbias4-microvolt", in wcd934x_init_dmic()
2232 &wcd->micb4_mv); in wcd934x_init_dmic()
2243 if (wcd->rate == WCD934X_MCLK_CLK_9P6MHZ) in wcd934x_init_dmic()
2248 wcd->dmic_sample_rate = def_dmic_rate; in wcd934x_init_dmic()
2259 struct regmap *rm = wcd->regmap; in wcd934x_hw_init()
2271 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_comp_init()
2292 regmap_read(wcd->if_regmap, i, &val); in wcd934x_slim_irq_handler()
2302 port_id = j - 16; in wcd934x_slim_irq_handler()
2305 regmap_read(wcd->if_regmap, in wcd934x_slim_irq_handler()
2314 regmap_read(wcd->if_regmap, reg, &int_val); in wcd934x_slim_irq_handler()
2318 dev_err_ratelimited(wcd->dev, in wcd934x_slim_irq_handler()
2323 dev_err_ratelimited(wcd->dev, in wcd934x_slim_irq_handler()
2336 wcd->if_regmap, reg, &int_val); in wcd934x_slim_irq_handler()
2339 regmap_write(wcd->if_regmap, in wcd934x_slim_irq_handler()
2345 dev_err_ratelimited(wcd->dev, in wcd934x_slim_irq_handler()
2349 regmap_write(wcd->if_regmap, in wcd934x_slim_irq_handler()
2379 dev_err(component->dev, "%s: invalid number of buttons: %d\n", in wcd934x_mbhc_program_btn_thr()
2421 int micb_index = micb_num - 1; in wcd934x_micbias_control()
2438 dev_err(component->dev, "%s: Invalid micbias number: %d\n", in wcd934x_micbias_control()
2440 return -EINVAL; in wcd934x_micbias_control()
2442 mutex_lock(&wcd934x->micb_lock); in wcd934x_micbias_control()
2446 wcd934x->pullup_ref[micb_index]++; in wcd934x_micbias_control()
2447 if ((wcd934x->pullup_ref[micb_index] == 1) && in wcd934x_micbias_control()
2448 (wcd934x->micb_ref[micb_index] == 0)) in wcd934x_micbias_control()
2454 if (wcd934x->pullup_ref[micb_index] > 0) in wcd934x_micbias_control()
2455 wcd934x->pullup_ref[micb_index]--; in wcd934x_micbias_control()
2457 if ((wcd934x->pullup_ref[micb_index] == 0) && in wcd934x_micbias_control()
2458 (wcd934x->micb_ref[micb_index] == 0)) in wcd934x_micbias_control()
2463 wcd934x->micb_ref[micb_index]++; in wcd934x_micbias_control()
2464 if (wcd934x->micb_ref[micb_index] == 1) { in wcd934x_micbias_control()
2469 wcd_mbhc_event_notify(wcd934x->mbhc, in wcd934x_micbias_control()
2474 wcd_mbhc_event_notify(wcd934x->mbhc, in wcd934x_micbias_control()
2478 if (wcd934x->micb_ref[micb_index] > 0) in wcd934x_micbias_control()
2479 wcd934x->micb_ref[micb_index]--; in wcd934x_micbias_control()
2481 if ((wcd934x->micb_ref[micb_index] == 0) && in wcd934x_micbias_control()
2482 (wcd934x->pullup_ref[micb_index] > 0)) in wcd934x_micbias_control()
2486 else if ((wcd934x->micb_ref[micb_index] == 0) && in wcd934x_micbias_control()
2487 (wcd934x->pullup_ref[micb_index] == 0)) { in wcd934x_micbias_control()
2489 wcd_mbhc_event_notify(wcd934x->mbhc, in wcd934x_micbias_control()
2495 wcd_mbhc_event_notify(wcd934x->mbhc, in wcd934x_micbias_control()
2499 wcd_mbhc_event_notify(wcd934x->mbhc, in wcd934x_micbias_control()
2504 mutex_unlock(&wcd934x->micb_lock); in wcd934x_micbias_control()
2512 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_mbhc_request_micbias()
2546 return -EINVAL; in wcd934x_get_micb_vout_ctl_val()
2548 return (micb_mv - 1000) / 50; in wcd934x_get_micb_vout_ctl_val()
2571 return -EINVAL; in wcd934x_mbhc_micb_adjust_voltage()
2573 mutex_lock(&wcd934x->micb_lock); in wcd934x_mbhc_micb_adjust_voltage()
2578 * to avoid slow micbias ramp-up or down enable pull-up in wcd934x_mbhc_micb_adjust_voltage()
2579 * momentarily, change the micbias value and then re-enable in wcd934x_mbhc_micb_adjust_voltage()
2589 ret = -EINVAL; in wcd934x_mbhc_micb_adjust_voltage()
2618 mutex_unlock(&wcd934x->micb_lock); in wcd934x_mbhc_micb_adjust_voltage()
2629 return -EINVAL; in wcd934x_mbhc_micb_ctrl_threshold_mic()
2635 if (wcd934x->micb2_mv >= WCD_MBHC_THR_HS_MICB_MV) in wcd934x_mbhc_micb_ctrl_threshold_mic()
2638 micb_mv = req_en ? WCD_MBHC_THR_HS_MICB_MV : wcd934x->micb2_mv; in wcd934x_mbhc_micb_ctrl_threshold_mic()
2658 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_ZDET, 0x20, 0x20); in wcd934x_mbhc_get_result_params()
2660 regmap_read(wcd934x->regmap, WCD934X_ANA_MBHC_RESULT_2, &val); in wcd934x_mbhc_get_result_params()
2665 regmap_read(wcd934x->regmap, WCD934X_ANA_MBHC_RESULT_1, &val1); in wcd934x_mbhc_get_result_params()
2667 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_ZDET, 0x20, 0x00); in wcd934x_mbhc_get_result_params()
2675 dev_err(wcd934x->dev, "%s: Impedance detect ramp error, c1=%d, x1=0x%x\n", in wcd934x_mbhc_get_result_params()
2680 denom = (x1 * d1) - (1 << (14 - noff)); in wcd934x_mbhc_get_result_params()
2686 dev_dbg(wcd934x->dev, "%s: d1=%d, c1=%d, x1=0x%x, z_val=%di (milliohm)\n", in wcd934x_mbhc_get_result_params()
2692 regmap_read(wcd934x->regmap, WCD934X_ANA_MBHC_RESULT_1, &val); in wcd934x_mbhc_get_result_params()
2693 regmap_read(wcd934x->regmap, WCD934X_ANA_MBHC_RESULT_2, &val1); in wcd934x_mbhc_get_result_params()
2707 struct wcd934x_codec *wcd934x = dev_get_drvdata(component->dev); in wcd934x_mbhc_zdet_ramp()
2711 WCD934X_ZDET_MAXV_CTL_MASK, zdet_param->ldo_ctl); in wcd934x_mbhc_zdet_ramp()
2713 WCD934X_VTH_MASK, zdet_param->btn5); in wcd934x_mbhc_zdet_ramp()
2715 WCD934X_VTH_MASK, zdet_param->btn6); in wcd934x_mbhc_zdet_ramp()
2717 WCD934X_VTH_MASK, zdet_param->btn7); in wcd934x_mbhc_zdet_ramp()
2719 WCD934X_ZDET_RANGE_CTL_MASK, zdet_param->noff); in wcd934x_mbhc_zdet_ramp()
2721 0x0F, zdet_param->nshift); in wcd934x_mbhc_zdet_ramp()
2726 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_ZDET, 0x80, 0x80); in wcd934x_mbhc_zdet_ramp()
2727 wcd934x_mbhc_get_result_params(wcd934x, d1_a, zdet_param->noff, &zdet); in wcd934x_mbhc_zdet_ramp()
2728 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_ZDET, 0x80, 0x00); in wcd934x_mbhc_zdet_ramp()
2736 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_ZDET, 0x40, 0x40); in wcd934x_mbhc_zdet_ramp()
2737 wcd934x_mbhc_get_result_params(wcd934x, d1_a, zdet_param->noff, &zdet); in wcd934x_mbhc_zdet_ramp()
2738 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_ZDET, 0x40, 0x00); in wcd934x_mbhc_zdet_ramp()
2756 q1_cal = (10000 - ((q1 & 0x7F) * 25)); in wcd934x_wcd_mbhc_qfuse_cal()
2766 struct wcd934x_codec *wcd934x = dev_get_drvdata(component->dev); in wcd934x_wcd_mbhc_calc_impedance()
2794 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_ELECT, 0x80, 0x00); in wcd934x_wcd_mbhc_calc_impedance()
2797 /* For NO-jack, disable L_DET_EN before Z-det measurements */ in wcd934x_wcd_mbhc_calc_impedance()
2798 if (wcd934x->mbhc_cfg.hphl_swh) in wcd934x_wcd_mbhc_calc_impedance()
2799 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_MECH, 0x80, 0x00); in wcd934x_wcd_mbhc_calc_impedance()
2802 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_MECH, 0x01, 0x00); in wcd934x_wcd_mbhc_calc_impedance()
2836 dev_info(component->dev, "%s: impedance on HPH_L = %d(ohms)\n", in wcd934x_wcd_mbhc_calc_impedance()
2843 (zdet_param_ptr->noff == 0x6)) || in wcd934x_wcd_mbhc_calc_impedance()
2868 dev_err(component->dev, "%s: impedance on HPH_R = %d(ohms)\n", in wcd934x_wcd_mbhc_calc_impedance()
2874 dev_dbg(component->dev, in wcd934x_wcd_mbhc_calc_impedance()
2883 dev_dbg(component->dev, in wcd934x_wcd_mbhc_calc_impedance()
2886 wcd_mbhc_set_hph_type(wcd934x->mbhc, WCD_MBHC_HPH_MONO); in wcd934x_wcd_mbhc_calc_impedance()
2905 z_diff1 = (z1Ls > zMono) ? (z1Ls - zMono) : (zMono - z1Ls); in wcd934x_wcd_mbhc_calc_impedance()
2906 z_diff2 = ((*zl) > z1Ls) ? ((*zl) - z1Ls) : (z1Ls - (*zl)); in wcd934x_wcd_mbhc_calc_impedance()
2908 dev_err(component->dev, "%s: stereo plug type detected\n", in wcd934x_wcd_mbhc_calc_impedance()
2910 wcd_mbhc_set_hph_type(wcd934x->mbhc, WCD_MBHC_HPH_STEREO); in wcd934x_wcd_mbhc_calc_impedance()
2912 dev_err(component->dev, "%s: MONO plug type detected\n", in wcd934x_wcd_mbhc_calc_impedance()
2914 wcd_mbhc_set_hph_type(wcd934x->mbhc, WCD_MBHC_HPH_MONO); in wcd934x_wcd_mbhc_calc_impedance()
2922 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_MECH, 0x01, 0x01); in wcd934x_wcd_mbhc_calc_impedance()
2924 /* For NO-jack, re-enable L_DET_EN after Z-det measurements */ in wcd934x_wcd_mbhc_calc_impedance()
2925 if (wcd934x->mbhc_cfg.hphl_swh) in wcd934x_wcd_mbhc_calc_impedance()
2926 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_MECH, 0x80, 0x80); in wcd934x_wcd_mbhc_calc_impedance()
2931 regmap_update_bits(wcd934x->regmap, WCD934X_ANA_MBHC_ELECT, 0x80, 0x80); in wcd934x_wcd_mbhc_calc_impedance()
2979 ucontrol->value.integer.value[0] = wcd_mbhc_get_hph_type(wcd->mbhc); in wcd934x_get_hph_type()
2993 mc = (struct soc_mixer_control *)(kcontrol->private_value); in wcd934x_hph_impedance_get()
2994 hphr = mc->shift; in wcd934x_hph_impedance_get()
2995 wcd_mbhc_get_impedance(wcd->mbhc, &zl, &zr); in wcd934x_hph_impedance_get()
2996 dev_dbg(component->dev, "%s: zl=%u(ohms), zr=%u(ohms)\n", __func__, zl, zr); in wcd934x_hph_impedance_get()
2997 ucontrol->value.integer.value[0] = hphr ? zr : zl; in wcd934x_hph_impedance_get()
3015 struct wcd934x_ddata *data = dev_get_drvdata(component->dev->parent); in wcd934x_mbhc_init()
3017 struct wcd_mbhc_intr *intr_ids = &wcd->intr_ids; in wcd934x_mbhc_init()
3019 intr_ids->mbhc_sw_intr = regmap_irq_get_virq(data->irq_data, in wcd934x_mbhc_init()
3021 intr_ids->mbhc_btn_press_intr = regmap_irq_get_virq(data->irq_data, in wcd934x_mbhc_init()
3023 intr_ids->mbhc_btn_release_intr = regmap_irq_get_virq(data->irq_data, in wcd934x_mbhc_init()
3025 intr_ids->mbhc_hs_ins_intr = regmap_irq_get_virq(data->irq_data, in wcd934x_mbhc_init()
3027 intr_ids->mbhc_hs_rem_intr = regmap_irq_get_virq(data->irq_data, in wcd934x_mbhc_init()
3029 intr_ids->hph_left_ocp = regmap_irq_get_virq(data->irq_data, in wcd934x_mbhc_init()
3031 intr_ids->hph_right_ocp = regmap_irq_get_virq(data->irq_data, in wcd934x_mbhc_init()
3034 wcd->mbhc = wcd_mbhc_init(component, &mbhc_cb, intr_ids, wcd_mbhc_fields, true); in wcd934x_mbhc_init()
3035 if (IS_ERR(wcd->mbhc)) { in wcd934x_mbhc_init()
3036 wcd->mbhc = NULL; in wcd934x_mbhc_init()
3037 return -EINVAL; in wcd934x_mbhc_init()
3052 if (!wcd->mbhc) in wcd934x_mbhc_deinit()
3055 wcd_mbhc_deinit(wcd->mbhc); in wcd934x_mbhc_deinit()
3060 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_comp_probe()
3063 snd_soc_component_init_regmap(component, wcd->regmap); in wcd934x_comp_probe()
3064 wcd->component = component; in wcd934x_comp_probe()
3066 /* Class-H Init*/ in wcd934x_comp_probe()
3067 wcd->clsh_ctrl = wcd_clsh_ctrl_alloc(component, wcd->version); in wcd934x_comp_probe()
3068 if (IS_ERR(wcd->clsh_ctrl)) in wcd934x_comp_probe()
3069 return PTR_ERR(wcd->clsh_ctrl); in wcd934x_comp_probe()
3071 /* Default HPH Mode to Class-H Low HiFi */ in wcd934x_comp_probe()
3072 wcd->hph_mode = CLS_H_LOHIFI; in wcd934x_comp_probe()
3077 INIT_LIST_HEAD(&wcd->dai[i].slim_ch_list); in wcd934x_comp_probe()
3082 dev_err(component->dev, "Failed to Initialize MBHC\n"); in wcd934x_comp_probe()
3089 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_comp_remove()
3092 wcd_clsh_ctrl_free(wcd->clsh_ctrl); in wcd934x_comp_remove()
3099 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_comp_set_sysclk()
3102 wcd->rate = freq; in wcd934x_comp_set_sysclk()
3104 if (wcd->rate == WCD934X_MCLK_CLK_12P288MHZ) in wcd934x_comp_set_sysclk()
3111 return clk_set_rate(wcd->extclk, freq); in wcd934x_comp_set_sysclk()
3156 /* Mask top 2 bits, 7-8 are reserved */ in set_iir_band_coeff()
3167 (struct wcd_iir_filter_ctl *)kcontrol->private_value; in wcd934x_put_iir_band_audio_mixer()
3168 struct soc_bytes_ext *params = &ctl->bytes_ext; in wcd934x_put_iir_band_audio_mixer()
3169 int iir_idx = ctl->iir_idx; in wcd934x_put_iir_band_audio_mixer()
3170 int band_idx = ctl->band_idx; in wcd934x_put_iir_band_audio_mixer()
3174 memcpy(&coeff[0], ucontrol->value.bytes.data, params->max); in wcd934x_put_iir_band_audio_mixer()
3196 (struct wcd_iir_filter_ctl *)kcontrol->private_value; in wcd934x_get_iir_band_audio_mixer()
3197 struct soc_bytes_ext *params = &ctl->bytes_ext; in wcd934x_get_iir_band_audio_mixer()
3198 int iir_idx = ctl->iir_idx; in wcd934x_get_iir_band_audio_mixer()
3199 int band_idx = ctl->band_idx; in wcd934x_get_iir_band_audio_mixer()
3208 memcpy(ucontrol->value.bytes.data, &coeff[0], params->max); in wcd934x_get_iir_band_audio_mixer()
3217 (struct wcd_iir_filter_ctl *)kcontrol->private_value; in wcd934x_iir_filter_info()
3218 struct soc_bytes_ext *params = &ctl->bytes_ext; in wcd934x_iir_filter_info()
3220 ucontrol->type = SNDRV_CTL_ELEM_TYPE_BYTES; in wcd934x_iir_filter_info()
3221 ucontrol->count = params->max; in wcd934x_iir_filter_info()
3230 int comp = ((struct soc_mixer_control *)kc->private_value)->shift; in wcd934x_compander_get()
3231 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_compander_get()
3233 ucontrol->value.integer.value[0] = wcd->comp_enabled[comp]; in wcd934x_compander_get()
3242 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_compander_set()
3243 int comp = ((struct soc_mixer_control *)kc->private_value)->shift; in wcd934x_compander_set()
3244 int value = ucontrol->value.integer.value[0]; in wcd934x_compander_set()
3247 if (wcd->comp_enabled[comp] == value) in wcd934x_compander_set()
3250 wcd->comp_enabled[comp] = value; in wcd934x_compander_set()
3283 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_rx_hph_mode_get()
3285 ucontrol->value.enumerated.item[0] = wcd->hph_mode; in wcd934x_rx_hph_mode_get()
3294 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_rx_hph_mode_put()
3297 mode_val = ucontrol->value.enumerated.item[0]; in wcd934x_rx_hph_mode_put()
3299 if (mode_val == wcd->hph_mode) in wcd934x_rx_hph_mode_put()
3303 dev_err(wcd->dev, "Invalid HPH Mode, default to ClSH HiFi\n"); in wcd934x_rx_hph_mode_put()
3306 wcd->hph_mode = mode_val; in wcd934x_rx_hph_mode_put()
3316 struct wcd934x_codec *wcd = dev_get_drvdata(dapm->dev); in slim_rx_mux_get()
3318 ucontrol->value.enumerated.item[0] = wcd->rx_port_value[w->shift]; in slim_rx_mux_get()
3323 static int slim_rx_mux_to_dai_id(int mux) in slim_rx_mux_to_dai_id() argument
3327 switch (mux) { in slim_rx_mux_to_dai_id()
3341 aif_id = -1; in slim_rx_mux_to_dai_id()
3352 struct wcd934x_codec *wcd = dev_get_drvdata(w->dapm->dev); in slim_rx_mux_put()
3353 struct soc_enum *e = (struct soc_enum *)kc->private_value; in slim_rx_mux_put()
3356 u32 port_id = w->shift; in slim_rx_mux_put()
3359 int prev_mux_idx = wcd->rx_port_value[port_id]; in slim_rx_mux_put()
3362 mux_idx = ucontrol->value.enumerated.item[0]; in slim_rx_mux_put()
3373 list_for_each_entry_safe(ch, c, &wcd->dai[aif_id].slim_ch_list, list) { in slim_rx_mux_put()
3374 if (ch->port == port_id + WCD934X_RX_START) { in slim_rx_mux_put()
3376 list_del_init(&ch->list); in slim_rx_mux_put()
3389 if (list_empty(&wcd->rx_chs[port_id].list)) { in slim_rx_mux_put()
3390 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
3391 &wcd->dai[aif_id].slim_ch_list); in slim_rx_mux_put()
3393 dev_err(wcd->dev ,"SLIM_RX%d PORT is busy\n", port_id); in slim_rx_mux_put()
3399 dev_err(wcd->dev, "Unknown AIF %d\n", mux_idx); in slim_rx_mux_put()
3403 wcd->rx_port_value[port_id] = mux_idx; in slim_rx_mux_put()
3404 snd_soc_dapm_mux_update_power(w->dapm, kc, wcd->rx_port_value[port_id], in slim_rx_mux_put()
3409 return -EINVAL; in slim_rx_mux_put()
3415 struct soc_enum *e = (struct soc_enum *)kc->private_value; in wcd934x_int_dem_inp_mux_put()
3420 val = ucontrol->value.enumerated.item[0]; in wcd934x_int_dem_inp_mux_put()
3421 if (e->reg == WCD934X_CDC_RX0_RX_PATH_SEC0) in wcd934x_int_dem_inp_mux_put()
3423 else if (e->reg == WCD934X_CDC_RX1_RX_PATH_SEC0) in wcd934x_int_dem_inp_mux_put()
3425 else if (e->reg == WCD934X_CDC_RX2_RX_PATH_SEC0) in wcd934x_int_dem_inp_mux_put()
3428 return -EINVAL; in wcd934x_int_dem_inp_mux_put()
3447 struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; in wcd934x_dec_enum_put()
3454 val = ucontrol->value.enumerated.item[0]; in wcd934x_dec_enum_put()
3455 if (val > e->items - 1) in wcd934x_dec_enum_put()
3456 return -EINVAL; in wcd934x_dec_enum_put()
3458 switch (e->reg) { in wcd934x_dec_enum_put()
3460 if (e->shift_l == 0) in wcd934x_dec_enum_put()
3462 else if (e->shift_l == 2) in wcd934x_dec_enum_put()
3464 else if (e->shift_l == 4) in wcd934x_dec_enum_put()
3468 if (e->shift_l == 0) in wcd934x_dec_enum_put()
3470 else if (e->shift_l == 2) in wcd934x_dec_enum_put()
3474 if (e->shift_l == 0) in wcd934x_dec_enum_put()
3476 else if (e->shift_l == 2) in wcd934x_dec_enum_put()
3480 if (e->shift_l == 0) in wcd934x_dec_enum_put()
3482 else if (e->shift_l == 2) in wcd934x_dec_enum_put()
3486 dev_err(comp->dev, "%s: e->reg: 0x%x not expected\n", in wcd934x_dec_enum_put()
3487 __func__, e->reg); in wcd934x_dec_enum_put()
3488 return -EINVAL; in wcd934x_dec_enum_put()
3501 SOC_DAPM_ENUM("RX INT0_2 MUX Mux", rx_int0_2_mux_chain_enum);
3504 SOC_DAPM_ENUM("RX INT1_2 MUX Mux", rx_int1_2_mux_chain_enum);
3507 SOC_DAPM_ENUM("RX INT2_2 MUX Mux", rx_int2_2_mux_chain_enum);
3510 SOC_DAPM_ENUM("RX INT3_2 MUX Mux", rx_int3_2_mux_chain_enum);
3513 SOC_DAPM_ENUM("RX INT4_2 MUX Mux", rx_int4_2_mux_chain_enum);
3516 SOC_DAPM_ENUM("RX INT7_2 MUX Mux", rx_int7_2_mux_chain_enum);
3519 SOC_DAPM_ENUM("RX INT8_2 MUX Mux", rx_int8_2_mux_chain_enum);
3522 SOC_DAPM_ENUM("RX INT0_1 MIX1 INP0 Mux", rx_int0_1_mix_inp0_chain_enum);
3525 SOC_DAPM_ENUM("RX INT0_1 MIX1 INP1 Mux", rx_int0_1_mix_inp1_chain_enum);
3528 SOC_DAPM_ENUM("RX INT0_1 MIX1 INP2 Mux", rx_int0_1_mix_inp2_chain_enum);
3531 SOC_DAPM_ENUM("RX INT1_1 MIX1 INP0 Mux", rx_int1_1_mix_inp0_chain_enum);
3534 SOC_DAPM_ENUM("RX INT1_1 MIX1 INP1 Mux", rx_int1_1_mix_inp1_chain_enum);
3537 SOC_DAPM_ENUM("RX INT1_1 MIX1 INP2 Mux", rx_int1_1_mix_inp2_chain_enum);
3540 SOC_DAPM_ENUM("RX INT2_1 MIX1 INP0 Mux", rx_int2_1_mix_inp0_chain_enum);
3543 SOC_DAPM_ENUM("RX INT2_1 MIX1 INP1 Mux", rx_int2_1_mix_inp1_chain_enum);
3546 SOC_DAPM_ENUM("RX INT2_1 MIX1 INP2 Mux", rx_int2_1_mix_inp2_chain_enum);
3549 SOC_DAPM_ENUM("RX INT3_1 MIX1 INP0 Mux", rx_int3_1_mix_inp0_chain_enum);
3552 SOC_DAPM_ENUM("RX INT3_1 MIX1 INP1 Mux", rx_int3_1_mix_inp1_chain_enum);
3555 SOC_DAPM_ENUM("RX INT3_1 MIX1 INP2 Mux", rx_int3_1_mix_inp2_chain_enum);
3558 SOC_DAPM_ENUM("RX INT4_1 MIX1 INP0 Mux", rx_int4_1_mix_inp0_chain_enum);
3561 SOC_DAPM_ENUM("RX INT4_1 MIX1 INP1 Mux", rx_int4_1_mix_inp1_chain_enum);
3564 SOC_DAPM_ENUM("RX INT4_1 MIX1 INP2 Mux", rx_int4_1_mix_inp2_chain_enum);
3567 SOC_DAPM_ENUM("RX INT7_1 MIX1 INP0 Mux", rx_int7_1_mix_inp0_chain_enum);
3570 SOC_DAPM_ENUM("RX INT7_1 MIX1 INP1 Mux", rx_int7_1_mix_inp1_chain_enum);
3573 SOC_DAPM_ENUM("RX INT7_1 MIX1 INP2 Mux", rx_int7_1_mix_inp2_chain_enum);
3576 SOC_DAPM_ENUM("RX INT8_1 MIX1 INP0 Mux", rx_int8_1_mix_inp0_chain_enum);
3579 SOC_DAPM_ENUM("RX INT8_1 MIX1 INP1 Mux", rx_int8_1_mix_inp1_chain_enum);
3582 SOC_DAPM_ENUM("RX INT8_1 MIX1 INP2 Mux", rx_int8_1_mix_inp2_chain_enum);
3585 SOC_DAPM_ENUM("RX INT0 MIX2 INP Mux", rx_int0_mix2_inp_mux_enum);
3588 SOC_DAPM_ENUM("RX INT1 MIX2 INP Mux", rx_int1_mix2_inp_mux_enum);
3591 SOC_DAPM_ENUM("RX INT2 MIX2 INP Mux", rx_int2_mix2_inp_mux_enum);
3594 SOC_DAPM_ENUM("RX INT3 MIX2 INP Mux", rx_int3_mix2_inp_mux_enum);
3597 SOC_DAPM_ENUM("RX INT4 MIX2 INP Mux", rx_int4_mix2_inp_mux_enum);
3600 SOC_DAPM_ENUM("RX INT7 MIX2 INP Mux", rx_int7_mix2_inp_mux_enum);
3603 SOC_DAPM_ENUM("IIR0 INP0 Mux", iir0_inp0_mux_enum);
3605 SOC_DAPM_ENUM("IIR0 INP1 Mux", iir0_inp1_mux_enum);
3607 SOC_DAPM_ENUM("IIR0 INP2 Mux", iir0_inp2_mux_enum);
3609 SOC_DAPM_ENUM("IIR0 INP3 Mux", iir0_inp3_mux_enum);
3612 SOC_DAPM_ENUM("IIR1 INP0 Mux", iir1_inp0_mux_enum);
3614 SOC_DAPM_ENUM("IIR1 INP1 Mux", iir1_inp1_mux_enum);
3616 SOC_DAPM_ENUM("IIR1 INP2 Mux", iir1_inp2_mux_enum);
3618 SOC_DAPM_ENUM("IIR1 INP3 Mux", iir1_inp3_mux_enum);
3621 SOC_DAPM_ENUM_EXT("SLIM RX0 Mux", slim_rx_mux_enum,
3623 SOC_DAPM_ENUM_EXT("SLIM RX1 Mux", slim_rx_mux_enum,
3625 SOC_DAPM_ENUM_EXT("SLIM RX2 Mux", slim_rx_mux_enum,
3627 SOC_DAPM_ENUM_EXT("SLIM RX3 Mux", slim_rx_mux_enum,
3629 SOC_DAPM_ENUM_EXT("SLIM RX4 Mux", slim_rx_mux_enum,
3631 SOC_DAPM_ENUM_EXT("SLIM RX5 Mux", slim_rx_mux_enum,
3633 SOC_DAPM_ENUM_EXT("SLIM RX6 Mux", slim_rx_mux_enum,
3635 SOC_DAPM_ENUM_EXT("SLIM RX7 Mux", slim_rx_mux_enum,
3656 SOC_DAPM_ENUM_EXT("RX INT0 DEM MUX Mux", rx_int0_dem_inp_mux_enum,
3661 SOC_DAPM_ENUM_EXT("RX INT1 DEM MUX Mux", rx_int1_dem_inp_mux_enum,
3666 SOC_DAPM_ENUM_EXT("RX INT2 DEM MUX Mux", rx_int2_dem_inp_mux_enum,
3671 SOC_DAPM_ENUM("RX INT0_1 INTERP Mux", rx_int0_1_interp_mux_enum);
3674 SOC_DAPM_ENUM("RX INT1_1 INTERP Mux", rx_int1_1_interp_mux_enum);
3677 SOC_DAPM_ENUM("RX INT2_1 INTERP Mux", rx_int2_1_interp_mux_enum);
3680 SOC_DAPM_ENUM("RX INT3_1 INTERP Mux", rx_int3_1_interp_mux_enum);
3683 SOC_DAPM_ENUM("RX INT4_1 INTERP Mux", rx_int4_1_interp_mux_enum);
3686 SOC_DAPM_ENUM("RX INT7_1 INTERP Mux", rx_int7_1_interp_mux_enum);
3689 SOC_DAPM_ENUM("RX INT8_1 INTERP Mux", rx_int8_1_interp_mux_enum);
3692 SOC_DAPM_ENUM("RX INT0_2 INTERP Mux", rx_int0_2_interp_mux_enum);
3695 SOC_DAPM_ENUM("RX INT1_2 INTERP Mux", rx_int1_2_interp_mux_enum);
3698 SOC_DAPM_ENUM("RX INT2_2 INTERP Mux", rx_int2_2_interp_mux_enum);
3701 SOC_DAPM_ENUM("RX INT3_2 INTERP Mux", rx_int3_2_interp_mux_enum);
3704 SOC_DAPM_ENUM("RX INT4_2 INTERP Mux", rx_int4_2_interp_mux_enum);
3707 SOC_DAPM_ENUM("RX INT7_2 INTERP Mux", rx_int7_2_interp_mux_enum);
3710 SOC_DAPM_ENUM("RX INT8_2 INTERP Mux", rx_int8_2_interp_mux_enum);
3713 SOC_DAPM_ENUM("DMIC MUX0 Mux", tx_dmic_mux0_enum);
3716 SOC_DAPM_ENUM("DMIC MUX1 Mux", tx_dmic_mux1_enum);
3719 SOC_DAPM_ENUM("DMIC MUX2 Mux", tx_dmic_mux2_enum);
3722 SOC_DAPM_ENUM("DMIC MUX3 Mux", tx_dmic_mux3_enum);
3725 SOC_DAPM_ENUM("DMIC MUX4 Mux", tx_dmic_mux4_enum);
3728 SOC_DAPM_ENUM("DMIC MUX5 Mux", tx_dmic_mux5_enum);
3731 SOC_DAPM_ENUM("DMIC MUX6 Mux", tx_dmic_mux6_enum);
3734 SOC_DAPM_ENUM("DMIC MUX7 Mux", tx_dmic_mux7_enum);
3737 SOC_DAPM_ENUM("DMIC MUX8 Mux", tx_dmic_mux8_enum);
3740 SOC_DAPM_ENUM("AMIC MUX0 Mux", tx_amic_mux0_enum);
3743 SOC_DAPM_ENUM("AMIC MUX1 Mux", tx_amic_mux1_enum);
3746 SOC_DAPM_ENUM("AMIC MUX2 Mux", tx_amic_mux2_enum);
3749 SOC_DAPM_ENUM("AMIC MUX3 Mux", tx_amic_mux3_enum);
3752 SOC_DAPM_ENUM("AMIC MUX4 Mux", tx_amic_mux4_enum);
3755 SOC_DAPM_ENUM("AMIC MUX5 Mux", tx_amic_mux5_enum);
3758 SOC_DAPM_ENUM("AMIC MUX6 Mux", tx_amic_mux6_enum);
3761 SOC_DAPM_ENUM("AMIC MUX7 Mux", tx_amic_mux7_enum);
3764 SOC_DAPM_ENUM("AMIC MUX8 Mux", tx_amic_mux8_enum);
3767 SOC_DAPM_ENUM("AMIC4_5 SEL Mux", tx_amic4_5_enum);
3770 SOC_DAPM_ENUM_EXT("ADC MUX0 Mux", tx_adc_mux0_enum,
3773 SOC_DAPM_ENUM_EXT("ADC MUX1 Mux", tx_adc_mux1_enum,
3776 SOC_DAPM_ENUM_EXT("ADC MUX2 Mux", tx_adc_mux2_enum,
3779 SOC_DAPM_ENUM_EXT("ADC MUX3 Mux", tx_adc_mux3_enum,
3782 SOC_DAPM_ENUM_EXT("ADC MUX4 Mux", tx_adc_mux4_enum,
3785 SOC_DAPM_ENUM_EXT("ADC MUX5 Mux", tx_adc_mux5_enum,
3788 SOC_DAPM_ENUM_EXT("ADC MUX6 Mux", tx_adc_mux6_enum,
3791 SOC_DAPM_ENUM_EXT("ADC MUX7 Mux", tx_adc_mux7_enum,
3794 SOC_DAPM_ENUM_EXT("ADC MUX8 Mux", tx_adc_mux8_enum,
3798 SOC_DAPM_ENUM("CDC_IF TX0 MUX Mux", cdc_if_tx0_mux_enum);
3800 SOC_DAPM_ENUM("CDC_IF TX1 MUX Mux", cdc_if_tx1_mux_enum);
3802 SOC_DAPM_ENUM("CDC_IF TX2 MUX Mux", cdc_if_tx2_mux_enum);
3804 SOC_DAPM_ENUM("CDC_IF TX3 MUX Mux", cdc_if_tx3_mux_enum);
3806 SOC_DAPM_ENUM("CDC_IF TX4 MUX Mux", cdc_if_tx4_mux_enum);
3808 SOC_DAPM_ENUM("CDC_IF TX5 MUX Mux", cdc_if_tx5_mux_enum);
3810 SOC_DAPM_ENUM("CDC_IF TX6 MUX Mux", cdc_if_tx6_mux_enum);
3812 SOC_DAPM_ENUM("CDC_IF TX7 MUX Mux", cdc_if_tx7_mux_enum);
3814 SOC_DAPM_ENUM("CDC_IF TX8 MUX Mux", cdc_if_tx8_mux_enum);
3816 SOC_DAPM_ENUM("CDC_IF TX9 MUX Mux", cdc_if_tx9_mux_enum);
3818 SOC_DAPM_ENUM("CDC_IF TX10 MUX Mux", cdc_if_tx10_mux_enum);
3820 SOC_DAPM_ENUM("CDC_IF TX11 MUX Mux", cdc_if_tx11_mux_enum);
3822 SOC_DAPM_ENUM("CDC_IF TX11 INP1 MUX Mux", cdc_if_tx11_inp1_mux_enum);
3824 SOC_DAPM_ENUM("CDC_IF TX13 MUX Mux", cdc_if_tx13_mux_enum);
3826 SOC_DAPM_ENUM("CDC_IF TX13 INP1 MUX Mux", cdc_if_tx13_inp1_mux_enum);
3832 struct wcd934x_codec *wcd = dev_get_drvdata(dapm->dev); in slim_tx_mixer_get()
3834 (struct soc_mixer_control *)kc->private_value; in slim_tx_mixer_get()
3835 int port_id = mixer->shift; in slim_tx_mixer_get()
3837 ucontrol->value.integer.value[0] = wcd->tx_port_value[port_id]; in slim_tx_mixer_get()
3846 struct wcd934x_codec *wcd = dev_get_drvdata(widget->dapm->dev); in slim_tx_mixer_put()
3849 (struct soc_mixer_control *)kc->private_value; in slim_tx_mixer_put()
3850 int enable = ucontrol->value.integer.value[0]; in slim_tx_mixer_put()
3852 int dai_id = widget->shift; in slim_tx_mixer_put()
3853 int port_id = mixer->shift; in slim_tx_mixer_put()
3855 /* only add to the list if value not set */ in slim_tx_mixer_put()
3856 if (enable == wcd->tx_port_value[port_id]) in slim_tx_mixer_put()
3860 if (list_empty(&wcd->tx_chs[port_id].list)) { in slim_tx_mixer_put()
3861 list_add_tail(&wcd->tx_chs[port_id].list, in slim_tx_mixer_put()
3862 &wcd->dai[dai_id].slim_ch_list); in slim_tx_mixer_put()
3864 dev_err(wcd->dev ,"SLIM_TX%d PORT is busy\n", port_id); in slim_tx_mixer_put()
3870 list_for_each_entry_safe(ch, c, &wcd->dai[dai_id].slim_ch_list, list) { in slim_tx_mixer_put()
3871 if (ch->port == port_id) { in slim_tx_mixer_put()
3873 list_del_init(&wcd->tx_chs[port_id].list); in slim_tx_mixer_put()
3881 wcd->tx_port_value[port_id] = enable; in slim_tx_mixer_put()
3882 snd_soc_dapm_mixer_update_power(widget->dapm, kc, enable, update); in slim_tx_mixer_put()
3990 -84, 40, digital_gain), /* -84dB min - 40dB max */
3992 -84, 40, digital_gain),
3994 -84, 40, digital_gain),
3996 -84, 40, digital_gain),
3998 -84, 40, digital_gain),
4000 -84, 40, digital_gain),
4002 -84, 40, digital_gain),
4005 -84, 40, digital_gain),
4008 -84, 40, digital_gain),
4011 -84, 40, digital_gain),
4014 -84, 40, digital_gain),
4017 -84, 40, digital_gain),
4020 -84, 40, digital_gain),
4023 -84, 40, digital_gain),
4026 -84, 40, digital_gain),
4028 -84, 40, digital_gain),
4030 -84, 40, digital_gain),
4032 -84, 40, digital_gain),
4034 -84, 40, digital_gain),
4036 -84, 40, digital_gain),
4038 -84, 40, digital_gain),
4040 -84, 40, digital_gain),
4042 -84, 40, digital_gain),
4045 WCD934X_CDC_SIDETONE_IIR0_IIR_GAIN_B1_CTL, -84, 40,
4048 WCD934X_CDC_SIDETONE_IIR0_IIR_GAIN_B2_CTL, -84, 40,
4051 WCD934X_CDC_SIDETONE_IIR0_IIR_GAIN_B3_CTL, -84, 40,
4054 WCD934X_CDC_SIDETONE_IIR0_IIR_GAIN_B4_CTL, -84, 40,
4057 WCD934X_CDC_SIDETONE_IIR1_IIR_GAIN_B1_CTL, -84, 40,
4060 WCD934X_CDC_SIDETONE_IIR1_IIR_GAIN_B2_CTL, -84, 40,
4063 WCD934X_CDC_SIDETONE_IIR1_IIR_GAIN_B3_CTL, -84, 40,
4066 WCD934X_CDC_SIDETONE_IIR1_IIR_GAIN_B4_CTL, -84, 40,
4149 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_codec_enable_int_port()
4152 list_for_each_entry(ch, &dai->slim_ch_list, list) { in wcd934x_codec_enable_int_port()
4153 if (ch->port >= WCD934X_RX_START) { in wcd934x_codec_enable_int_port()
4154 port_num = ch->port - WCD934X_RX_START; in wcd934x_codec_enable_int_port()
4157 port_num = ch->port; in wcd934x_codec_enable_int_port()
4161 regmap_read(wcd->if_regmap, reg, &val); in wcd934x_codec_enable_int_port()
4163 regmap_write(wcd->if_regmap, reg, in wcd934x_codec_enable_int_port()
4171 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_slim()
4173 struct wcd_slim_codec_dai_data *dai = &wcd->dai[w->shift]; in wcd934x_codec_enable_slim()
4261 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_config_compander()
4269 compander = interp_n - 1; in wcd934x_config_compander()
4270 if (!wcd->comp_enabled[compander]) in wcd934x_config_compander()
4318 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_interp_clk()
4319 int interp_idx = w->shift; in wcd934x_codec_enable_interp_clk()
4359 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_mix_path()
4365 (w->shift * WCD934X_RX_PATH_CTL_OFFSET); in wcd934x_codec_enable_mix_path()
4367 (w->shift * WCD934X_RX_PATH_CTL_OFFSET); in wcd934x_codec_enable_mix_path()
4390 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_set_iir_gain()
4391 int reg = w->reg; in wcd934x_codec_set_iir_gain()
4425 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_main_path()
4428 gain_reg = WCD934X_CDC_RX0_RX_VOL_CTL + (w->shift * in wcd934x_codec_enable_main_path()
4444 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_ear_dac_event()
4445 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_ear_dac_event()
4453 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_ear_dac_event()
4458 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_ear_dac_event()
4470 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_hphl_dac_event()
4471 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_hphl_dac_event()
4472 int hph_mode = wcd->hph_mode; in wcd934x_codec_hphl_dac_event()
4483 return -EINVAL; in wcd934x_codec_hphl_dac_event()
4495 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_hphl_dac_event()
4502 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_hphl_dac_event()
4522 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_hphr_dac_event()
4523 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_hphr_dac_event()
4524 int hph_mode = wcd->hph_mode; in wcd934x_codec_hphr_dac_event()
4533 return -EINVAL; in wcd934x_codec_hphr_dac_event()
4545 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_hphr_dac_event()
4553 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_hphr_dac_event()
4571 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_lineout_dac_event()
4572 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_lineout_dac_event()
4576 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_lineout_dac_event()
4580 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_lineout_dac_event()
4592 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_hphl_pa()
4626 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_POST_HPHL_PA_OFF); in wcd934x_codec_enable_hphl_pa()
4645 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_POST_HPHL_PA_OFF); in wcd934x_codec_enable_hphl_pa()
4656 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_hphr_pa()
4692 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_PRE_HPHR_PA_OFF); in wcd934x_codec_enable_hphr_pa()
4710 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_POST_HPHR_PA_OFF); in wcd934x_codec_enable_hphr_pa()
4733 adc_mux_index - 4; in wcd934x_get_dmic_sample_rate()
4739 & 0xF8) >> 3) - 1; in wcd934x_get_dmic_sample_rate()
4753 dmic_fs = min(wcd->dmic_sample_rate, WCD9XXX_DMIC_SAMPLE_RATE_2P4MHZ); in wcd934x_get_dmic_sample_rate()
4757 dmic_fs = wcd->dmic_sample_rate; in wcd934x_get_dmic_sample_rate()
4776 dev_err(comp->dev, in wcd934x_get_dmic_clk_val()
4803 dev_err(comp->dev, in wcd934x_get_dmic_clk_val()
4816 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_dmic()
4817 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_enable_dmic()
4827 wname = strpbrk(w->name, "012345"); in wcd934x_codec_enable_dmic()
4829 dev_err(comp->dev, "%s: widget not found\n", __func__); in wcd934x_codec_enable_dmic()
4830 return -EINVAL; in wcd934x_codec_enable_dmic()
4835 dev_err(comp->dev, "%s: Invalid DMIC line on the codec\n", in wcd934x_codec_enable_dmic()
4837 return -EINVAL; in wcd934x_codec_enable_dmic()
4843 dmic_clk_cnt = &wcd->dmic_0_1_clk_cnt; in wcd934x_codec_enable_dmic()
4848 dmic_clk_cnt = &wcd->dmic_2_3_clk_cnt; in wcd934x_codec_enable_dmic()
4853 dmic_clk_cnt = &wcd->dmic_4_5_clk_cnt; in wcd934x_codec_enable_dmic()
4857 dev_err(comp->dev, "%s: Invalid DMIC Selection\n", in wcd934x_codec_enable_dmic()
4859 return -EINVAL; in wcd934x_codec_enable_dmic()
4866 dmic_rate_val = wcd934x_get_dmic_clk_val(comp, wcd->rate, in wcd934x_codec_enable_dmic()
4880 (*dmic_clk_cnt)--; in wcd934x_codec_enable_dmic()
4916 (adc_mux_n - 4); in wcd934x_codec_find_amic_input()
4920 adc_mux_n - 4; in wcd934x_codec_find_amic_input()
4926 adc_mux_n - 4; in wcd934x_codec_find_amic_input()
4929 ((adc_mux_n == 8) ? (adc_mux_n - 8) : in wcd934x_codec_find_amic_input()
4930 (adc_mux_n - 9)); in wcd934x_codec_find_amic_input()
4934 adc_mux_n - 4; in wcd934x_codec_find_amic_input()
4940 adc_mux_n - 4; in wcd934x_codec_find_amic_input()
4946 adc_mux_n - 4; in wcd934x_codec_find_amic_input()
4982 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_dec()
4993 widget_name = kstrndup(w->name, 15, GFP_KERNEL); in wcd934x_codec_enable_dec()
4995 return -ENOMEM; in wcd934x_codec_enable_dec()
5000 dev_err(comp->dev, "%s: Invalid decimator = %s\n", in wcd934x_codec_enable_dec()
5001 __func__, w->name); in wcd934x_codec_enable_dec()
5002 ret = -EINVAL; in wcd934x_codec_enable_dec()
5009 dev_err(comp->dev, "%s: decimator index not found\n", in wcd934x_codec_enable_dec()
5011 ret = -EINVAL; in wcd934x_codec_enable_dec()
5017 dev_err(comp->dev, "%s: Invalid decimator = %s\n", in wcd934x_codec_enable_dec()
5019 ret = -EINVAL; in wcd934x_codec_enable_dec()
5149 struct snd_soc_component *comp = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_adc()
5153 wcd934x_codec_set_tx_hold(comp, w->reg, true); in wcd934x_codec_enable_adc()
5166 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in wcd934x_codec_enable_micbias()
5167 int micb_num = w->shift; in wcd934x_codec_enable_micbias()
5213 SND_SOC_DAPM_MUX("SLIM RX0 MUX", SND_SOC_NOPM, WCD934X_RX0, 0,
5215 SND_SOC_DAPM_MUX("SLIM RX1 MUX", SND_SOC_NOPM, WCD934X_RX1, 0,
5217 SND_SOC_DAPM_MUX("SLIM RX2 MUX", SND_SOC_NOPM, WCD934X_RX2, 0,
5219 SND_SOC_DAPM_MUX("SLIM RX3 MUX", SND_SOC_NOPM, WCD934X_RX3, 0,
5221 SND_SOC_DAPM_MUX("SLIM RX4 MUX", SND_SOC_NOPM, WCD934X_RX4, 0,
5223 SND_SOC_DAPM_MUX("SLIM RX5 MUX", SND_SOC_NOPM, WCD934X_RX5, 0,
5225 SND_SOC_DAPM_MUX("SLIM RX6 MUX", SND_SOC_NOPM, WCD934X_RX6, 0,
5227 SND_SOC_DAPM_MUX("SLIM RX7 MUX", SND_SOC_NOPM, WCD934X_RX7, 0,
5239 SND_SOC_DAPM_MUX_E("RX INT0_2 MUX", SND_SOC_NOPM, INTERP_EAR, 0,
5243 SND_SOC_DAPM_MUX_E("RX INT1_2 MUX", SND_SOC_NOPM, INTERP_HPHL, 0,
5247 SND_SOC_DAPM_MUX_E("RX INT2_2 MUX", SND_SOC_NOPM, INTERP_HPHR, 0,
5251 SND_SOC_DAPM_MUX_E("RX INT3_2 MUX", SND_SOC_NOPM, INTERP_LO1, 0,
5255 SND_SOC_DAPM_MUX_E("RX INT4_2 MUX", SND_SOC_NOPM, INTERP_LO2, 0,
5259 SND_SOC_DAPM_MUX_E("RX INT7_2 MUX", SND_SOC_NOPM, INTERP_SPKR1, 0,
5263 SND_SOC_DAPM_MUX_E("RX INT8_2 MUX", SND_SOC_NOPM, INTERP_SPKR2, 0,
5366 SND_SOC_DAPM_MUX("IIR0 INP0 MUX", SND_SOC_NOPM, 0, 0, &iir0_inp0_mux),
5367 SND_SOC_DAPM_MUX("IIR0 INP1 MUX", SND_SOC_NOPM, 0, 0, &iir0_inp1_mux),
5368 SND_SOC_DAPM_MUX("IIR0 INP2 MUX", SND_SOC_NOPM, 0, 0, &iir0_inp2_mux),
5369 SND_SOC_DAPM_MUX("IIR0 INP3 MUX", SND_SOC_NOPM, 0, 0, &iir0_inp3_mux),
5370 SND_SOC_DAPM_MUX("IIR1 INP0 MUX", SND_SOC_NOPM, 0, 0, &iir1_inp0_mux),
5371 SND_SOC_DAPM_MUX("IIR1 INP1 MUX", SND_SOC_NOPM, 0, 0, &iir1_inp1_mux),
5372 SND_SOC_DAPM_MUX("IIR1 INP2 MUX", SND_SOC_NOPM, 0, 0, &iir1_inp2_mux),
5373 SND_SOC_DAPM_MUX("IIR1 INP3 MUX", SND_SOC_NOPM, 0, 0, &iir1_inp3_mux),
5385 SND_SOC_DAPM_MUX("RX INT0 DEM MUX", SND_SOC_NOPM, 0, 0,
5387 SND_SOC_DAPM_MUX("RX INT1 DEM MUX", SND_SOC_NOPM, 0, 0,
5389 SND_SOC_DAPM_MUX("RX INT2 DEM MUX", SND_SOC_NOPM, 0, 0,
5654 SND_SOC_DAPM_MUX("CDC_IF TX0 MUX", SND_SOC_NOPM, WCD934X_TX0, 0,
5656 SND_SOC_DAPM_MUX("CDC_IF TX1 MUX", SND_SOC_NOPM, WCD934X_TX1, 0,
5658 SND_SOC_DAPM_MUX("CDC_IF TX2 MUX", SND_SOC_NOPM, WCD934X_TX2, 0,
5660 SND_SOC_DAPM_MUX("CDC_IF TX3 MUX", SND_SOC_NOPM, WCD934X_TX3, 0,
5662 SND_SOC_DAPM_MUX("CDC_IF TX4 MUX", SND_SOC_NOPM, WCD934X_TX4, 0,
5664 SND_SOC_DAPM_MUX("CDC_IF TX5 MUX", SND_SOC_NOPM, WCD934X_TX5, 0,
5666 SND_SOC_DAPM_MUX("CDC_IF TX6 MUX", SND_SOC_NOPM, WCD934X_TX6, 0,
5668 SND_SOC_DAPM_MUX("CDC_IF TX7 MUX", SND_SOC_NOPM, WCD934X_TX7, 0,
5670 SND_SOC_DAPM_MUX("CDC_IF TX8 MUX", SND_SOC_NOPM, WCD934X_TX8, 0,
5672 SND_SOC_DAPM_MUX("CDC_IF TX9 MUX", SND_SOC_NOPM, WCD934X_TX9, 0,
5674 SND_SOC_DAPM_MUX("CDC_IF TX10 MUX", SND_SOC_NOPM, WCD934X_TX10, 0,
5676 SND_SOC_DAPM_MUX("CDC_IF TX11 MUX", SND_SOC_NOPM, WCD934X_TX11, 0,
5678 SND_SOC_DAPM_MUX("CDC_IF TX11 INP1 MUX", SND_SOC_NOPM, WCD934X_TX11, 0,
5680 SND_SOC_DAPM_MUX("CDC_IF TX13 MUX", SND_SOC_NOPM, WCD934X_TX13, 0,
5682 SND_SOC_DAPM_MUX("CDC_IF TX13 INP1 MUX", SND_SOC_NOPM, WCD934X_TX13, 0,
5696 /* RX0-RX7 */
5709 {"RX INT0 DEM MUX", "CLSH_DSM_OUT", "RX INT0 MIX2"},
5710 {"RX INT0 DAC", NULL, "RX INT0 DEM MUX"},
5719 {"RX INT1 DEM MUX", "CLSH_DSM_OUT", "RX INT1 MIX3"},
5720 {"RX INT1 DAC", NULL, "RX INT1 DEM MUX"},
5729 {"RX INT2 DEM MUX", "CLSH_DSM_OUT", "RX INT2 MIX3"},
5730 {"RX INT2 DAC", NULL, "RX INT2 DEM MUX"},
5795 {"CDC_IF TX0 MUX", "DEC0", "ADC MUX0"},
5796 {"CDC_IF TX1 MUX", "DEC1", "ADC MUX1"},
5797 {"CDC_IF TX2 MUX", "DEC2", "ADC MUX2"},
5798 {"CDC_IF TX3 MUX", "DEC3", "ADC MUX3"},
5799 {"CDC_IF TX4 MUX", "DEC4", "ADC MUX4"},
5800 {"CDC_IF TX5 MUX", "DEC5", "ADC MUX5"},
5801 {"CDC_IF TX6 MUX", "DEC6", "ADC MUX6"},
5802 {"CDC_IF TX7 MUX", "DEC7", "ADC MUX7"},
5803 {"CDC_IF TX8 MUX", "DEC8", "ADC MUX8"},
5830 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_set_jack()
5833 if (!wcd->mbhc) in wcd934x_codec_set_jack()
5834 return -ENOTSUPP; in wcd934x_codec_set_jack()
5836 if (jack && !wcd->mbhc_started) { in wcd934x_codec_set_jack()
5837 ret = wcd_mbhc_start(wcd->mbhc, &wcd->mbhc_cfg, jack); in wcd934x_codec_set_jack()
5838 wcd->mbhc_started = true; in wcd934x_codec_set_jack()
5839 } else if (wcd->mbhc_started) { in wcd934x_codec_set_jack()
5840 wcd_mbhc_stop(wcd->mbhc); in wcd934x_codec_set_jack()
5841 wcd->mbhc_started = false; in wcd934x_codec_set_jack()
5863 struct device *dev = &wcd->sdev->dev; in wcd934x_codec_parse_data()
5864 struct wcd_mbhc_config *cfg = &wcd->mbhc_cfg; in wcd934x_codec_parse_data()
5867 ifc_dev_np = of_parse_phandle(dev->of_node, "slim-ifc-dev", 0); in wcd934x_codec_parse_data()
5870 return -EINVAL; in wcd934x_codec_parse_data()
5873 wcd->sidev = of_slim_get_device(wcd->sdev->ctrl, ifc_dev_np); in wcd934x_codec_parse_data()
5875 if (!wcd->sidev) { in wcd934x_codec_parse_data()
5877 return -EINVAL; in wcd934x_codec_parse_data()
5880 slim_get_logical_addr(wcd->sidev); in wcd934x_codec_parse_data()
5881 wcd->if_regmap = regmap_init_slimbus(wcd->sidev, in wcd934x_codec_parse_data()
5883 if (IS_ERR(wcd->if_regmap)) in wcd934x_codec_parse_data()
5884 return dev_err_probe(dev, PTR_ERR(wcd->if_regmap), in wcd934x_codec_parse_data()
5887 of_property_read_u32(dev->parent->of_node, "qcom,dmic-sample-rate", in wcd934x_codec_parse_data()
5888 &wcd->dmic_sample_rate); in wcd934x_codec_parse_data()
5890 cfg->mbhc_micbias = MIC_BIAS_2; in wcd934x_codec_parse_data()
5891 cfg->anc_micbias = MIC_BIAS_2; in wcd934x_codec_parse_data()
5892 cfg->v_hs_max = WCD_MBHC_HS_V_MAX; in wcd934x_codec_parse_data()
5893 cfg->num_btn = WCD934X_MBHC_MAX_BUTTONS; in wcd934x_codec_parse_data()
5894 cfg->micb_mv = wcd->micb2_mv; in wcd934x_codec_parse_data()
5895 cfg->linein_th = 5000; in wcd934x_codec_parse_data()
5896 cfg->hs_thr = 1700; in wcd934x_codec_parse_data()
5897 cfg->hph_thr = 50; in wcd934x_codec_parse_data()
5907 struct device *dev = &pdev->dev; in wcd934x_codec_probe()
5908 struct wcd934x_ddata *data = dev_get_drvdata(dev->parent); in wcd934x_codec_probe()
5914 return -ENOMEM; in wcd934x_codec_probe()
5916 wcd->dev = dev; in wcd934x_codec_probe()
5917 wcd->regmap = data->regmap; in wcd934x_codec_probe()
5918 wcd->extclk = data->extclk; in wcd934x_codec_probe()
5919 wcd->sdev = to_slim_device(data->dev); in wcd934x_codec_probe()
5920 mutex_init(&wcd->sysclk_mutex); in wcd934x_codec_probe()
5921 mutex_init(&wcd->micb_lock); in wcd934x_codec_probe()
5925 dev_err(wcd->dev, "Failed to get SLIM IRQ\n"); in wcd934x_codec_probe()
5930 regmap_update_bits(wcd->regmap, WCD934X_CODEC_RPM_CLK_MCLK_CFG, in wcd934x_codec_probe()
5933 memcpy(wcd->rx_chs, wcd934x_rx_chs, sizeof(wcd934x_rx_chs)); in wcd934x_codec_probe()
5934 memcpy(wcd->tx_chs, wcd934x_tx_chs, sizeof(wcd934x_tx_chs)); in wcd934x_codec_probe()
5936 irq = regmap_irq_get_virq(data->irq_data, WCD934X_IRQ_SLIMBUS); in wcd934x_codec_probe()
5938 return dev_err_probe(wcd->dev, irq, "Failed to get SLIM IRQ\n"); in wcd934x_codec_probe()
5957 .name = "wcd934x-codec",
5967 .name = "wcd934x-codec",
5971 MODULE_ALIAS("platform:wcd934x-codec");