Lines Matching full:wcd
23 #include "wcd-clsh-v2.h"
24 #include "wcd-mbhc-v2.h"
97 /* As fine version info cannot be retrieved before wcd probe.
98 * Define three coarse versions for possible future use before wcd probe.
1272 static int wcd934x_set_sido_input_src(struct wcd934x_codec *wcd, int sido_src) in wcd934x_set_sido_input_src() argument
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()
1288 static int wcd934x_enable_ana_bias_and_sysclk(struct wcd934x_codec *wcd) in wcd934x_enable_ana_bias_and_sysclk() argument
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()
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()
1346 wcd934x_set_sido_input_src(wcd, SIDO_SOURCE_RCO_BG); in wcd934x_enable_ana_bias_and_sysclk()
1351 static int wcd934x_disable_ana_bias_and_syclk(struct wcd934x_codec *wcd) in wcd934x_disable_ana_bias_and_syclk() argument
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()
1371 static int __wcd934x_cdc_mclk_enable(struct wcd934x_codec *wcd, bool enable) in __wcd934x_cdc_mclk_enable() argument
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()
1383 ret = wcd934x_enable_ana_bias_and_sysclk(wcd); in __wcd934x_cdc_mclk_enable()
1387 regmap_read(wcd->regmap, WCD934X_CDC_CLK_RST_CTRL_SWR_CONTROL, in __wcd934x_cdc_mclk_enable()
1394 wcd934x_disable_ana_bias_and_syclk(wcd); in __wcd934x_cdc_mclk_enable()
1395 clk_disable_unprepare(wcd->extclk); in __wcd934x_cdc_mclk_enable()
1405 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_enable_mclk() local
1409 return __wcd934x_cdc_mclk_enable(wcd, true); in wcd934x_codec_enable_mclk()
1411 return __wcd934x_cdc_mclk_enable(wcd, false); in wcd934x_codec_enable_mclk()
1417 static int wcd934x_get_version(struct wcd934x_codec *wcd) in wcd934x_get_version() argument
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()
1460 static void wcd934x_enable_efuse_sensing(struct wcd934x_codec *wcd) in wcd934x_enable_efuse_sensing() argument
1464 __wcd934x_cdc_mclk_enable(wcd, true); in wcd934x_enable_efuse_sensing()
1466 regmap_update_bits(wcd->regmap, in wcd934x_enable_efuse_sensing()
1470 regmap_update_bits(wcd->regmap, in wcd934x_enable_efuse_sensing()
1479 wcd934x_set_sido_input_src(wcd, SIDO_SOURCE_RCO_BG); in wcd934x_enable_efuse_sensing()
1481 rc = regmap_read(wcd->regmap, in wcd934x_enable_efuse_sensing()
1487 __wcd934x_cdc_mclk_enable(wcd, false); in wcd934x_enable_efuse_sensing()
1490 static int wcd934x_swrm_clock(struct wcd934x_codec *wcd, bool enable) in wcd934x_swrm_clock() argument
1493 __wcd934x_cdc_mclk_enable(wcd, true); in wcd934x_swrm_clock()
1494 regmap_update_bits(wcd->regmap, in wcd934x_swrm_clock()
1499 regmap_update_bits(wcd->regmap, in wcd934x_swrm_clock()
1502 __wcd934x_cdc_mclk_enable(wcd, false); in wcd934x_swrm_clock()
1512 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_set_prim_interpolator_rate() local
1517 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd934x_set_prim_interpolator_rate()
1550 dev_err(wcd->dev, in wcd934x_set_prim_interpolator_rate()
1569 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_set_mix_interpolator_rate() local
1573 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd934x_set_mix_interpolator_rate()
1638 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(comp); in wcd934x_set_decimator_rate() local
1644 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd934x_set_decimator_rate()
1674 dev_err(wcd->dev, "Invalid SLIM TX%u port DAI ID:%d\n", in wcd934x_set_decimator_rate()
1701 dev_err(wcd->dev, "ERROR: Invalid tx_port: %d\n", in wcd934x_set_decimator_rate()
1715 static int wcd934x_slim_set_hw_params(struct wcd934x_codec *wcd, in wcd934x_slim_set_hw_params() argument
1745 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1753 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1759 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1766 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1773 ret = regmap_write(wcd->if_regmap, 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()
1798 struct wcd934x_codec *wcd; in wcd934x_hw_params() local
1801 wcd = snd_soc_component_get_drvdata(dai->component); 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()
1846 dev_err(wcd->dev, "Invalid TX sample rate: %d\n", 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()
1869 dev_err(wcd->dev, "Invalid stream type %d\n", 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()
1883 struct wcd934x_codec *wcd; in wcd934x_hw_free() local
1885 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_hw_free()
1887 dai_data = &wcd->dai[dai->id]; in wcd934x_hw_free()
1898 struct wcd934x_codec *wcd; in wcd934x_trigger() local
1901 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_trigger()
1903 dai_data = &wcd->dai[dai->id]; in wcd934x_trigger()
1930 struct wcd934x_codec *wcd; in wcd934x_set_channel_map() local
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()
1942 dev_err(wcd->dev, "Invalid tx_slot=%p, rx_slot=%p\n", 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()
1967 struct wcd934x_codec *wcd; in wcd934x_get_channel_map() local
1970 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_get_channel_map()
1978 dev_err(wcd->dev, "Invalid rx_slot %p or rx_num %p\n", in wcd934x_get_channel_map()
1983 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd934x_get_channel_map()
1992 dev_err(wcd->dev, "Invalid tx_slot %p or tx_num %p\n", in wcd934x_get_channel_map()
1997 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd934x_get_channel_map()
2003 dev_err(wcd->dev, "Invalid DAI ID %x\n", dai->id); in wcd934x_get_channel_map()
2131 struct wcd934x_codec *wcd = to_wcd934x_codec(hw); in swclk_gate_is_enabled() local
2134 regmap_read(wcd->regmap, WCD934X_CDC_CLK_RST_CTRL_SWR_CONTROL, &val); in swclk_gate_is_enabled()
2154 static struct clk *wcd934x_register_mclk_output(struct wcd934x_codec *wcd) in wcd934x_register_mclk_output() argument
2156 struct clk *parent = wcd->extclk; in wcd934x_register_mclk_output()
2157 struct device *dev = wcd->dev; in wcd934x_register_mclk_output()
2165 if (of_property_read_u32(np, "clock-frequency", &wcd->rate)) 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()
2218 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_init_dmic() local
2223 &wcd->micb1_mv); in wcd934x_init_dmic()
2226 &wcd->micb2_mv); in wcd934x_init_dmic()
2229 &wcd->micb3_mv); 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()
2257 static void wcd934x_hw_init(struct wcd934x_codec *wcd) in wcd934x_hw_init() argument
2259 struct regmap *rm = wcd->regmap; in wcd934x_hw_init()
2271 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_comp_init() local
2273 wcd934x_hw_init(wcd); in wcd934x_comp_init()
2274 wcd934x_enable_efuse_sensing(wcd); in wcd934x_comp_init()
2275 wcd934x_get_version(wcd); in wcd934x_comp_init()
2282 struct wcd934x_codec *wcd = data; in wcd934x_slim_irq_handler() local
2292 regmap_read(wcd->if_regmap, i, &val); 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()
2512 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_mbhc_request_micbias() local
2516 __wcd934x_cdc_mclk_enable(wcd, true); in wcd934x_mbhc_request_micbias()
2521 __wcd934x_cdc_mclk_enable(wcd, false); in wcd934x_mbhc_request_micbias()
2977 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(component); in wcd934x_get_hph_type() local
2979 ucontrol->value.integer.value[0] = wcd_mbhc_get_hph_type(wcd->mbhc); in wcd934x_get_hph_type()
2991 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(component); in wcd934x_hph_impedance_get() local
2995 wcd_mbhc_get_impedance(wcd->mbhc, &zl, &zr); in wcd934x_hph_impedance_get()
3016 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(component); in wcd934x_mbhc_init() local
3017 struct wcd_mbhc_intr *intr_ids = &wcd->intr_ids; 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()
3049 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_comp_probe() local
3052 snd_soc_component_init_regmap(component, wcd->regmap); in wcd934x_comp_probe()
3053 wcd->component = component; in wcd934x_comp_probe()
3056 wcd->clsh_ctrl = wcd_clsh_ctrl_alloc(component, wcd->version); in wcd934x_comp_probe()
3057 if (IS_ERR(wcd->clsh_ctrl)) in wcd934x_comp_probe()
3058 return PTR_ERR(wcd->clsh_ctrl); in wcd934x_comp_probe()
3061 wcd->hph_mode = CLS_H_LOHIFI; in wcd934x_comp_probe()
3066 INIT_LIST_HEAD(&wcd->dai[i].slim_ch_list); in wcd934x_comp_probe()
3078 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_comp_remove() local
3080 wcd_clsh_ctrl_free(wcd->clsh_ctrl); in wcd934x_comp_remove()
3087 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_comp_set_sysclk() local
3090 wcd->rate = freq; in wcd934x_comp_set_sysclk()
3092 if (wcd->rate == WCD934X_MCLK_CLK_12P288MHZ) in wcd934x_comp_set_sysclk()
3099 return clk_set_rate(wcd->extclk, freq); in wcd934x_comp_set_sysclk()
3219 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_compander_get() local
3221 ucontrol->value.integer.value[0] = wcd->comp_enabled[comp]; in wcd934x_compander_get()
3230 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_compander_set() local
3235 if (wcd->comp_enabled[comp] == value) in wcd934x_compander_set()
3238 wcd->comp_enabled[comp] = value; in wcd934x_compander_set()
3271 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_rx_hph_mode_get() local
3273 ucontrol->value.enumerated.item[0] = wcd->hph_mode; in wcd934x_rx_hph_mode_get()
3282 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_rx_hph_mode_put() local
3287 if (mode_val == wcd->hph_mode) in wcd934x_rx_hph_mode_put()
3291 dev_err(wcd->dev, "Invalid HPH Mode, default to ClSH HiFi\n"); in wcd934x_rx_hph_mode_put()
3294 wcd->hph_mode = mode_val; in wcd934x_rx_hph_mode_put()
3304 struct wcd934x_codec *wcd = dev_get_drvdata(dapm->dev); in slim_rx_mux_get() local
3306 ucontrol->value.enumerated.item[0] = wcd->rx_port_value[w->shift]; in slim_rx_mux_get()
3340 struct wcd934x_codec *wcd = dev_get_drvdata(w->dapm->dev); in slim_rx_mux_put() local
3347 int prev_mux_idx = wcd->rx_port_value[port_id]; in slim_rx_mux_put()
3361 list_for_each_entry_safe(ch, c, &wcd->dai[aif_id].slim_ch_list, list) { in slim_rx_mux_put()
3377 if (list_empty(&wcd->rx_chs[port_id].list)) { in slim_rx_mux_put()
3378 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
3379 &wcd->dai[aif_id].slim_ch_list); in slim_rx_mux_put()
3381 dev_err(wcd->dev ,"SLIM_RX%d PORT is busy\n", port_id); in slim_rx_mux_put()
3387 dev_err(wcd->dev, "Unknown AIF %d\n", mux_idx); in slim_rx_mux_put()
3391 wcd->rx_port_value[port_id] = mux_idx; in slim_rx_mux_put()
3392 snd_soc_dapm_mux_update_power(w->dapm, kc, wcd->rx_port_value[port_id], in slim_rx_mux_put()
3820 struct wcd934x_codec *wcd = dev_get_drvdata(dapm->dev); in slim_tx_mixer_get() local
3825 ucontrol->value.integer.value[0] = wcd->tx_port_value[port_id]; in slim_tx_mixer_get()
3834 struct wcd934x_codec *wcd = dev_get_drvdata(widget->dapm->dev); in slim_tx_mixer_put() local
3844 if (enable == wcd->tx_port_value[port_id]) in slim_tx_mixer_put()
3848 if (list_empty(&wcd->tx_chs[port_id].list)) { in slim_tx_mixer_put()
3849 list_add_tail(&wcd->tx_chs[port_id].list, in slim_tx_mixer_put()
3850 &wcd->dai[dai_id].slim_ch_list); in slim_tx_mixer_put()
3852 dev_err(wcd->dev ,"SLIM_TX%d PORT is busy\n", port_id); in slim_tx_mixer_put()
3858 list_for_each_entry_safe(ch, c, &wcd->dai[dai_id].slim_ch_list, list) { in slim_tx_mixer_put()
3861 list_del_init(&wcd->tx_chs[port_id].list); in slim_tx_mixer_put()
3869 wcd->tx_port_value[port_id] = enable; in slim_tx_mixer_put()
4137 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_codec_enable_int_port() local
4149 regmap_read(wcd->if_regmap, reg, &val); in wcd934x_codec_enable_int_port()
4151 regmap_write(wcd->if_regmap, reg, in wcd934x_codec_enable_int_port()
4160 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(comp); in wcd934x_codec_enable_slim() local
4161 struct wcd_slim_codec_dai_data *dai = &wcd->dai[w->shift]; in wcd934x_codec_enable_slim()
4249 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_config_compander() local
4258 if (!wcd->comp_enabled[compander]) in wcd934x_config_compander()
4433 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_ear_dac_event() local
4441 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_ear_dac_event()
4446 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_ear_dac_event()
4459 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_hphl_dac_event() local
4460 int hph_mode = wcd->hph_mode; in wcd934x_codec_hphl_dac_event()
4483 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_hphl_dac_event()
4490 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_hphl_dac_event()
4511 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_hphr_dac_event() local
4512 int hph_mode = wcd->hph_mode; in wcd934x_codec_hphr_dac_event()
4533 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_hphr_dac_event()
4541 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_hphr_dac_event()
4560 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_lineout_dac_event() local
4564 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_lineout_dac_event()
4568 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_lineout_dac_event()
4581 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(comp); in wcd934x_codec_enable_hphl_pa() local
4614 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_POST_HPHL_PA_OFF); in wcd934x_codec_enable_hphl_pa()
4633 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_POST_HPHL_PA_OFF); in wcd934x_codec_enable_hphl_pa()
4645 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(comp); in wcd934x_codec_enable_hphr_pa() local
4680 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_PRE_HPHR_PA_OFF); in wcd934x_codec_enable_hphr_pa()
4698 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_POST_HPHR_PA_OFF); in wcd934x_codec_enable_hphr_pa()
4707 struct wcd934x_codec *wcd) in wcd934x_get_dmic_sample_rate() argument
4741 if (wcd->dmic_sample_rate <= in wcd934x_get_dmic_sample_rate()
4743 dmic_fs = wcd->dmic_sample_rate; in wcd934x_get_dmic_sample_rate()
4749 dmic_fs = wcd->dmic_sample_rate; in wcd934x_get_dmic_sample_rate()
4809 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_enable_dmic() local
4835 dmic_clk_cnt = &wcd->dmic_0_1_clk_cnt; in wcd934x_codec_enable_dmic()
4840 dmic_clk_cnt = &wcd->dmic_2_3_clk_cnt; in wcd934x_codec_enable_dmic()
4845 dmic_clk_cnt = &wcd->dmic_4_5_clk_cnt; in wcd934x_codec_enable_dmic()
4857 wcd); in wcd934x_codec_enable_dmic()
4858 dmic_rate_val = wcd934x_get_dmic_clk_val(comp, wcd->rate, in wcd934x_codec_enable_dmic()
5822 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_set_jack() local
5825 if (!wcd->mbhc) in wcd934x_codec_set_jack()
5828 if (jack && !wcd->mbhc_started) { in wcd934x_codec_set_jack()
5829 ret = wcd_mbhc_start(wcd->mbhc, &wcd->mbhc_cfg, jack); in wcd934x_codec_set_jack()
5830 wcd->mbhc_started = true; in wcd934x_codec_set_jack()
5831 } else if (wcd->mbhc_started) { in wcd934x_codec_set_jack()
5832 wcd_mbhc_stop(wcd->mbhc); in wcd934x_codec_set_jack()
5833 wcd->mbhc_started = false; in wcd934x_codec_set_jack()
5853 static int wcd934x_codec_parse_data(struct wcd934x_codec *wcd) in wcd934x_codec_parse_data() argument
5855 struct device *dev = &wcd->sdev->dev; in wcd934x_codec_parse_data()
5856 struct wcd_mbhc_config *cfg = &wcd->mbhc_cfg; in wcd934x_codec_parse_data()
5865 wcd->sidev = of_slim_get_device(wcd->sdev->ctrl, ifc_dev_np); in wcd934x_codec_parse_data()
5867 if (!wcd->sidev) { in wcd934x_codec_parse_data()
5872 slim_get_logical_addr(wcd->sidev); in wcd934x_codec_parse_data()
5873 wcd->if_regmap = regmap_init_slimbus(wcd->sidev, in wcd934x_codec_parse_data()
5875 if (IS_ERR(wcd->if_regmap)) { in wcd934x_codec_parse_data()
5877 return PTR_ERR(wcd->if_regmap); in wcd934x_codec_parse_data()
5881 &wcd->dmic_sample_rate); in wcd934x_codec_parse_data()
5887 cfg->micb_mv = wcd->micb2_mv; in wcd934x_codec_parse_data()
5901 struct wcd934x_codec *wcd; in wcd934x_codec_probe() local
5905 wcd = devm_kzalloc(&pdev->dev, sizeof(*wcd), GFP_KERNEL); in wcd934x_codec_probe()
5906 if (!wcd) in wcd934x_codec_probe()
5909 wcd->dev = dev; in wcd934x_codec_probe()
5910 wcd->regmap = data->regmap; in wcd934x_codec_probe()
5911 wcd->extclk = data->extclk; in wcd934x_codec_probe()
5912 wcd->sdev = to_slim_device(data->dev); in wcd934x_codec_probe()
5913 mutex_init(&wcd->sysclk_mutex); in wcd934x_codec_probe()
5914 mutex_init(&wcd->micb_lock); in wcd934x_codec_probe()
5916 ret = wcd934x_codec_parse_data(wcd); in wcd934x_codec_probe()
5918 dev_err(wcd->dev, "Failed to get SLIM IRQ\n"); in wcd934x_codec_probe()
5923 regmap_update_bits(wcd->regmap, WCD934X_CODEC_RPM_CLK_MCLK_CFG, in wcd934x_codec_probe()
5926 memcpy(wcd->rx_chs, wcd934x_rx_chs, sizeof(wcd934x_rx_chs)); in wcd934x_codec_probe()
5927 memcpy(wcd->tx_chs, wcd934x_tx_chs, sizeof(wcd934x_tx_chs)); in wcd934x_codec_probe()
5931 dev_err(wcd->dev, "Failed to get SLIM IRQ\n"); in wcd934x_codec_probe()
5938 "slim", wcd); in wcd934x_codec_probe()
5944 wcd934x_register_mclk_output(wcd); in wcd934x_codec_probe()
5945 platform_set_drvdata(pdev, wcd); in wcd934x_codec_probe()