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"
70 unsigned int rate) in adda_dl_rate_transform() argument
72 switch (rate) { in adda_dl_rate_transform()
96 dev_warn(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n", in adda_dl_rate_transform()
97 __func__, rate); in adda_dl_rate_transform()
103 unsigned int rate) in adda_ul_rate_transform() argument
105 switch (rate) { in adda_ul_rate_transform()
119 dev_warn(afe->dev, "%s(), rate %d invalid, use 48kHz!!!\n", in adda_ul_rate_transform()
120 __func__, rate); in adda_ul_rate_transform()
273 return -EINVAL; in mtk_adda_ul_src_dmic()
276 /* dmic mode, 3.25M*/ in mtk_adda_ul_src_dmic()
277 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
280 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
284 /* turn on dmic, ch1, ch2 */ in mtk_adda_ul_src_dmic()
285 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
288 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
291 regmap_update_bits(afe->regmap, reg, in mtk_adda_ul_src_dmic()
301 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_ul_event()
303 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mtk_adda_ul_event()
304 int mtkaif_dmic = afe_priv->mtkaif_dmic; in mtk_adda_ul_event()
308 mt8192_afe_gpio_request(afe->dev, true, MT8192_DAI_ADDA, 1); in mtk_adda_ul_event()
310 /* update setting to dmic */ in mtk_adda_ul_event()
312 /* mtkaif_rxif_data_mode = 1, dmic */ in mtk_adda_ul_event()
313 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_RX_CFG0, in mtk_adda_ul_event()
316 /* dmic mode, 3.25M*/ in mtk_adda_ul_event()
317 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_RX_CFG0, in mtk_adda_ul_event()
326 mt8192_afe_gpio_request(afe->dev, false, MT8192_DAI_ADDA, 1); in mtk_adda_ul_event()
339 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_ch34_ul_event()
341 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mtk_adda_ch34_ul_event()
342 int mtkaif_dmic = afe_priv->mtkaif_dmic_ch34; in mtk_adda_ch34_ul_event()
343 int mtkaif_adda6_only = afe_priv->mtkaif_adda6_only; in mtk_adda_ch34_ul_event()
347 mt8192_afe_gpio_request(afe->dev, true, MT8192_DAI_ADDA_CH34, in mtk_adda_ch34_ul_event()
350 /* update setting to dmic */ in mtk_adda_ch34_ul_event()
352 /* mtkaif_rxif_data_mode = 1, dmic */ in mtk_adda_ch34_ul_event()
353 regmap_update_bits(afe->regmap, in mtk_adda_ch34_ul_event()
357 /* dmic mode, 3.25M*/ in mtk_adda_ch34_ul_event()
358 regmap_update_bits(afe->regmap, in mtk_adda_ch34_ul_event()
370 regmap_update_bits(afe->regmap, in mtk_adda_ch34_ul_event()
378 mt8192_afe_gpio_request(afe->dev, false, MT8192_DAI_ADDA_CH34, in mtk_adda_ch34_ul_event()
381 /* reset dmic */ in mtk_adda_ch34_ul_event()
382 afe_priv->mtkaif_dmic_ch34 = 0; in mtk_adda_ch34_ul_event()
385 regmap_update_bits(afe->regmap, in mtk_adda_ch34_ul_event()
401 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_pad_top_event()
403 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mtk_adda_pad_top_event()
407 if (afe_priv->mtkaif_protocol == MTKAIF_PROTOCOL_2_CLK_P2) in mtk_adda_pad_top_event()
408 regmap_write(afe->regmap, AFE_AUD_PAD_TOP, 0x38); in mtk_adda_pad_top_event()
410 regmap_write(afe->regmap, AFE_AUD_PAD_TOP, 0x30); in mtk_adda_pad_top_event()
423 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_mtkaif_cfg_event()
425 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mtk_adda_mtkaif_cfg_event()
431 if (afe_priv->mtkaif_protocol == MTKAIF_PROTOCOL_2_CLK_P2) { in mtk_adda_mtkaif_cfg_event()
433 regmap_write(afe->regmap, AFE_ADDA_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
435 regmap_write(afe->regmap, AFE_ADDA6_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
439 (afe_priv->mtkaif_chosen_phase[0] < 0 || in mtk_adda_mtkaif_cfg_event()
440 afe_priv->mtkaif_chosen_phase[1] < 0)) { in mtk_adda_mtkaif_cfg_event()
441 dev_warn(afe->dev, in mtk_adda_mtkaif_cfg_event()
444 afe_priv->mtkaif_chosen_phase[0], in mtk_adda_mtkaif_cfg_event()
445 afe_priv->mtkaif_chosen_phase[1]); in mtk_adda_mtkaif_cfg_event()
448 afe_priv->mtkaif_chosen_phase[2] < 0) { in mtk_adda_mtkaif_cfg_event()
449 dev_warn(afe->dev, in mtk_adda_mtkaif_cfg_event()
452 afe_priv->mtkaif_chosen_phase[2]); in mtk_adda_mtkaif_cfg_event()
457 regmap_update_bits(afe->regmap, AFE_ADDA_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
460 regmap_update_bits(afe->regmap, AFE_ADDA6_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
465 if (afe_priv->mtkaif_phase_cycle[0] >= in mtk_adda_mtkaif_cfg_event()
466 afe_priv->mtkaif_phase_cycle[1]) { in mtk_adda_mtkaif_cfg_event()
468 delay_cycle = afe_priv->mtkaif_phase_cycle[0] - in mtk_adda_mtkaif_cfg_event()
469 afe_priv->mtkaif_phase_cycle[1]; in mtk_adda_mtkaif_cfg_event()
472 delay_cycle = afe_priv->mtkaif_phase_cycle[1] - in mtk_adda_mtkaif_cfg_event()
473 afe_priv->mtkaif_phase_cycle[0]; in mtk_adda_mtkaif_cfg_event()
476 regmap_update_bits(afe->regmap, in mtk_adda_mtkaif_cfg_event()
482 regmap_update_bits(afe->regmap, in mtk_adda_mtkaif_cfg_event()
489 if (afe_priv->mtkaif_phase_cycle[2] >= in mtk_adda_mtkaif_cfg_event()
490 afe_priv->mtkaif_phase_cycle[1]) { in mtk_adda_mtkaif_cfg_event()
492 delay_cycle = afe_priv->mtkaif_phase_cycle[2] - in mtk_adda_mtkaif_cfg_event()
493 afe_priv->mtkaif_phase_cycle[1]; in mtk_adda_mtkaif_cfg_event()
496 delay_cycle = afe_priv->mtkaif_phase_cycle[1] - in mtk_adda_mtkaif_cfg_event()
497 afe_priv->mtkaif_phase_cycle[2]; in mtk_adda_mtkaif_cfg_event()
500 regmap_update_bits(afe->regmap, in mtk_adda_mtkaif_cfg_event()
505 regmap_update_bits(afe->regmap, in mtk_adda_mtkaif_cfg_event()
510 } else if (afe_priv->mtkaif_protocol == MTKAIF_PROTOCOL_2) { in mtk_adda_mtkaif_cfg_event()
511 regmap_write(afe->regmap, AFE_ADDA_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
513 regmap_write(afe->regmap, AFE_ADDA6_MTKAIF_CFG0, in mtk_adda_mtkaif_cfg_event()
516 regmap_write(afe->regmap, AFE_ADDA_MTKAIF_CFG0, 0x0); in mtk_adda_mtkaif_cfg_event()
517 regmap_write(afe->regmap, AFE_ADDA6_MTKAIF_CFG0, 0x0); in mtk_adda_mtkaif_cfg_event()
531 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_dl_event()
536 mt8192_afe_gpio_request(afe->dev, true, MT8192_DAI_ADDA, 0); in mtk_adda_dl_event()
541 mt8192_afe_gpio_request(afe->dev, false, MT8192_DAI_ADDA, 0); in mtk_adda_dl_event()
554 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_adda_ch34_dl_event()
559 mt8192_afe_gpio_request(afe->dev, true, MT8192_DAI_ADDA_CH34, in mtk_adda_ch34_dl_event()
565 mt8192_afe_gpio_request(afe->dev, false, MT8192_DAI_ADDA_CH34, in mtk_adda_ch34_dl_event()
581 struct mt8192_afe_private *afe_priv = afe->platform_priv; in stf_positive_gain_get()
583 ucontrol->value.integer.value[0] = afe_priv->stf_positive_gain_db; in stf_positive_gain_get()
592 struct mt8192_afe_private *afe_priv = afe->platform_priv; in stf_positive_gain_set()
593 int gain_db = ucontrol->value.integer.value[0]; in stf_positive_gain_set()
596 afe_priv->stf_positive_gain_db = gain_db; in stf_positive_gain_set()
599 regmap_update_bits_check(afe->regmap, in stf_positive_gain_set()
605 return -EINVAL; in stf_positive_gain_set()
616 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_adda_dmic_get()
618 ucontrol->value.integer.value[0] = afe_priv->mtkaif_dmic; in mt8192_adda_dmic_get()
627 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_adda_dmic_set()
631 dmic_on = ucontrol->value.integer.value[0]; in mt8192_adda_dmic_set()
633 change = (afe_priv->mtkaif_dmic != dmic_on) || in mt8192_adda_dmic_set()
634 (afe_priv->mtkaif_dmic_ch34 != dmic_on); in mt8192_adda_dmic_set()
636 afe_priv->mtkaif_dmic = dmic_on; in mt8192_adda_dmic_set()
637 afe_priv->mtkaif_dmic_ch34 = dmic_on; in mt8192_adda_dmic_set()
647 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_adda6_only_get()
649 ucontrol->value.integer.value[0] = afe_priv->mtkaif_adda6_only; in mt8192_adda6_only_get()
658 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_adda6_only_set()
662 mtkaif_adda6_only = ucontrol->value.integer.value[0]; in mt8192_adda6_only_set()
664 change = afe_priv->mtkaif_adda6_only != mtkaif_adda6_only; in mt8192_adda6_only_set()
665 afe_priv->mtkaif_adda6_only = mtkaif_adda6_only; in mt8192_adda6_only_set()
719 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm); in mtk_stf_event()
727 regmap_read(afe->regmap, AFE_ADDA_UL_SRC_CON0, &ul_rate); in mtk_stf_event()
742 regmap_read(afe->regmap, AFE_SIDETONE_CON1, ®_value); in mtk_stf_event()
747 regmap_update_bits(afe->regmap, in mtk_stf_event()
751 regmap_update_bits(afe->regmap, in mtk_stf_event()
756 regmap_update_bits(afe->regmap, in mtk_stf_event()
761 regmap_update_bits(afe->regmap, in mtk_stf_event()
767 regmap_read(afe->regmap, AFE_SIDETONE_CON0, ®_value); in mtk_stf_event()
773 regmap_update_bits(afe->regmap, in mtk_stf_event()
785 regmap_read(afe->regmap, in mtk_stf_event()
793 dev_warn(afe->dev, in mtk_stf_event()
801 /* need write -> read -> write to write next coeff */ in mtk_stf_event()
802 regmap_update_bits(afe->regmap, in mtk_stf_event()
810 regmap_update_bits(afe->regmap, in mtk_stf_event()
816 regmap_update_bits(afe->regmap, in mtk_stf_event()
820 regmap_update_bits(afe->regmap, in mtk_stf_event()
913 /* inter-connections */
1093 {"ADDA_UL_Mux", "AP_DMIC", "AP DMIC Capture"},
1096 {"ADDA_CH34_UL_Mux", "AP_DMIC", "AP DMIC CH34 Capture"},
1103 {"AP DMIC Capture", NULL, "ADDA Enable"},
1104 {"AP DMIC Capture", NULL, "ADDA Capture Enable"},
1105 {"AP DMIC Capture", NULL, "ADDA_FIFO"},
1106 {"AP DMIC Capture", NULL, "AP_DMIC_EN"},
1113 {"AP DMIC CH34 Capture", NULL, "ADDA Enable"},
1114 {"AP DMIC CH34 Capture", NULL, "ADDA CH34 Capture Enable"},
1115 {"AP DMIC CH34 Capture", NULL, "ADDA_CH34_FIFO"},
1116 {"AP DMIC CH34 Capture", NULL, "AP_DMIC_CH34_EN"},
1118 {"AP DMIC Capture", NULL, "AP_DMIC_INPUT"},
1119 {"AP DMIC CH34 Capture", NULL, "AP_DMIC_CH34_INPUT"},
1151 unsigned int rate = params_rate(params); in mtk_dai_adda_hw_params() local
1152 int id = dai->id; in mtk_dai_adda_hw_params()
1154 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { in mtk_dai_adda_hw_params()
1158 /* set sampling rate */ in mtk_dai_adda_hw_params()
1159 dl_src2_con0 = adda_dl_rate_transform(afe, rate) << in mtk_dai_adda_hw_params()
1169 /* set voice input data if input sample rate is 8k or 16k */ in mtk_dai_adda_hw_params()
1170 if (rate == 8000 || rate == 16000) in mtk_dai_adda_hw_params()
1173 /* SA suggest apply -0.3db to audio/speech path */ in mtk_dai_adda_hw_params()
1177 /* turn on down-link gain */ in mtk_dai_adda_hw_params()
1182 regmap_write(afe->regmap, AFE_ADDA_PREDIS_CON0, 0); in mtk_dai_adda_hw_params()
1183 regmap_write(afe->regmap, AFE_ADDA_PREDIS_CON1, 0); 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()
1191 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1198 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1204 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1207 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1213 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1215 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1218 regmap_write(afe->regmap, AFE_ADDA_3RD_DAC_DL_SRC2_CON0, in mtk_dai_adda_hw_params()
1220 regmap_write(afe->regmap, AFE_ADDA_3RD_DAC_DL_SRC2_CON1, in mtk_dai_adda_hw_params()
1224 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1231 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1237 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1240 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1249 voice_mode = adda_ul_rate_transform(afe, rate); in mtk_dai_adda_hw_params()
1263 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1265 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1267 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1269 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1271 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1274 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1278 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1284 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1292 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1294 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1296 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1298 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1300 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1303 regmap_write(afe->regmap, in mtk_dai_adda_hw_params()
1307 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1313 regmap_update_bits(afe->regmap, in mtk_dai_adda_hw_params()
1322 /* ap dmic */ in mtk_dai_adda_hw_params()
1399 .stream_name = "AP DMIC Capture",
1411 .stream_name = "AP DMIC CH34 Capture",
1424 struct mt8192_afe_private *afe_priv = afe->platform_priv; in mt8192_dai_adda_register()
1426 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); in mt8192_dai_adda_register()
1428 return -ENOMEM; in mt8192_dai_adda_register()
1430 list_add(&dai->list, &afe->sub_dais); in mt8192_dai_adda_register()
1432 dai->dai_drivers = mtk_dai_adda_driver; in mt8192_dai_adda_register()
1433 dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_adda_driver); in mt8192_dai_adda_register()
1435 dai->controls = mtk_adda_controls; in mt8192_dai_adda_register()
1436 dai->num_controls = ARRAY_SIZE(mtk_adda_controls); in mt8192_dai_adda_register()
1437 dai->dapm_widgets = mtk_dai_adda_widgets; in mt8192_dai_adda_register()
1438 dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_adda_widgets); in mt8192_dai_adda_register()
1439 dai->dapm_routes = mtk_dai_adda_routes; in mt8192_dai_adda_register()
1440 dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_adda_routes); in mt8192_dai_adda_register()
1442 /* ap dmic priv share with adda */ in mt8192_dai_adda_register()
1443 afe_priv->dai_priv[MT8192_DAI_AP_DMIC] = in mt8192_dai_adda_register()
1444 afe_priv->dai_priv[MT8192_DAI_ADDA]; in mt8192_dai_adda_register()
1445 afe_priv->dai_priv[MT8192_DAI_AP_DMIC_CH34] = in mt8192_dai_adda_register()
1446 afe_priv->dai_priv[MT8192_DAI_ADDA_CH34]; in mt8192_dai_adda_register()