Lines Matching +full:dmic +full:- +full:sample +full:- +full:rate
1 // SPDX-License-Identifier: GPL-2.0
8 * Chun-Chia Chiu <chun-chia.chiu@mediatek.com>
14 #include "mt8188-afe-clk.h"
15 #include "mt8188-afe-common.h"
16 #include "mt8188-reg.h"
60 unsigned int rate) in afe_adda_dl_rate_transform() argument
62 switch (rate) { in afe_adda_dl_rate_transform()
86 dev_info(afe->dev, "%s(), rate %u invalid, use 48kHz!!!\n", in afe_adda_dl_rate_transform()
87 __func__, rate); in afe_adda_dl_rate_transform()
93 unsigned int rate) in afe_adda_ul_rate_transform() argument
95 switch (rate) { in afe_adda_ul_rate_transform()
109 dev_info(afe->dev, "%s(), rate %u invalid, use 48kHz!!!\n", in afe_adda_ul_rate_transform()
110 __func__, rate); in afe_adda_ul_rate_transform()
117 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mt8188_adda_mtkaif_init()
118 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8188_adda_mtkaif_init()
125 regmap_set_bits(afe->regmap, AFE_ADDA_MTKAIF_CFG0, in mt8188_adda_mtkaif_init()
128 regmap_set_bits(afe->regmap, AFE_AUD_PAD_TOP, RG_RX_PROTOCOL2); in mt8188_adda_mtkaif_init()
130 if (!param->mtkaif_calibration_ok) { in mt8188_adda_mtkaif_init()
131 dev_info(afe->dev, "%s(), calibration fail\n", __func__); in mt8188_adda_mtkaif_init()
136 if (param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] >= in mt8188_adda_mtkaif_init()
137 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1]) { in mt8188_adda_mtkaif_init()
140 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0] - in mt8188_adda_mtkaif_init()
141 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1]; in mt8188_adda_mtkaif_init()
145 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_1] - in mt8188_adda_mtkaif_init()
146 param->mtkaif_phase_cycle[MT8188_MTKAIF_MISO_0]; in mt8188_adda_mtkaif_init()
153 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_RX_CFG2, mask, val); in mt8188_adda_mtkaif_init()
162 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_mtkaif_cfg_event()
165 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda_mtkaif_cfg_event()
166 __func__, w->name, event); in mtk_adda_mtkaif_cfg_event()
183 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_dl_event()
186 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda_dl_event()
187 __func__, w->name, event); in mtk_adda_dl_event()
201 static void mtk_adda_ul_mictype(struct mtk_base_afe *afe, bool dmic) in mtk_adda_ul_mictype() argument
209 /* turn on dmic, ch1, ch2 */ in mtk_adda_ul_mictype()
210 if (dmic) in mtk_adda_ul_mictype()
211 regmap_set_bits(afe->regmap, reg, val); in mtk_adda_ul_mictype()
213 regmap_clear_bits(afe->regmap, reg, val); in mtk_adda_ul_mictype()
220 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_ul_event()
222 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mtk_adda_ul_event()
223 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mtk_adda_ul_event()
225 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda_ul_event()
226 __func__, w->name, event); in mtk_adda_ul_event()
230 mtk_adda_ul_mictype(afe, param->mtkaif_dmic_on); in mtk_adda_ul_event()
246 struct mt8188_afe_private *afe_priv = afe->platform_priv; in get_adda_priv_by_name()
249 return afe_priv->dai_priv[MT8188_AFE_IO_UL_SRC]; in get_adda_priv_by_name()
251 return afe_priv->dai_priv[MT8188_AFE_IO_DL_SRC]; in get_adda_priv_by_name()
260 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_afe_adda_hires_connect()
264 adda_priv = get_adda_priv_by_name(afe, w->name); in mtk_afe_adda_hires_connect()
267 dev_dbg(afe->dev, "adda_priv == NULL"); in mtk_afe_adda_hires_connect()
271 return (adda_priv->hires_required) ? 1 : 0; in mtk_afe_adda_hires_connect()
399 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mt8188_adda_dmic_get()
400 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8188_adda_dmic_get()
402 ucontrol->value.integer.value[0] = param->mtkaif_dmic_on; in mt8188_adda_dmic_get()
411 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mt8188_adda_dmic_set()
412 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8188_adda_dmic_set()
415 dmic_on = !!ucontrol->value.integer.value[0]; in mt8188_adda_dmic_set()
417 dev_dbg(afe->dev, "%s(), kcontrol name %s, dmic_on %d\n", in mt8188_adda_dmic_set()
418 __func__, kcontrol->id.name, dmic_on); in mt8188_adda_dmic_set()
420 if (param->mtkaif_dmic_on == dmic_on) in mt8188_adda_dmic_set()
423 param->mtkaif_dmic_on = dmic_on; in mt8188_adda_dmic_set()
435 unsigned int rate, int id) in mtk_dai_da_configure() argument
440 /* set sampling rate */ in mtk_dai_da_configure()
443 afe_adda_dl_rate_transform(afe, rate)); in mtk_dai_da_configure()
455 /* set voice input data if input sample rate is 8k or 16k */ in mtk_dai_da_configure()
457 if (rate == 8000 || rate == 16000) in mtk_dai_da_configure()
460 regmap_update_bits(afe->regmap, AFE_ADDA_DL_SRC2_CON0, mask, val); in mtk_dai_da_configure()
463 regmap_set_bits(afe->regmap, AFE_ADDA_DL_SDM_DCCOMP_CON, in mtk_dai_da_configure()
470 unsigned int rate, int id) in mtk_dai_ad_configure() argument
477 afe_adda_ul_rate_transform(afe, rate)); in mtk_dai_ad_configure()
479 regmap_update_bits(afe->regmap, AFE_ADDA_UL_SRC_CON0, in mtk_dai_ad_configure()
489 struct mt8188_afe_private *afe_priv = afe->platform_priv; in mtk_dai_adda_hw_params()
490 struct mtk_dai_adda_priv *adda_priv = afe_priv->dai_priv[dai->id]; in mtk_dai_adda_hw_params()
491 unsigned int rate = params_rate(params); in mtk_dai_adda_hw_params() local
492 int id = dai->id; in mtk_dai_adda_hw_params()
495 dev_dbg(afe->dev, "%s(), id %d, stream %d, rate %u\n", in mtk_dai_adda_hw_params()
496 __func__, id, substream->stream, rate); in mtk_dai_adda_hw_params()
498 adda_priv->hires_required = (rate > ADDA_HIRES_THRES); in mtk_dai_adda_hw_params()
500 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in mtk_dai_adda_hw_params()
501 ret = mtk_dai_da_configure(afe, rate, id); in mtk_dai_adda_hw_params()
503 ret = mtk_dai_ad_configure(afe, rate, id); in mtk_dai_adda_hw_params()
557 struct mt8188_afe_private *afe_priv = afe->platform_priv; in init_adda_priv_data()
563 adda_priv = devm_kzalloc(afe->dev, in init_adda_priv_data()
567 return -ENOMEM; in init_adda_priv_data()
569 afe_priv->dai_priv[adda_dai_list[i]] = adda_priv; in init_adda_priv_data()
579 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); in mt8188_dai_adda_register()
581 return -ENOMEM; in mt8188_dai_adda_register()
583 list_add(&dai->list, &afe->sub_dais); in mt8188_dai_adda_register()
585 dai->dai_drivers = mtk_dai_adda_driver; in mt8188_dai_adda_register()
586 dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_adda_driver); in mt8188_dai_adda_register()
588 dai->dapm_widgets = mtk_dai_adda_widgets; in mt8188_dai_adda_register()
589 dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_adda_widgets); in mt8188_dai_adda_register()
590 dai->dapm_routes = mtk_dai_adda_routes; in mt8188_dai_adda_register()
591 dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_adda_routes); in mt8188_dai_adda_register()
592 dai->controls = mtk_dai_adda_controls; in mt8188_dai_adda_register()
593 dai->num_controls = ARRAY_SIZE(mtk_dai_adda_controls); in mt8188_dai_adda_register()