Lines Matching +full:dmic +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0
3 * MediaTek 8365 ALSA SoC Audio DAI DMIC Control
13 #include "mt8365-afe-clk.h"
14 #include "mt8365-afe-common.h"
46 return -EINVAL; in get_chan_reg()
55 regmap_update_bits(afe->regmap, AFE_ADDA_UL_DL_CON0, in audio_dmic_adda_enable()
62 regmap_update_bits(afe->regmap, AFE_ADDA_UL_DL_CON0, in audio_dmic_adda_disable()
72 struct mt8365_afe_private *afe_priv = afe->platform_priv; in mt8365_dai_enable_dmic()
73 struct mt8365_dmic_data *dmic_data = afe_priv->dai_priv[MT8365_AFE_IO_DMIC]; in mt8365_dai_enable_dmic()
75 int reg = get_chan_reg(dmic_data->dmic_channel); in mt8365_dai_enable_dmic()
85 regmap_update_bits(afe->regmap, reg, val_mask, val_mask); in mt8365_dai_enable_dmic()
92 struct mt8365_afe_private *afe_priv = afe->platform_priv; in mt8365_dai_disable_dmic()
93 struct mt8365_dmic_data *dmic_data = afe_priv->dai_priv[MT8365_AFE_IO_DMIC]; in mt8365_dai_disable_dmic()
95 int reg = get_chan_reg(dmic_data->dmic_channel); in mt8365_dai_disable_dmic()
100 dev_dbg(afe->dev, "%s dmic_channel %d\n", __func__, dmic_data->dmic_channel); in mt8365_dai_disable_dmic()
108 regmap_update_bits(afe->regmap, reg, mask, 0); in mt8365_dai_disable_dmic()
115 struct mt8365_afe_private *afe_priv = afe->platform_priv; in mt8365_dai_configure_dmic()
116 struct mt8365_dmic_data *dmic_data = afe_priv->dai_priv[MT8365_AFE_IO_DMIC]; in mt8365_dai_configure_dmic()
117 bool two_wire_mode = dmic_data->two_wire_mode; in mt8365_dai_configure_dmic()
118 unsigned int clk_phase_sel_ch1 = dmic_data->clk_phase_sel_ch1; in mt8365_dai_configure_dmic()
119 unsigned int clk_phase_sel_ch2 = dmic_data->clk_phase_sel_ch2; in mt8365_dai_configure_dmic()
121 unsigned int rate = dai->symmetric_rate; in mt8365_dai_configure_dmic()
122 int reg = get_chan_reg(dai->symmetric_channels); in mt8365_dai_configure_dmic()
125 return -EINVAL; in mt8365_dai_configure_dmic()
127 dmic_data->dmic_channel = dai->symmetric_channels; in mt8365_dai_configure_dmic()
154 return -EINVAL; in mt8365_dai_configure_dmic()
157 regmap_update_bits(afe->regmap, reg, DMIC_TOP_CON_CONFIG_MASK, val); in mt8365_dai_configure_dmic()
215 .name = "DMIC",
218 .stream_name = "DMIC Capture",
233 /* Values for 48kHz mode */
241 SOC_SINGLE("DMIC IIR Switch", AFE_DMIC0_UL_SRC_CON0, DMIC_TOP_CON_IIR_ON, 1, 0),
242 SOC_ENUM("DMIC IIR Mode", iir_mode),
248 SND_SOC_DAPM_INPUT("DMIC In"),
254 {"I14", NULL, "DMIC Capture"},
255 {"I15", NULL, "DMIC Capture"},
256 {"I16", NULL, "DMIC Capture"},
257 {"I17", NULL, "DMIC Capture"},
258 {"I18", NULL, "DMIC Capture"},
259 {"I19", NULL, "DMIC Capture"},
260 {"I20", NULL, "DMIC Capture"},
261 {"I21", NULL, "DMIC Capture"},
262 {"DMIC Capture", NULL, "DMIC In"},
267 struct mt8365_afe_private *afe_priv = afe->platform_priv; in init_dmic_priv_data()
269 struct device_node *np = afe->dev->of_node; in init_dmic_priv_data()
273 dmic_priv = devm_kzalloc(afe->dev, sizeof(*dmic_priv), GFP_KERNEL); in init_dmic_priv_data()
275 return -ENOMEM; in init_dmic_priv_data()
277 ret = of_property_read_u32_array(np, "mediatek,dmic-mode", in init_dmic_priv_data()
281 dmic_priv->two_wire_mode = !!temps[0]; in init_dmic_priv_data()
283 if (!dmic_priv->two_wire_mode) { in init_dmic_priv_data()
284 dmic_priv->clk_phase_sel_ch1 = 0; in init_dmic_priv_data()
285 dmic_priv->clk_phase_sel_ch2 = 4; in init_dmic_priv_data()
288 afe_priv->dai_priv[MT8365_AFE_IO_DMIC] = dmic_priv; in init_dmic_priv_data()
296 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL); in mt8365_dai_dmic_register()
298 return -ENOMEM; in mt8365_dai_dmic_register()
300 list_add(&dai->list, &afe->sub_dais); in mt8365_dai_dmic_register()
301 dai->dai_drivers = mtk_dai_dmic_driver; in mt8365_dai_dmic_register()
302 dai->num_dai_drivers = ARRAY_SIZE(mtk_dai_dmic_driver); in mt8365_dai_dmic_register()
303 dai->controls = mtk_dai_dmic_controls; in mt8365_dai_dmic_register()
304 dai->num_controls = ARRAY_SIZE(mtk_dai_dmic_controls); in mt8365_dai_dmic_register()
305 dai->dapm_widgets = mtk_dai_dmic_widgets; in mt8365_dai_dmic_register()
306 dai->num_dapm_widgets = ARRAY_SIZE(mtk_dai_dmic_widgets); in mt8365_dai_dmic_register()
307 dai->dapm_routes = mtk_dai_dmic_routes; in mt8365_dai_dmic_register()
308 dai->num_dapm_routes = ARRAY_SIZE(mtk_dai_dmic_routes); in mt8365_dai_dmic_register()