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

1 // SPDX-License-Identifier: GPL-2.0
8 * Chun-Chia Chiu <chun-[email protected]>
14 #include "mt8188-afe-clk.h"
15 #include "mt8188-afe-common.h"
16 #include "mt8188-reg.h"
17 #include "../common/mtk-dai-adda-common.h"
34 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mt8188_adda_mtkaif_init()
35 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8188_adda_mtkaif_init()
42 regmap_set_bits(afe->regmap, AFE_ADDA_MTKAIF_CFG0, in mt8188_adda_mtkaif_init()
45 regmap_set_bits(afe->regmap, AFE_AUD_PAD_TOP, RG_RX_PROTOCOL2); in mt8188_adda_mtkaif_init()
47 if (!param->mtkaif_calibration_ok) { in mt8188_adda_mtkaif_init()
48 dev_info(afe->dev, "%s(), calibration fail\n", __func__); in mt8188_adda_mtkaif_init()
53 if (param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] >= in mt8188_adda_mtkaif_init()
54 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1]) { in mt8188_adda_mtkaif_init()
57 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] - in mt8188_adda_mtkaif_init()
58 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1]; in mt8188_adda_mtkaif_init()
62 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1] - in mt8188_adda_mtkaif_init()
63 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0]; in mt8188_adda_mtkaif_init()
69 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_RX_CFG2, mask, val); in mt8188_adda_mtkaif_init()
78 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_mtkaif_cfg_event()
81 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda_mtkaif_cfg_event()
82 __func__, w->name, event); in mtk_adda_mtkaif_cfg_event()
99 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_dl_event()
102 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda_dl_event()
103 __func__, w->name, event); in mtk_adda_dl_event()
117 static void mtk_adda_ul_mictype(struct mtk_base_afe *afe, bool dmic) in mtk_adda_ul_mictype() argument
125 /* turn on dmic, ch1, ch2 */ in mtk_adda_ul_mictype()
126 if (dmic) in mtk_adda_ul_mictype()
127 regmap_set_bits(afe->regmap, reg, val); in mtk_adda_ul_mictype()
129 regmap_clear_bits(afe->regmap, reg, val); in mtk_adda_ul_mictype()
136 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_ul_event()
138 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mtk_adda_ul_event()
139 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mtk_adda_ul_event()
141 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda_ul_event()
142 __func__, w->name, event); in mtk_adda_ul_event()
146 mtk_adda_ul_mictype(afe, param->mtkaif_dmic_on); in mtk_adda_ul_event()
162 struct mt8188_afe_private *afe_priv = afe->platform_priv; in get_adda_priv_by_name()
165 return afe_priv->dai_priv[MT8188_AFE_IO_UL_SRC]; in get_adda_priv_by_name()
167 return afe_priv->dai_priv[MT8188_AFE_IO_DL_SRC]; in get_adda_priv_by_name()
176 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_afe_adda_hires_connect()
180 adda_priv = get_adda_priv_by_name(afe, w->name); in mtk_afe_adda_hires_connect()
183 dev_dbg(afe->dev, "adda_priv == NULL"); in mtk_afe_adda_hires_connect()
187 return (adda_priv->hires_required) ? 1 : 0; in mtk_afe_adda_hires_connect()
315 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mt8188_adda_dmic_get()
316 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8188_adda_dmic_get()
318 ucontrol->value.integer.value[0] = param->mtkaif_dmic_on; in mt8188_adda_dmic_get()
327 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mt8188_adda_dmic_set()
328 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8188_adda_dmic_set()
331 dmic_on = !!ucontrol->value.integer.value[0]; in mt8188_adda_dmic_set()
333 dev_dbg(afe->dev, "%s(), kcontrol name %s, dmic_on %d\n", in mt8188_adda_dmic_set()
334 __func__, kcontrol->id.name, dmic_on); in mt8188_adda_dmic_set()
336 if (param->mtkaif_dmic_on == dmic_on) in mt8188_adda_dmic_set()
339 param->mtkaif_dmic_on = dmic_on; in mt8188_adda_dmic_set()
351 unsigned int rate, int id) in mtk_dai_da_configure() argument
356 /* set sampling rate */ in mtk_dai_da_configure()
359 mtk_adda_dl_rate_transform(afe, rate)); in mtk_dai_da_configure()
371 /* set voice input data if input sample rate is 8k or 16k */ in mtk_dai_da_configure()
373 if (rate == 8000 || rate == 16000) in mtk_dai_da_configure()
376 regmap_update_bits(afe->regmap, AFE_ADDA_DL_SRC2_CON0, mask, val); in mtk_dai_da_configure()
379 regmap_set_bits(afe->regmap, AFE_ADDA_DL_SDM_DCCOMP_CON, in mtk_dai_da_configure()
386 unsigned int rate, int id) in mtk_dai_ad_configure() argument
393 mtk_adda_ul_rate_transform(afe, rate)); in mtk_dai_ad_configure()
395 regmap_update_bits(afe->regmap, AFE_ADDA_UL_SRC_CON0, in mtk_dai_ad_configure()
405 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mtk_dai_adda_hw_params()
406 struct mtk_dai_adda_priv *adda_priv = afe_priv->dai_priv[dai->id]; in mtk_dai_adda_hw_params()
407 unsigned int rate = params_rate(params); in mtk_dai_adda_hw_params() local
408 int id = dai->id; in mtk_dai_adda_hw_params()
411 dev_dbg(afe->dev, "%s(), id %d, stream %d, rate %u\n", in mtk_dai_adda_hw_params()
412 __func__, id, substream->stream, rate); in mtk_dai_adda_hw_params()
414 adda_priv->hires_required = (rate > ADDA_HIRES_THRES); in mtk_dai_adda_hw_params()
416 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in mtk_dai_adda_hw_params()
417 ret = mtk_dai_da_configure(afe, rate, id); in mtk_dai_adda_hw_params()
419 ret = mtk_dai_ad_configure(afe, rate, id); in mtk_dai_adda_hw_params()
473 struct mt8188_afe_private *afe_priv = afe->platform_priv; in init_adda_priv_data()
479 adda_priv = devm_kzalloc(afe->dev, in init_adda_priv_data()
483 return -ENOMEM; in init_adda_priv_data()
485 afe_priv->dai_priv[adda_dai_list[i]] = adda_priv; in init_adda_priv_data()
495 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); in mt8188_dai_adda_register()
497 return -ENOMEM; in mt8188_dai_adda_register()
499 list_add(&dai->list, &afe->sub_dais); in mt8188_dai_adda_register()
501 dai->dai_drivers = mtk_dai_adda_driver; in mt8188_dai_adda_register()
502 dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_adda_driver); in mt8188_dai_adda_register()
504 dai->dapm_widgets = mtk_dai_adda_widgets; in mt8188_dai_adda_register()
505 dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_adda_widgets); in mt8188_dai_adda_register()
506 dai->dapm_routes = mtk_dai_adda_routes; in mt8188_dai_adda_register()
507 dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_adda_routes); in mt8188_dai_adda_register()
508 dai->controls = mtk_dai_adda_controls; in mt8188_dai_adda_register()
509 dai->num_controls = ARRAY_SIZE(mtk_dai_adda_controls); in mt8188_dai_adda_register()