Lines Matching full:wcd
22 #include "wcd-clsh-v2.h"
23 #include "wcd-mbhc-v2.h"
96 /* As fine version info cannot be retrieved before wcd probe.
97 * Define three coarse versions for possible future use before wcd probe.
1271 static int wcd934x_set_sido_input_src(struct wcd934x_codec *wcd, int sido_src) in wcd934x_set_sido_input_src() argument
1273 if (sido_src == wcd->sido_input_src) in wcd934x_set_sido_input_src()
1277 regmap_update_bits(wcd->regmap, WCD934X_ANA_RCO, in wcd934x_set_sido_input_src()
1282 wcd->sido_input_src = sido_src; in wcd934x_set_sido_input_src()
1287 static int wcd934x_enable_ana_bias_and_sysclk(struct wcd934x_codec *wcd) in wcd934x_enable_ana_bias_and_sysclk() argument
1289 mutex_lock(&wcd->sysclk_mutex); in wcd934x_enable_ana_bias_and_sysclk()
1291 if (++wcd->sysclk_users != 1) { in wcd934x_enable_ana_bias_and_sysclk()
1292 mutex_unlock(&wcd->sysclk_mutex); in wcd934x_enable_ana_bias_and_sysclk()
1295 mutex_unlock(&wcd->sysclk_mutex); in wcd934x_enable_ana_bias_and_sysclk()
1297 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_enable_ana_bias_and_sysclk()
1300 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_enable_ana_bias_and_sysclk()
1308 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_enable_ana_bias_and_sysclk()
1310 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_enable_ana_bias_and_sysclk()
1318 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_enable_ana_bias_and_sysclk()
1321 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_enable_ana_bias_and_sysclk()
1324 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_enable_ana_bias_and_sysclk()
1327 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_enable_ana_bias_and_sysclk()
1329 regmap_update_bits(wcd->regmap, in wcd934x_enable_ana_bias_and_sysclk()
1333 regmap_update_bits(wcd->regmap, in wcd934x_enable_ana_bias_and_sysclk()
1337 regmap_update_bits(wcd->regmap, WCD934X_CODEC_RPM_CLK_GATE, in wcd934x_enable_ana_bias_and_sysclk()
1345 wcd934x_set_sido_input_src(wcd, SIDO_SOURCE_RCO_BG); in wcd934x_enable_ana_bias_and_sysclk()
1350 static int wcd934x_disable_ana_bias_and_syclk(struct wcd934x_codec *wcd) in wcd934x_disable_ana_bias_and_syclk() argument
1352 mutex_lock(&wcd->sysclk_mutex); in wcd934x_disable_ana_bias_and_syclk()
1353 if (--wcd->sysclk_users != 0) { in wcd934x_disable_ana_bias_and_syclk()
1354 mutex_unlock(&wcd->sysclk_mutex); in wcd934x_disable_ana_bias_and_syclk()
1357 mutex_unlock(&wcd->sysclk_mutex); in wcd934x_disable_ana_bias_and_syclk()
1359 regmap_update_bits(wcd->regmap, WCD934X_CLK_SYS_MCLK_PRG, in wcd934x_disable_ana_bias_and_syclk()
1362 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_disable_ana_bias_and_syclk()
1364 regmap_update_bits(wcd->regmap, WCD934X_ANA_BIAS, in wcd934x_disable_ana_bias_and_syclk()
1370 static int __wcd934x_cdc_mclk_enable(struct wcd934x_codec *wcd, bool enable) in __wcd934x_cdc_mclk_enable() argument
1375 ret = clk_prepare_enable(wcd->extclk); in __wcd934x_cdc_mclk_enable()
1378 dev_err(wcd->dev, "%s: ext clk enable failed\n", in __wcd934x_cdc_mclk_enable()
1382 ret = wcd934x_enable_ana_bias_and_sysclk(wcd); in __wcd934x_cdc_mclk_enable()
1386 regmap_read(wcd->regmap, WCD934X_CDC_CLK_RST_CTRL_SWR_CONTROL, in __wcd934x_cdc_mclk_enable()
1393 wcd934x_disable_ana_bias_and_syclk(wcd); in __wcd934x_cdc_mclk_enable()
1394 clk_disable_unprepare(wcd->extclk); in __wcd934x_cdc_mclk_enable()
1404 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_enable_mclk() local
1408 return __wcd934x_cdc_mclk_enable(wcd, true); in wcd934x_codec_enable_mclk()
1410 return __wcd934x_cdc_mclk_enable(wcd, false); in wcd934x_codec_enable_mclk()
1416 static int wcd934x_get_version(struct wcd934x_codec *wcd) in wcd934x_get_version() argument
1423 regmap = wcd->regmap; in wcd934x_get_version()
1453 wcd->version = ver; in wcd934x_get_version()
1454 dev_info(wcd->dev, "WCD934X Minor:0x%x Version:0x%x\n", id_minor, ver); in wcd934x_get_version()
1459 static void wcd934x_enable_efuse_sensing(struct wcd934x_codec *wcd) in wcd934x_enable_efuse_sensing() argument
1463 __wcd934x_cdc_mclk_enable(wcd, true); in wcd934x_enable_efuse_sensing()
1465 regmap_update_bits(wcd->regmap, in wcd934x_enable_efuse_sensing()
1469 regmap_update_bits(wcd->regmap, in wcd934x_enable_efuse_sensing()
1478 wcd934x_set_sido_input_src(wcd, SIDO_SOURCE_RCO_BG); in wcd934x_enable_efuse_sensing()
1480 rc = regmap_read(wcd->regmap, in wcd934x_enable_efuse_sensing()
1486 __wcd934x_cdc_mclk_enable(wcd, false); in wcd934x_enable_efuse_sensing()
1489 static int wcd934x_swrm_clock(struct wcd934x_codec *wcd, bool enable) in wcd934x_swrm_clock() argument
1492 __wcd934x_cdc_mclk_enable(wcd, true); in wcd934x_swrm_clock()
1493 regmap_update_bits(wcd->regmap, in wcd934x_swrm_clock()
1498 regmap_update_bits(wcd->regmap, in wcd934x_swrm_clock()
1501 __wcd934x_cdc_mclk_enable(wcd, false); in wcd934x_swrm_clock()
1511 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_set_prim_interpolator_rate() local
1516 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd934x_set_prim_interpolator_rate()
1549 dev_err(wcd->dev, in wcd934x_set_prim_interpolator_rate()
1568 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_set_mix_interpolator_rate() local
1572 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd934x_set_mix_interpolator_rate()
1637 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(comp); in wcd934x_set_decimator_rate() local
1643 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) { in wcd934x_set_decimator_rate()
1673 dev_err(wcd->dev, "Invalid SLIM TX%u port DAI ID:%d\n", in wcd934x_set_decimator_rate()
1700 dev_err(wcd->dev, "ERROR: Invalid tx_port: %d\n", in wcd934x_set_decimator_rate()
1714 static int wcd934x_slim_set_hw_params(struct wcd934x_codec *wcd, in wcd934x_slim_set_hw_params() argument
1744 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1752 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1758 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1765 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1772 ret = regmap_write(wcd->if_regmap, in wcd934x_slim_set_hw_params()
1781 dai_data->sruntime = slim_stream_allocate(wcd->sdev, "WCD934x-SLIM"); in wcd934x_slim_set_hw_params()
1786 dev_err(wcd->dev, "Error Setting slim hw params\n"); in wcd934x_slim_set_hw_params()
1797 struct wcd934x_codec *wcd; in wcd934x_hw_params() local
1800 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_hw_params()
1806 dev_err(wcd->dev, "cannot set sample rate: %u\n", in wcd934x_hw_params()
1812 wcd->dai[dai->id].sconfig.bps = params_width(params); in wcd934x_hw_params()
1815 dev_err(wcd->dev, "Invalid format 0x%x\n", in wcd934x_hw_params()
1845 dev_err(wcd->dev, "Invalid TX sample rate: %d\n", in wcd934x_hw_params()
1854 dev_err(wcd->dev, "Cannot set TX Decimator rate\n"); in wcd934x_hw_params()
1859 wcd->dai[dai->id].sconfig.bps = params_width(params); in wcd934x_hw_params()
1862 dev_err(wcd->dev, "Invalid format 0x%x\n", in wcd934x_hw_params()
1868 dev_err(wcd->dev, "Invalid stream type %d\n", in wcd934x_hw_params()
1873 wcd->dai[dai->id].sconfig.rate = params_rate(params); in wcd934x_hw_params()
1875 return wcd934x_slim_set_hw_params(wcd, &wcd->dai[dai->id], substream->stream); in wcd934x_hw_params()
1882 struct wcd934x_codec *wcd; in wcd934x_hw_free() local
1884 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_hw_free()
1886 dai_data = &wcd->dai[dai->id]; in wcd934x_hw_free()
1897 struct wcd934x_codec *wcd; in wcd934x_trigger() local
1900 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_trigger()
1902 dai_data = &wcd->dai[dai->id]; in wcd934x_trigger()
1929 struct wcd934x_codec *wcd; in wcd934x_set_channel_map() local
1932 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_set_channel_map()
1935 dev_err(wcd->dev, "Invalid tx %d or rx %d channel count\n", in wcd934x_set_channel_map()
1941 dev_err(wcd->dev, "Invalid tx_slot=%p, rx_slot=%p\n", in wcd934x_set_channel_map()
1946 wcd->num_rx_port = rx_num; in wcd934x_set_channel_map()
1948 wcd->rx_chs[i].ch_num = rx_slot[i]; in wcd934x_set_channel_map()
1949 INIT_LIST_HEAD(&wcd->rx_chs[i].list); in wcd934x_set_channel_map()
1952 wcd->num_tx_port = tx_num; in wcd934x_set_channel_map()
1954 wcd->tx_chs[i].ch_num = tx_slot[i]; in wcd934x_set_channel_map()
1955 INIT_LIST_HEAD(&wcd->tx_chs[i].list); in wcd934x_set_channel_map()
1966 struct wcd934x_codec *wcd; in wcd934x_get_channel_map() local
1969 wcd = snd_soc_component_get_drvdata(dai->component); in wcd934x_get_channel_map()
1977 dev_err(wcd->dev, "Invalid rx_slot %p or rx_num %p\n", in wcd934x_get_channel_map()
1982 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd934x_get_channel_map()
1991 dev_err(wcd->dev, "Invalid tx_slot %p or tx_num %p\n", in wcd934x_get_channel_map()
1996 list_for_each_entry(ch, &wcd->dai[dai->id].slim_ch_list, list) in wcd934x_get_channel_map()
2002 dev_err(wcd->dev, "Invalid DAI ID %x\n", dai->id); in wcd934x_get_channel_map()
2130 struct wcd934x_codec *wcd = to_wcd934x_codec(hw); in swclk_gate_is_enabled() local
2133 regmap_read(wcd->regmap, WCD934X_CDC_CLK_RST_CTRL_SWR_CONTROL, &val); in swclk_gate_is_enabled()
2153 static struct clk *wcd934x_register_mclk_output(struct wcd934x_codec *wcd) in wcd934x_register_mclk_output() argument
2155 struct clk *parent = wcd->extclk; in wcd934x_register_mclk_output()
2156 struct device *dev = wcd->dev; in wcd934x_register_mclk_output()
2164 if (of_property_read_u32(np, "clock-frequency", &wcd->rate)) in wcd934x_register_mclk_output()
2176 wcd->hw.init = &init; in wcd934x_register_mclk_output()
2178 hw = &wcd->hw; in wcd934x_register_mclk_output()
2179 ret = devm_clk_hw_register(wcd->dev->parent, hw); in wcd934x_register_mclk_output()
2217 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_init_dmic() local
2222 &wcd->micb1_mv); in wcd934x_init_dmic()
2225 &wcd->micb2_mv); in wcd934x_init_dmic()
2228 &wcd->micb3_mv); in wcd934x_init_dmic()
2231 &wcd->micb4_mv); in wcd934x_init_dmic()
2242 if (wcd->rate == WCD934X_MCLK_CLK_9P6MHZ) in wcd934x_init_dmic()
2247 wcd->dmic_sample_rate = def_dmic_rate; in wcd934x_init_dmic()
2256 static void wcd934x_hw_init(struct wcd934x_codec *wcd) in wcd934x_hw_init() argument
2258 struct regmap *rm = wcd->regmap; in wcd934x_hw_init()
2270 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_comp_init() local
2272 wcd934x_hw_init(wcd); in wcd934x_comp_init()
2273 wcd934x_enable_efuse_sensing(wcd); in wcd934x_comp_init()
2274 wcd934x_get_version(wcd); in wcd934x_comp_init()
2281 struct wcd934x_codec *wcd = data; in wcd934x_slim_irq_handler() local
2291 regmap_read(wcd->if_regmap, i, &val); in wcd934x_slim_irq_handler()
2304 regmap_read(wcd->if_regmap, in wcd934x_slim_irq_handler()
2313 regmap_read(wcd->if_regmap, reg, &int_val); in wcd934x_slim_irq_handler()
2317 dev_err_ratelimited(wcd->dev, in wcd934x_slim_irq_handler()
2322 dev_err_ratelimited(wcd->dev, in wcd934x_slim_irq_handler()
2335 wcd->if_regmap, reg, &int_val); in wcd934x_slim_irq_handler()
2338 regmap_write(wcd->if_regmap, in wcd934x_slim_irq_handler()
2344 dev_err_ratelimited(wcd->dev, in wcd934x_slim_irq_handler()
2348 regmap_write(wcd->if_regmap, in wcd934x_slim_irq_handler()
2511 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_mbhc_request_micbias() local
2515 __wcd934x_cdc_mclk_enable(wcd, true); in wcd934x_mbhc_request_micbias()
2520 __wcd934x_cdc_mclk_enable(wcd, false); in wcd934x_mbhc_request_micbias()
2976 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(component); in wcd934x_get_hph_type() local
2978 ucontrol->value.integer.value[0] = wcd_mbhc_get_hph_type(wcd->mbhc); in wcd934x_get_hph_type()
2990 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(component); in wcd934x_hph_impedance_get() local
2994 wcd_mbhc_get_impedance(wcd->mbhc, &zl, &zr); in wcd934x_hph_impedance_get()
3015 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(component); in wcd934x_mbhc_init() local
3016 struct wcd_mbhc_intr *intr_ids = &wcd->intr_ids; in wcd934x_mbhc_init()
3033 wcd->mbhc = wcd_mbhc_init(component, &mbhc_cb, intr_ids, wcd_mbhc_fields, true); in wcd934x_mbhc_init()
3034 if (IS_ERR(wcd->mbhc)) { in wcd934x_mbhc_init()
3035 wcd->mbhc = NULL; in wcd934x_mbhc_init()
3049 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(component); in wcd934x_mbhc_deinit() local
3051 if (!wcd->mbhc) in wcd934x_mbhc_deinit()
3054 wcd_mbhc_deinit(wcd->mbhc); in wcd934x_mbhc_deinit()
3059 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_comp_probe() local
3062 snd_soc_component_init_regmap(component, wcd->regmap); in wcd934x_comp_probe()
3063 wcd->component = component; in wcd934x_comp_probe()
3066 wcd->clsh_ctrl = wcd_clsh_ctrl_alloc(component, wcd->version); in wcd934x_comp_probe()
3067 if (IS_ERR(wcd->clsh_ctrl)) in wcd934x_comp_probe()
3068 return PTR_ERR(wcd->clsh_ctrl); in wcd934x_comp_probe()
3071 wcd->hph_mode = CLS_H_LOHIFI; in wcd934x_comp_probe()
3076 INIT_LIST_HEAD(&wcd->dai[i].slim_ch_list); in wcd934x_comp_probe()
3088 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_comp_remove() local
3091 wcd_clsh_ctrl_free(wcd->clsh_ctrl); in wcd934x_comp_remove()
3098 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_comp_set_sysclk() local
3101 wcd->rate = freq; in wcd934x_comp_set_sysclk()
3103 if (wcd->rate == WCD934X_MCLK_CLK_12P288MHZ) in wcd934x_comp_set_sysclk()
3110 return clk_set_rate(wcd->extclk, freq); in wcd934x_comp_set_sysclk()
3230 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_compander_get() local
3232 ucontrol->value.integer.value[0] = wcd->comp_enabled[comp]; in wcd934x_compander_get()
3241 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_compander_set() local
3246 if (wcd->comp_enabled[comp] == value) in wcd934x_compander_set()
3249 wcd->comp_enabled[comp] = value; in wcd934x_compander_set()
3282 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_rx_hph_mode_get() local
3284 ucontrol->value.enumerated.item[0] = wcd->hph_mode; in wcd934x_rx_hph_mode_get()
3293 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_rx_hph_mode_put() local
3298 if (mode_val == wcd->hph_mode) in wcd934x_rx_hph_mode_put()
3302 dev_err(wcd->dev, "Invalid HPH Mode, default to ClSH HiFi\n"); in wcd934x_rx_hph_mode_put()
3305 wcd->hph_mode = mode_val; in wcd934x_rx_hph_mode_put()
3315 struct wcd934x_codec *wcd = dev_get_drvdata(dapm->dev); in slim_rx_mux_get() local
3317 ucontrol->value.enumerated.item[0] = wcd->rx_port_value[w->shift]; in slim_rx_mux_get()
3351 struct wcd934x_codec *wcd = dev_get_drvdata(w->dapm->dev); in slim_rx_mux_put() local
3358 int prev_mux_idx = wcd->rx_port_value[port_id]; in slim_rx_mux_put()
3372 list_for_each_entry_safe(ch, c, &wcd->dai[aif_id].slim_ch_list, list) { in slim_rx_mux_put()
3388 if (list_empty(&wcd->rx_chs[port_id].list)) { in slim_rx_mux_put()
3389 list_add_tail(&wcd->rx_chs[port_id].list, in slim_rx_mux_put()
3390 &wcd->dai[aif_id].slim_ch_list); in slim_rx_mux_put()
3392 dev_err(wcd->dev ,"SLIM_RX%d PORT is busy\n", port_id); in slim_rx_mux_put()
3398 dev_err(wcd->dev, "Unknown AIF %d\n", mux_idx); in slim_rx_mux_put()
3402 wcd->rx_port_value[port_id] = mux_idx; in slim_rx_mux_put()
3403 snd_soc_dapm_mux_update_power(w->dapm, kc, wcd->rx_port_value[port_id], in slim_rx_mux_put()
3831 struct wcd934x_codec *wcd = dev_get_drvdata(dapm->dev); in slim_tx_mixer_get() local
3836 ucontrol->value.integer.value[0] = wcd->tx_port_value[port_id]; in slim_tx_mixer_get()
3845 struct wcd934x_codec *wcd = dev_get_drvdata(widget->dapm->dev); in slim_tx_mixer_put() local
3855 if (enable == wcd->tx_port_value[port_id]) in slim_tx_mixer_put()
3859 if (list_empty(&wcd->tx_chs[port_id].list)) { in slim_tx_mixer_put()
3860 list_add_tail(&wcd->tx_chs[port_id].list, in slim_tx_mixer_put()
3861 &wcd->dai[dai_id].slim_ch_list); in slim_tx_mixer_put()
3863 dev_err(wcd->dev ,"SLIM_TX%d PORT is busy\n", port_id); in slim_tx_mixer_put()
3869 list_for_each_entry_safe(ch, c, &wcd->dai[dai_id].slim_ch_list, list) { in slim_tx_mixer_put()
3872 list_del_init(&wcd->tx_chs[port_id].list); in slim_tx_mixer_put()
3880 wcd->tx_port_value[port_id] = enable; in slim_tx_mixer_put()
4148 struct wcd934x_codec *wcd = dev_get_drvdata(component->dev); in wcd934x_codec_enable_int_port() local
4160 regmap_read(wcd->if_regmap, reg, &val); in wcd934x_codec_enable_int_port()
4162 regmap_write(wcd->if_regmap, reg, in wcd934x_codec_enable_int_port()
4171 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(comp); in wcd934x_codec_enable_slim() local
4172 struct wcd_slim_codec_dai_data *dai = &wcd->dai[w->shift]; in wcd934x_codec_enable_slim()
4260 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_config_compander() local
4269 if (!wcd->comp_enabled[compander]) in wcd934x_config_compander()
4444 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_ear_dac_event() local
4452 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_ear_dac_event()
4457 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_ear_dac_event()
4470 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_hphl_dac_event() local
4471 int hph_mode = wcd->hph_mode; in wcd934x_codec_hphl_dac_event()
4494 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_hphl_dac_event()
4501 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_hphl_dac_event()
4522 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_hphr_dac_event() local
4523 int hph_mode = wcd->hph_mode; in wcd934x_codec_hphr_dac_event()
4544 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_hphr_dac_event()
4552 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_hphr_dac_event()
4571 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_lineout_dac_event() local
4575 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_PRE_DAC, in wcd934x_codec_lineout_dac_event()
4579 wcd_clsh_ctrl_set_state(wcd->clsh_ctrl, WCD_CLSH_EVENT_POST_PA, in wcd934x_codec_lineout_dac_event()
4592 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(comp); in wcd934x_codec_enable_hphl_pa() local
4625 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_POST_HPHL_PA_OFF); in wcd934x_codec_enable_hphl_pa()
4644 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_POST_HPHL_PA_OFF); in wcd934x_codec_enable_hphl_pa()
4656 struct wcd934x_codec *wcd = snd_soc_component_get_drvdata(comp); in wcd934x_codec_enable_hphr_pa() local
4691 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_PRE_HPHR_PA_OFF); in wcd934x_codec_enable_hphr_pa()
4709 wcd_mbhc_event_notify(wcd->mbhc, WCD_EVENT_POST_HPHR_PA_OFF); in wcd934x_codec_enable_hphr_pa()
4718 struct wcd934x_codec *wcd) in wcd934x_get_dmic_sample_rate() argument
4752 dmic_fs = min(wcd->dmic_sample_rate, WCD9XXX_DMIC_SAMPLE_RATE_2P4MHZ); in wcd934x_get_dmic_sample_rate()
4756 dmic_fs = wcd->dmic_sample_rate; in wcd934x_get_dmic_sample_rate()
4816 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_enable_dmic() local
4842 dmic_clk_cnt = &wcd->dmic_0_1_clk_cnt; in wcd934x_codec_enable_dmic()
4847 dmic_clk_cnt = &wcd->dmic_2_3_clk_cnt; in wcd934x_codec_enable_dmic()
4852 dmic_clk_cnt = &wcd->dmic_4_5_clk_cnt; in wcd934x_codec_enable_dmic()
4864 wcd); in wcd934x_codec_enable_dmic()
4865 dmic_rate_val = wcd934x_get_dmic_clk_val(comp, wcd->rate, in wcd934x_codec_enable_dmic()
5829 struct wcd934x_codec *wcd = dev_get_drvdata(comp->dev); in wcd934x_codec_set_jack() local
5832 if (!wcd->mbhc) in wcd934x_codec_set_jack()
5835 if (jack && !wcd->mbhc_started) { in wcd934x_codec_set_jack()
5836 ret = wcd_mbhc_start(wcd->mbhc, &wcd->mbhc_cfg, jack); in wcd934x_codec_set_jack()
5837 wcd->mbhc_started = true; in wcd934x_codec_set_jack()
5838 } else if (wcd->mbhc_started) { in wcd934x_codec_set_jack()
5839 wcd_mbhc_stop(wcd->mbhc); in wcd934x_codec_set_jack()
5840 wcd->mbhc_started = false; in wcd934x_codec_set_jack()
5860 static int wcd934x_codec_parse_data(struct wcd934x_codec *wcd) in wcd934x_codec_parse_data() argument
5862 struct device *dev = &wcd->sdev->dev; in wcd934x_codec_parse_data()
5863 struct wcd_mbhc_config *cfg = &wcd->mbhc_cfg; in wcd934x_codec_parse_data()
5872 wcd->sidev = of_slim_get_device(wcd->sdev->ctrl, ifc_dev_np); in wcd934x_codec_parse_data()
5874 if (!wcd->sidev) { in wcd934x_codec_parse_data()
5879 slim_get_logical_addr(wcd->sidev); in wcd934x_codec_parse_data()
5880 wcd->if_regmap = regmap_init_slimbus(wcd->sidev, in wcd934x_codec_parse_data()
5882 if (IS_ERR(wcd->if_regmap)) in wcd934x_codec_parse_data()
5883 return dev_err_probe(dev, PTR_ERR(wcd->if_regmap), in wcd934x_codec_parse_data()
5887 &wcd->dmic_sample_rate); in wcd934x_codec_parse_data()
5893 cfg->micb_mv = wcd->micb2_mv; in wcd934x_codec_parse_data()
5908 struct wcd934x_codec *wcd; in wcd934x_codec_probe() local
5911 wcd = devm_kzalloc(dev, sizeof(*wcd), GFP_KERNEL); in wcd934x_codec_probe()
5912 if (!wcd) in wcd934x_codec_probe()
5915 wcd->dev = dev; in wcd934x_codec_probe()
5916 wcd->regmap = data->regmap; in wcd934x_codec_probe()
5917 wcd->extclk = data->extclk; in wcd934x_codec_probe()
5918 wcd->sdev = to_slim_device(data->dev); in wcd934x_codec_probe()
5919 mutex_init(&wcd->sysclk_mutex); in wcd934x_codec_probe()
5920 mutex_init(&wcd->micb_lock); in wcd934x_codec_probe()
5922 ret = wcd934x_codec_parse_data(wcd); in wcd934x_codec_probe()
5924 dev_err(wcd->dev, "Failed to get SLIM IRQ\n"); in wcd934x_codec_probe()
5929 regmap_update_bits(wcd->regmap, WCD934X_CODEC_RPM_CLK_MCLK_CFG, in wcd934x_codec_probe()
5932 memcpy(wcd->rx_chs, wcd934x_rx_chs, sizeof(wcd934x_rx_chs)); in wcd934x_codec_probe()
5933 memcpy(wcd->tx_chs, wcd934x_tx_chs, sizeof(wcd934x_tx_chs)); in wcd934x_codec_probe()
5937 return dev_err_probe(wcd->dev, irq, "Failed to get SLIM IRQ\n"); in wcd934x_codec_probe()
5942 "slim", wcd); in wcd934x_codec_probe()
5946 wcd934x_register_mclk_output(wcd); in wcd934x_codec_probe()
5947 platform_set_drvdata(pdev, wcd); in wcd934x_codec_probe()