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

1 // SPDX-License-Identifier: GPL-2.0
12 #include "mt8192-afe-clk.h"
13 #include "mt8192-afe-common.h"
14 #include "mt8192-afe-gpio.h"
15 #include "mt8192-interconnection.h"
16 #include "../common/mtk-dai-adda-common.h"
189 return -EINVAL; in mtk_adda_ul_src_dmic()
192 /* dmic mode, 3.25M*/ in mtk_adda_ul_src_dmic()
193 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
196 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
200 /* turn on dmic, ch1, ch2 */ in mtk_adda_ul_src_dmic()
201 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
204 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
207 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
217 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_ul_event()
219 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mtk_adda_ul_event()
220 int mtkaif_dmic = afe_priv->mtkaif_dmic; in mtk_adda_ul_event()
224 mt8192_afe_gpio_request(afe->dev, true, MT8192_DAI_ADDA, 1); in mtk_adda_ul_event()
226 /* update setting to dmic */ in mtk_adda_ul_event()
228 /* mtkaif_rxif_data_mode = 1, dmic */ in mtk_adda_ul_event()
229 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_RX_CFG0, in mtk_adda_ul_event()
232 /* dmic mode, 3.25M*/ in mtk_adda_ul_event()
233 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_RX_CFG0, in mtk_adda_ul_event()
242 mt8192_afe_gpio_request(afe->dev, false, MT8192_DAI_ADDA, 1); in mtk_adda_ul_event()
255 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_ch34_ul_event()
257 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mtk_adda_ch34_ul_event()
258 int mtkaif_dmic = afe_priv->mtkaif_dmic_ch34; in mtk_adda_ch34_ul_event()
259 int mtkaif_adda6_only = afe_priv->mtkaif_adda6_only; in mtk_adda_ch34_ul_event()
263 mt8192_afe_gpio_request(afe->dev, true, MT8192_DAI_ADDA_CH34, in mtk_adda_ch34_ul_event()
266 /* update setting to dmic */ in mtk_adda_ch34_ul_event()
268 /* mtkaif_rxif_data_mode = 1, dmic */ in mtk_adda_ch34_ul_event()
269 regmap_update_bits(afe->regmap, in mtk_adda_ch34_ul_event()
273 /* dmic mode, 3.25M*/ in mtk_adda_ch34_ul_event()
274 regmap_update_bits(afe->regmap, in mtk_adda_ch34_ul_event()
286 regmap_update_bits(afe->regmap, in mtk_adda_ch34_ul_event()
294 mt8192_afe_gpio_request(afe->dev, false, MT8192_DAI_ADDA_CH34, in mtk_adda_ch34_ul_event()
297 /* reset dmic */ in mtk_adda_ch34_ul_event()
298 afe_priv->mtkaif_dmic_ch34 = 0; in mtk_adda_ch34_ul_event()
301 regmap_update_bits(afe->regmap, in mtk_adda_ch34_ul_event()
317 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_pad_top_event()
319 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mtk_adda_pad_top_event()
323 if (afe_priv->mtkaif_protocol == MTKAIF_PROTOCOL_2_CLK_P2) in mtk_adda_pad_top_event()
324 regmap_write(afe->regmap, AFE_AUD_PAD_TOP, 0x38); in mtk_adda_pad_top_event()
326 regmap_write(afe->regmap, AFE_AUD_PAD_TOP, 0x30); in mtk_adda_pad_top_event()
339 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_mtkaif_cfg_event()
341 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mtk_adda_mtkaif_cfg_event()
347 if (afe_priv->mtkaif_protocol == MTKAIF_PROTOCOL_2_CLK_P2) { in mtk_adda_mtkaif_cfg_event()
349 regmap_write(afe->regmap, AFE_ADDA_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
351 regmap_write(afe->regmap, AFE_ADDA6_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
355 (afe_priv->mtkaif_chosen_phase[0] < 0 || in mtk_adda_mtkaif_cfg_event()
356 afe_priv->mtkaif_chosen_phase[1] < 0)) { in mtk_adda_mtkaif_cfg_event()
357 dev_warn(afe->dev, in mtk_adda_mtkaif_cfg_event()
360 afe_priv->mtkaif_chosen_phase[0], in mtk_adda_mtkaif_cfg_event()
361 afe_priv->mtkaif_chosen_phase[1]); in mtk_adda_mtkaif_cfg_event()
364 afe_priv->mtkaif_chosen_phase[2] < 0) { in mtk_adda_mtkaif_cfg_event()
365 dev_warn(afe->dev, in mtk_adda_mtkaif_cfg_event()
368 afe_priv->mtkaif_chosen_phase[2]); in mtk_adda_mtkaif_cfg_event()
373 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
376 regmap_update_bits(afe->regmap, AFE_ADDA6_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
381 if (afe_priv->mtkaif_phase_cycle[0] >= in mtk_adda_mtkaif_cfg_event()
382 afe_priv->mtkaif_phase_cycle[1]) { in mtk_adda_mtkaif_cfg_event()
384 delay_cycle = afe_priv->mtkaif_phase_cycle[0] - in mtk_adda_mtkaif_cfg_event()
385 afe_priv->mtkaif_phase_cycle[1]; in mtk_adda_mtkaif_cfg_event()
388 delay_cycle = afe_priv->mtkaif_phase_cycle[1] - in mtk_adda_mtkaif_cfg_event()
389 afe_priv->mtkaif_phase_cycle[0]; in mtk_adda_mtkaif_cfg_event()
392 regmap_update_bits(afe->regmap, in mtk_adda_mtkaif_cfg_event()
398 regmap_update_bits(afe->regmap, in mtk_adda_mtkaif_cfg_event()
405 if (afe_priv->mtkaif_phase_cycle[2] >= in mtk_adda_mtkaif_cfg_event()
406 afe_priv->mtkaif_phase_cycle[1]) { in mtk_adda_mtkaif_cfg_event()
408 delay_cycle = afe_priv->mtkaif_phase_cycle[2] - in mtk_adda_mtkaif_cfg_event()
409 afe_priv->mtkaif_phase_cycle[1]; in mtk_adda_mtkaif_cfg_event()
412 delay_cycle = afe_priv->mtkaif_phase_cycle[1] - in mtk_adda_mtkaif_cfg_event()
413 afe_priv->mtkaif_phase_cycle[2]; in mtk_adda_mtkaif_cfg_event()
416 regmap_update_bits(afe->regmap, in mtk_adda_mtkaif_cfg_event()
421 regmap_update_bits(afe->regmap, in mtk_adda_mtkaif_cfg_event()
426 } else if (afe_priv->mtkaif_protocol == MTKAIF_PROTOCOL_2) { in mtk_adda_mtkaif_cfg_event()
427 regmap_write(afe->regmap, AFE_ADDA_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
429 regmap_write(afe->regmap, AFE_ADDA6_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
432 regmap_write(afe->regmap, AFE_ADDA_MTKAIF_CFG0, 0x0); in mtk_adda_mtkaif_cfg_event()
433 regmap_write(afe->regmap, AFE_ADDA6_MTKAIF_CFG0, 0x0); in mtk_adda_mtkaif_cfg_event()
447 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_dl_event()
452 mt8192_afe_gpio_request(afe->dev, true, MT8192_DAI_ADDA, 0); in mtk_adda_dl_event()
457 mt8192_afe_gpio_request(afe->dev, false, MT8192_DAI_ADDA, 0); in mtk_adda_dl_event()
470 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_ch34_dl_event()
475 mt8192_afe_gpio_request(afe->dev, true, MT8192_DAI_ADDA_CH34, in mtk_adda_ch34_dl_event()
481 mt8192_afe_gpio_request(afe->dev, false, MT8192_DAI_ADDA_CH34, in mtk_adda_ch34_dl_event()
497 struct mt8192_afe_private *afe_priv = afe->platform_priv; in stf_positive_gain_get()
499 ucontrol->value.integer.value[0] = afe_priv->stf_positive_gain_db; in stf_positive_gain_get()
508 struct mt8192_afe_private *afe_priv = afe->platform_priv; in stf_positive_gain_set()
509 int gain_db = ucontrol->value.integer.value[0]; in stf_positive_gain_set()
512 afe_priv->stf_positive_gain_db = gain_db; in stf_positive_gain_set()
515 regmap_update_bits_check(afe->regmap, in stf_positive_gain_set()
521 return -EINVAL; in stf_positive_gain_set()
532 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_adda_dmic_get()
534 ucontrol->value.integer.value[0] = afe_priv->mtkaif_dmic; in mt8192_adda_dmic_get()
543 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_adda_dmic_set()
547 dmic_on = ucontrol->value.integer.value[0]; in mt8192_adda_dmic_set()
549 change = (afe_priv->mtkaif_dmic != dmic_on) || in mt8192_adda_dmic_set()
550 (afe_priv->mtkaif_dmic_ch34 != dmic_on); in mt8192_adda_dmic_set()
552 afe_priv->mtkaif_dmic = dmic_on; in mt8192_adda_dmic_set()
553 afe_priv->mtkaif_dmic_ch34 = dmic_on; in mt8192_adda_dmic_set()
563 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_adda6_only_get()
565 ucontrol->value.integer.value[0] = afe_priv->mtkaif_adda6_only; in mt8192_adda6_only_get()
574 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_adda6_only_set()
578 mtkaif_adda6_only = ucontrol->value.integer.value[0]; in mt8192_adda6_only_set()
580 change = afe_priv->mtkaif_adda6_only != mtkaif_adda6_only; in mt8192_adda6_only_set()
581 afe_priv->mtkaif_adda6_only = mtkaif_adda6_only; in mt8192_adda6_only_set()
635 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_stf_event()
643 regmap_read(afe->regmap, AFE_ADDA_UL_SRC_CON0, &ul_rate); in mtk_stf_event()
658 regmap_read(afe->regmap, AFE_SIDETONE_CON1, &reg_value); in mtk_stf_event()
663 regmap_update_bits(afe->regmap, in mtk_stf_event()
667 regmap_update_bits(afe->regmap, in mtk_stf_event()
672 regmap_update_bits(afe->regmap, in mtk_stf_event()
677 regmap_update_bits(afe->regmap, in mtk_stf_event()
683 regmap_read(afe->regmap, AFE_SIDETONE_CON0, &reg_value); in mtk_stf_event()
689 regmap_update_bits(afe->regmap, in mtk_stf_event()
701 regmap_read(afe->regmap, in mtk_stf_event()
709 dev_warn(afe->dev, in mtk_stf_event()
717 /* need write -> read -> write to write next coeff */ in mtk_stf_event()
718 regmap_update_bits(afe->regmap, in mtk_stf_event()
726 regmap_update_bits(afe->regmap, in mtk_stf_event()
732 regmap_update_bits(afe->regmap, in mtk_stf_event()
736 regmap_update_bits(afe->regmap, in mtk_stf_event()
829 /* inter-connections */
1009 {"ADDA_UL_Mux", "AP_DMIC", "AP DMIC Capture"},
1012 {"ADDA_CH34_UL_Mux", "AP_DMIC", "AP DMIC CH34 Capture"},
1019 {"AP DMIC Capture", NULL, "ADDA Enable"},
1020 {"AP DMIC Capture", NULL, "ADDA Capture Enable"},
1021 {"AP DMIC Capture", NULL, "ADDA_FIFO"},
1022 {"AP DMIC Capture", NULL, "AP_DMIC_EN"},
1029 {"AP DMIC CH34 Capture", NULL, "ADDA Enable"},
1030 {"AP DMIC CH34 Capture", NULL, "ADDA CH34 Capture Enable"},
1031 {"AP DMIC CH34 Capture", NULL, "ADDA_CH34_FIFO"},
1032 {"AP DMIC CH34 Capture", NULL, "AP_DMIC_CH34_EN"},
1034 {"AP DMIC Capture", NULL, "AP_DMIC_INPUT"},
1035 {"AP DMIC CH34 Capture", NULL, "AP_DMIC_CH34_INPUT"},
1067 unsigned int rate = params_rate(params); in mtk_dai_adda_hw_params() local
1068 int id = dai->id; in mtk_dai_adda_hw_params()
1070 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in mtk_dai_adda_hw_params()
1074 /* set sampling rate */ in mtk_dai_adda_hw_params()
1075 dl_src2_con0 = mtk_adda_dl_rate_transform(afe, rate) << in mtk_dai_adda_hw_params()
1085 /* set voice input data if input sample rate is 8k or 16k */ in mtk_dai_adda_hw_params()
1086 if (rate == 8000 || rate == 16000) in mtk_dai_adda_hw_params()
1089 /* SA suggest apply -0.3db to audio/speech path */ in mtk_dai_adda_hw_params()
1093 /* turn on down-link gain */ in mtk_dai_adda_hw_params()
1098 regmap_write(afe->regmap, AFE_ADDA_PREDIS_CON0, 0); in mtk_dai_adda_hw_params()
1099 regmap_write(afe->regmap, AFE_ADDA_PREDIS_CON1, 0); in mtk_dai_adda_hw_params()
1101 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1103 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1107 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1114 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1120 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1123 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1129 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1131 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1134 regmap_write(afe->regmap, AFE_ADDA_3RD_DAC_DL_SRC2_CON0, in mtk_dai_adda_hw_params()
1136 regmap_write(afe->regmap, AFE_ADDA_3RD_DAC_DL_SRC2_CON1, in mtk_dai_adda_hw_params()
1140 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1147 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1153 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1156 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1165 voice_mode = mtk_adda_ul_rate_transform(afe, rate); in mtk_dai_adda_hw_params()
1179 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1181 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1183 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1185 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1187 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1190 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1194 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1200 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1208 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1210 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1212 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1214 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1216 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1219 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1223 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1229 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1238 /* ap dmic */ in mtk_dai_adda_hw_params()
1315 .stream_name = "AP DMIC Capture",
1327 .stream_name = "AP DMIC CH34 Capture",
1340 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_dai_adda_register()
1342 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); in mt8192_dai_adda_register()
1344 return -ENOMEM; in mt8192_dai_adda_register()
1346 list_add(&dai->list, &afe->sub_dais); in mt8192_dai_adda_register()
1348 dai->dai_drivers = mtk_dai_adda_driver; in mt8192_dai_adda_register()
1349 dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_adda_driver); in mt8192_dai_adda_register()
1351 dai->controls = mtk_adda_controls; in mt8192_dai_adda_register()
1352 dai->num_controls = ARRAY_SIZE(mtk_adda_controls); in mt8192_dai_adda_register()
1353 dai->dapm_widgets = mtk_dai_adda_widgets; in mt8192_dai_adda_register()
1354 dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_adda_widgets); in mt8192_dai_adda_register()
1355 dai->dapm_routes = mtk_dai_adda_routes; in mt8192_dai_adda_register()
1356 dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_adda_routes); in mt8192_dai_adda_register()
1358 /* ap dmic priv share with adda */ in mt8192_dai_adda_register()
1359 afe_priv->dai_priv[MT8192_DAI_AP_DMIC] = in mt8192_dai_adda_register()
1360 afe_priv->dai_priv[MT8192_DAI_ADDA]; in mt8192_dai_adda_register()
1361 afe_priv->dai_priv[MT8192_DAI_AP_DMIC_CH34] = in mt8192_dai_adda_register()
1362 afe_priv->dai_priv[MT8192_DAI_ADDA_CH34]; in mt8192_dai_adda_register()