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

1 // SPDX-License-Identifier: GPL-2.0
12 #include "mt8195-afe-clk.h"
13 #include "mt8195-afe-common.h"
14 #include "mt8195-reg.h"
67 unsigned int rate) in afe_adda_dl_rate_transform() argument
69 switch (rate) { in afe_adda_dl_rate_transform()
93 dev_info(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n", in afe_adda_dl_rate_transform()
94 __func__, rate); in afe_adda_dl_rate_transform()
100 unsigned int rate) in afe_adda_ul_rate_transform() argument
102 switch (rate) { in afe_adda_ul_rate_transform()
116 dev_info(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n", in afe_adda_ul_rate_transform()
117 __func__, rate); in afe_adda_ul_rate_transform()
124 struct mt8195_afe_private *afe_priv = afe->platform_priv; in mt8195_adda_mtkaif_init()
125 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8195_adda_mtkaif_init()
135 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_CFG0, mask, val); in mt8195_adda_mtkaif_init()
136 regmap_update_bits(afe->regmap, AFE_ADDA6_MTKAIF_CFG0, mask, val); in mt8195_adda_mtkaif_init()
140 regmap_update_bits(afe->regmap, AFE_AUD_PAD_TOP, mask, val); in mt8195_adda_mtkaif_init()
142 if (!param->mtkaif_calibration_ok) { in mt8195_adda_mtkaif_init()
143 dev_info(afe->dev, "%s(), calibration fail\n", __func__); in mt8195_adda_mtkaif_init()
148 if (param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_0] >= in mt8195_adda_mtkaif_init()
149 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_1]) { in mt8195_adda_mtkaif_init()
152 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_0] - in mt8195_adda_mtkaif_init()
153 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_1]; in mt8195_adda_mtkaif_init()
157 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_1] - in mt8195_adda_mtkaif_init()
158 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_0]; in mt8195_adda_mtkaif_init()
166 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_RX_CFG2, mask, val); in mt8195_adda_mtkaif_init()
169 if (param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_2] >= in mt8195_adda_mtkaif_init()
170 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_1]) { in mt8195_adda_mtkaif_init()
173 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_2] - in mt8195_adda_mtkaif_init()
174 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_1]; in mt8195_adda_mtkaif_init()
178 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_1] - in mt8195_adda_mtkaif_init()
179 param->mtkaif_phase_cycle[MT8195_MTKAIF_MISO_2]; in mt8195_adda_mtkaif_init()
187 regmap_update_bits(afe->regmap, AFE_ADDA6_MTKAIF_RX_CFG2, mask, val); in mt8195_adda_mtkaif_init()
196 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_mtkaif_cfg_event()
199 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda_mtkaif_cfg_event()
200 __func__, w->name, event); in mtk_adda_mtkaif_cfg_event()
217 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_dl_event()
220 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda_dl_event()
221 __func__, w->name, event); in mtk_adda_dl_event()
235 static void mtk_adda_ul_mictype(struct mtk_base_afe *afe, int adda, bool dmic) in mtk_adda_ul_mictype() argument
249 dev_info(afe->dev, "%s(), wrong parameter\n", __func__); in mtk_adda_ul_mictype()
256 /* turn on dmic, ch1, ch2 */ in mtk_adda_ul_mictype()
257 if (dmic) in mtk_adda_ul_mictype()
260 regmap_update_bits(afe->regmap, reg, mask, val); in mtk_adda_ul_mictype()
267 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_ul_event()
269 struct mt8195_afe_private *afe_priv = afe->platform_priv; in mtk_adda_ul_event()
270 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mtk_adda_ul_event()
272 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda_ul_event()
273 __func__, w->name, event); in mtk_adda_ul_event()
277 mtk_adda_ul_mictype(afe, MTK_AFE_ADDA, param->mtkaif_dmic_on); in mtk_adda_ul_event()
294 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda6_ul_event()
296 struct mt8195_afe_private *afe_priv = afe->platform_priv; in mtk_adda6_ul_event()
297 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mtk_adda6_ul_event()
300 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_adda6_ul_event()
301 __func__, w->name, event); in mtk_adda6_ul_event()
305 mtk_adda_ul_mictype(afe, MTK_AFE_ADDA6, param->mtkaif_dmic_on); in mtk_adda6_ul_event()
307 val = (param->mtkaif_adda6_only ? in mtk_adda6_ul_event()
310 regmap_update_bits(afe->regmap, in mtk_adda6_ul_event()
330 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_audio_hires_event()
332 struct mt8195_afe_private *afe_priv = afe->platform_priv; in mtk_audio_hires_event()
333 struct clk *clk = afe_priv->clk[MT8195_CLK_TOP_AUDIO_H_SEL]; in mtk_audio_hires_event()
336 dev_dbg(afe->dev, "%s(), name %s, event 0x%x\n", in mtk_audio_hires_event()
337 __func__, w->name, event); in mtk_audio_hires_event()
341 clk_parent = afe_priv->clk[MT8195_CLK_TOP_APLL1]; in mtk_audio_hires_event()
344 clk_parent = afe_priv->clk[MT8195_CLK_XTAL_26M]; in mtk_audio_hires_event()
357 struct mt8195_afe_private *afe_priv = afe->platform_priv; in get_adda_priv_by_name()
369 return afe_priv->dai_priv[dai_id]; in get_adda_priv_by_name()
376 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_afe_adda_hires_connect()
380 adda_priv = get_adda_priv_by_name(afe, w->name); in mtk_afe_adda_hires_connect()
383 dev_info(afe->dev, "adda_priv == NULL"); in mtk_afe_adda_hires_connect()
387 return (adda_priv->hires_required) ? 1 : 0; in mtk_afe_adda_hires_connect()
546 unsigned int value = (unsigned int)(ucontrol->value.integer.value[0]); in mt8195_adda_dl_gain_put()
548 regmap_update_bits(afe->regmap, reg, mask, DL_2_GAIN_CTL_PRE(value)); in mt8195_adda_dl_gain_put()
561 regmap_read(afe->regmap, reg, &value); in mt8195_adda_dl_gain_get()
563 ucontrol->value.integer.value[0] = ((value & mask) >> in mt8195_adda_dl_gain_get()
573 struct mt8195_afe_private *afe_priv = afe->platform_priv; in mt8195_adda6_only_get()
574 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8195_adda6_only_get()
576 ucontrol->value.integer.value[0] = param->mtkaif_adda6_only; in mt8195_adda6_only_get()
585 struct mt8195_afe_private *afe_priv = afe->platform_priv; in mt8195_adda6_only_set()
586 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8195_adda6_only_set()
589 mtkaif_adda6_only = ucontrol->value.integer.value[0]; in mt8195_adda6_only_set()
591 dev_info(afe->dev, "%s(), kcontrol name %s, mtkaif_adda6_only %d\n", in mt8195_adda6_only_set()
592 __func__, kcontrol->id.name, mtkaif_adda6_only); in mt8195_adda6_only_set()
594 param->mtkaif_adda6_only = mtkaif_adda6_only; in mt8195_adda6_only_set()
604 struct mt8195_afe_private *afe_priv = afe->platform_priv; in mt8195_adda_dmic_get()
605 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8195_adda_dmic_get()
607 ucontrol->value.integer.value[0] = param->mtkaif_dmic_on; in mt8195_adda_dmic_get()
616 struct mt8195_afe_private *afe_priv = afe->platform_priv; in mt8195_adda_dmic_set()
617 struct mtkaif_param *param = &afe_priv->mtkaif_params; in mt8195_adda_dmic_set()
620 dmic_on = ucontrol->value.integer.value[0]; in mt8195_adda_dmic_set()
622 dev_dbg(afe->dev, "%s(), kcontrol name %s, dmic_on %d\n", in mt8195_adda_dmic_set()
623 __func__, kcontrol->id.name, dmic_on); in mt8195_adda_dmic_set()
625 param->mtkaif_dmic_on = dmic_on; in mt8195_adda_dmic_set()
640 unsigned int rate, int id) in mtk_dai_da_configure() argument
645 /* set sampling rate */ in mtk_dai_da_configure()
647 val |= DL_2_INPUT_MODE_CTL(afe_adda_dl_rate_transform(afe, rate)); in mtk_dai_da_configure()
659 /* set voice input data if input sample rate is 8k or 16k */ in mtk_dai_da_configure()
661 if (rate == 8000 || rate == 16000) in mtk_dai_da_configure()
664 regmap_update_bits(afe->regmap, AFE_ADDA_DL_SRC2_CON0, mask, val); in mtk_dai_da_configure()
672 regmap_update_bits(afe->regmap, AFE_ADDA_DL_SDM_DCCOMP_CON, mask, val); in mtk_dai_da_configure()
678 unsigned int rate, int id) in mtk_dai_ad_configure() argument
684 val |= UL_VOICE_MODE_CTL(afe_adda_ul_rate_transform(afe, rate)); in mtk_dai_ad_configure()
688 regmap_update_bits(afe->regmap, AFE_ADDA_UL_SRC_CON0, in mtk_dai_ad_configure()
692 regmap_update_bits(afe->regmap, AFE_ADDA6_UL_SRC_CON0, in mtk_dai_ad_configure()
706 struct mt8195_afe_private *afe_priv = afe->platform_priv; in mtk_dai_adda_hw_params()
707 struct mtk_dai_adda_priv *adda_priv = afe_priv->dai_priv[dai->id]; in mtk_dai_adda_hw_params()
708 unsigned int rate = params_rate(params); in mtk_dai_adda_hw_params() local
709 int id = dai->id; in mtk_dai_adda_hw_params()
712 dev_dbg(afe->dev, "%s(), id %d, stream %d, rate %d\n", in mtk_dai_adda_hw_params()
713 __func__, id, substream->stream, rate); in mtk_dai_adda_hw_params()
715 if (rate > ADDA_HIRES_THRES) in mtk_dai_adda_hw_params()
716 adda_priv->hires_required = 1; in mtk_dai_adda_hw_params()
718 adda_priv->hires_required = 0; in mtk_dai_adda_hw_params()
720 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) in mtk_dai_adda_hw_params()
721 ret = mtk_dai_da_configure(afe, rate, id); in mtk_dai_adda_hw_params()
723 ret = mtk_dai_ad_configure(afe, rate, id); in mtk_dai_adda_hw_params()
789 struct mt8195_afe_private *afe_priv = afe->platform_priv; in init_adda_priv_data()
799 adda_priv = devm_kzalloc(afe->dev, in init_adda_priv_data()
803 return -ENOMEM; in init_adda_priv_data()
805 afe_priv->dai_priv[adda_dai_list[i]] = adda_priv; in init_adda_priv_data()
815 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); in mt8195_dai_adda_register()
817 return -ENOMEM; in mt8195_dai_adda_register()
819 list_add(&dai->list, &afe->sub_dais); in mt8195_dai_adda_register()
821 dai->dai_drivers = mtk_dai_adda_driver; in mt8195_dai_adda_register()
822 dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_adda_driver); in mt8195_dai_adda_register()
824 dai->dapm_widgets = mtk_dai_adda_widgets; in mt8195_dai_adda_register()
825 dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_adda_widgets); in mt8195_dai_adda_register()
826 dai->dapm_routes = mtk_dai_adda_routes; in mt8195_dai_adda_register()
827 dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_adda_routes); in mt8195_dai_adda_register()
828 dai->controls = mtk_dai_adda_controls; in mt8195_dai_adda_register()
829 dai->num_controls = ARRAY_SIZE(mtk_dai_adda_controls); in mt8195_dai_adda_register()