Lines Matching defs:afe

18 #include "mt8365-afe-common.h"
19 #include "mt8365-afe-clk.h"
21 #include "../common/mtk-base-afe.h"
22 #include "../common/mtk-afe-platform-driver.h"
23 #include "../common/mtk-afe-fe-dai.h"
190 int mt8365_dai_set_priv(struct mtk_base_afe *afe, int id,
193 struct mt8365_afe_private *afe_priv = afe->platform_priv;
196 temp_data = devm_kzalloc(afe->dev, priv_size, GFP_KERNEL);
208 static int mt8365_afe_irq_direction_enable(struct mtk_base_afe *afe,
216 irq = &afe->irqs[irq_id];
219 regmap_update_bits(afe->regmap, AFE_IRQ_MCU_DSP_EN,
222 regmap_update_bits(afe->regmap, AFE_IRQ_MCU_EN,
226 regmap_update_bits(afe->regmap, AFE_IRQ_MCU_DSP_EN,
229 regmap_update_bits(afe->regmap, AFE_IRQ_MCU_EN,
233 regmap_update_bits(afe->regmap, AFE_IRQ_MCU_DSP_EN,
236 regmap_update_bits(afe->regmap, AFE_IRQ_MCU_EN,
272 static int mt8365_afe_cm2_mux_conn(struct mtk_base_afe *afe)
274 struct mt8365_afe_private *afe_priv = afe->platform_priv;
278 regmap_update_bits(afe->regmap, AFE_CM2_CONN0,
281 regmap_update_bits(afe->regmap, AFE_CM2_CONN0,
284 regmap_update_bits(afe->regmap, AFE_CM2_CONN0,
287 regmap_update_bits(afe->regmap, AFE_CM2_CONN0,
290 regmap_update_bits(afe->regmap, AFE_CM2_CONN0,
293 regmap_update_bits(afe->regmap, AFE_CM2_CONN0,
296 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
299 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
305 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
308 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
312 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
315 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
319 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
322 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
325 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
328 regmap_update_bits(afe->regmap, AFE_CM2_CONN1,
331 regmap_update_bits(afe->regmap, AFE_CM2_CONN2,
334 regmap_update_bits(afe->regmap, AFE_CM2_CONN2,
337 regmap_update_bits(afe->regmap, AFE_CM2_CONN2,
340 regmap_update_bits(afe->regmap, AFE_CM2_CONN2,
344 dev_err(afe->dev, "%s wrong CM2 input %d\n", __func__, input);
351 static int mt8365_afe_get_cm_update_cnt(struct mtk_base_afe *afe,
396 regmap_update_bits(afe->regmap, cm_ctrl_reg[cmNum].con4,
403 regmap_update_bits(afe->regmap, cm_ctrl_reg[cmNum].con4,
410 regmap_update_bits(afe->regmap, cm_ctrl_reg[cmNum].con3,
417 regmap_update_bits(afe->regmap, cm_ctrl_reg[cmNum].con3,
424 regmap_update_bits(afe->regmap, cm_ctrl_reg[cmNum].con2,
431 regmap_update_bits(afe->regmap, cm_ctrl_reg[cmNum].con2,
438 regmap_update_bits(afe->regmap, cm_ctrl_reg[cmNum].con1,
445 regmap_update_bits(afe->regmap, cm_ctrl_reg[cmNum].con1,
456 static int mt8365_afe_configure_cm(struct mtk_base_afe *afe,
487 mt8365_afe_cm2_mux_conn(afe);
492 regmap_update_bits(afe->regmap, cm_ctrl_reg[cmNum].con0, mask, val);
494 mt8365_afe_get_cm_update_cnt(afe, cmNum, rate, channels);
503 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
506 struct mtk_base_afe_memif *memif = &afe->memif[memif_num];
514 snd_soc_set_runtime_hwparams(substream, afe->mtk_afe_hardware);
518 dev_err(afe->dev, "snd_pcm_hw_constraint_integer failed\n");
520 mt8365_afe_enable_main_clk(afe);
528 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
530 struct mtk_base_afe_memif *memif = &afe->memif[memif_num];
534 mt8365_afe_disable_main_clk(afe);
542 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
543 struct mt8365_afe_private *afe_priv = afe->platform_priv;
546 struct mtk_base_afe_memif *memif = &afe->memif[dai_id];
554 dev_info(afe->dev, "%s %s period = %d rate = %d channels = %d\n",
561 mt8365_afe_configure_cm(afe, MT8365_CM1,
564 regmap_update_bits(afe->regmap, AFE_CM1_CON0,
570 mt8365_afe_configure_cm(afe, MT8365_CM2,
573 regmap_update_bits(afe->regmap, AFE_CM2_CON0,
583 dev_err(afe->dev,
591 mt8365_afe_emi_clk_on(afe);
609 regmap_write(afe->regmap, memif->data->reg_ofs_base,
612 regmap_write(afe->regmap,
621 dev_info(afe->dev, "%s mono_reg is NULL\n", __func__);
623 regmap_update_bits(afe->regmap, memif->data->mono_reg,
632 fs = afe->memif_fs(substream, params_rate(params));
638 dev_info(afe->dev, "%s fs_reg is NULL\n", __func__);
640 regmap_update_bits(afe->regmap, memif->data->fs_reg,
651 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
652 struct mt8365_afe_private *afe_priv = afe->platform_priv;
662 mt8365_afe_emi_clk_off(afe);
672 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
674 struct mtk_base_afe_memif *memif = &afe->memif[dai_id];
680 regmap_update_bits(afe->regmap, memif->data->hd_reg,
685 regmap_update_bits(afe->regmap, memif->data->hd_reg,
690 regmap_update_bits(afe->regmap,
694 regmap_update_bits(afe->regmap,
701 regmap_update_bits(afe->regmap, memif->data->hd_reg,
710 mt8365_afe_irq_direction_enable(afe, memif->irq_usage,
720 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
721 struct mt8365_afe_private *afe_priv = afe->platform_priv;
731 regmap_update_bits(afe->regmap, AFE_CM1_CON0,
735 regmap_update_bits(afe->regmap, AFE_CM2_CON0,
744 regmap_update_bits(afe->regmap, AFE_CM1_CON0,
748 regmap_update_bits(afe->regmap, AFE_CM2_CON0,
762 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
764 mt8365_afe_enable_main_clk(afe);
771 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
772 struct mt8365_afe_private *afe_priv = afe->platform_priv;
777 regmap_update_bits(afe->regmap, AFE_GAIN1_CON0,
781 mt8365_afe_disable_main_clk(afe);
787 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
788 struct mt8365_afe_private *afe_priv = afe->platform_priv;
796 dev_info(afe->dev, "%s prepared already\n", __func__);
801 regmap_update_bits(afe->regmap, AFE_GAIN1_CON0,
804 regmap_read(afe->regmap, AFE_GAIN1_CON1, &val1);
805 regmap_read(afe->regmap, AFE_GAIN1_CUR, &val2);
807 regmap_update_bits(afe->regmap, AFE_GAIN1_CUR,
810 regmap_update_bits(afe->regmap, AFE_GAIN1_CON0,
832 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
841 dev_err(afe->dev, "snd_pcm_hw_constraint_integer failed\n");
1262 struct mtk_base_afe *afe = snd_soc_component_get_drvdata(comp);
1263 struct mt8365_afe_private *afe_priv = afe->platform_priv;
1915 struct mtk_base_afe *afe = dev_id;
1920 ret = regmap_read(afe->regmap, AFE_IRQ_MCU_STATUS, &reg_value);
1922 dev_err_ratelimited(afe->dev, "%s irq status err\n", __func__);
1927 ret = regmap_read(afe->regmap, AFE_IRQ_MCU_EN, &mcu_irq_mask);
1929 dev_err_ratelimited(afe->dev, "%s irq mcu_en err\n", __func__);
1938 struct mtk_base_afe_memif *memif = &afe->memif[i];
1944 mcu_irq = &afe->irqs[memif->irq_usage];
1954 regmap_write(afe->regmap, AFE_IRQ_MCU_CLR,
1972 struct mtk_base_afe *afe = dev_get_drvdata(dev);
1973 struct regmap *regmap = afe->regmap;
1976 mt8365_afe_enable_main_clk(afe);
1978 if (!afe->reg_back_up)
1979 afe->reg_back_up =
1980 devm_kcalloc(dev, afe->reg_back_up_list_num,
1983 for (i = 0; i < afe->reg_back_up_list_num; i++)
1984 regmap_read(regmap, afe->reg_back_up_list[i],
1985 &afe->reg_back_up[i]);
1987 mt8365_afe_disable_main_clk(afe);
1994 struct mtk_base_afe *afe = dev_get_drvdata(dev);
1995 struct regmap *regmap = afe->regmap;
1998 if (!afe->reg_back_up)
2001 mt8365_afe_enable_main_clk(afe);
2003 for (i = 0; i < afe->reg_back_up_list_num; i++)
2004 regmap_write(regmap, afe->reg_back_up_list[i],
2005 afe->reg_back_up[i]);
2007 mt8365_afe_disable_main_clk(afe);
2014 struct mtk_base_afe *afe = dev_get_drvdata(dev);
2016 if (pm_runtime_status_suspended(dev) || afe->suspended)
2020 afe->suspended = true;
2026 struct mtk_base_afe *afe = dev_get_drvdata(dev);
2028 if (pm_runtime_status_suspended(dev) || !afe->suspended)
2032 afe->suspended = false;
2036 static int mt8365_afe_init_registers(struct mtk_base_afe *afe)
2049 mt8365_afe_enable_main_clk(afe);
2052 regmap_update_bits(afe->regmap, init_regs[i].reg,
2055 mt8365_afe_disable_main_clk(afe);
2060 static int mt8365_dai_memif_register(struct mtk_base_afe *afe)
2064 dai = devm_kzalloc(afe->dev, sizeof(*dai), GFP_KERNEL);
2068 list_add(&dai->list, &afe->sub_dais);
2091 struct mtk_base_afe *afe;
2098 afe = devm_kzalloc(&pdev->dev, sizeof(*afe), GFP_KERNEL);
2099 if (!afe)
2101 platform_set_drvdata(pdev, afe);
2103 afe->platform_priv = devm_kzalloc(&pdev->dev, sizeof(*afe_priv),
2105 if (!afe->platform_priv)
2108 afe_priv = afe->platform_priv;
2109 afe->dev = &pdev->dev;
2110 dev = afe->dev;
2116 afe->base_addr = devm_ioremap_resource(&pdev->dev, res);
2117 if (IS_ERR(afe->base_addr))
2118 return PTR_ERR(afe->base_addr);
2131 ret = mt8365_afe_init_audio_clk(afe);
2133 return dev_err_probe(afe->dev, ret, "mt8365_afe_init_audio_clk fail\n");
2135 afe->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "top_audio_sel",
2136 afe->base_addr,
2138 if (IS_ERR(afe->regmap))
2139 return PTR_ERR(afe->regmap);
2142 afe->memif_size = MT8365_AFE_MEMIF_NUM;
2143 afe->memif = devm_kcalloc(afe->dev, afe->memif_size,
2144 sizeof(*afe->memif), GFP_KERNEL);
2145 if (!afe->memif)
2148 afe->irqs_size = MT8365_AFE_IRQ_NUM;
2149 afe->irqs = devm_kcalloc(afe->dev, afe->irqs_size,
2150 sizeof(*afe->irqs), GFP_KERNEL);
2151 if (!afe->irqs)
2154 for (i = 0; i < afe->irqs_size; i++)
2155 afe->irqs[i].irq_data = &irq_data[i];
2162 ret = devm_request_irq(afe->dev, irq_id, mt8365_afe_irq_handler,
2163 0, "Afe_ISR_Handle", (void *)afe);
2165 return dev_err_probe(afe->dev, ret, "could not request_irq\n");
2168 INIT_LIST_HEAD(&afe->sub_dais);
2171 ret = dai_register_cbs[i](afe);
2173 dev_warn(afe->dev, "dai register i %d fail, ret %d\n",
2180 ret = mtk_afe_combine_sub_dai(afe);
2182 dev_warn(afe->dev, "mtk_afe_combine_sub_dai fail, ret %d\n",
2187 for (i = 0; i < afe->memif_size; i++) {
2188 afe->memif[i].data = &memif_data[i];
2191 afe->memif[i].irq_usage = sel_irq;
2192 afe->memif[i].const_irq = 1;
2193 afe->irqs[sel_irq].irq_occupyed = true;
2195 afe->memif[i].irq_usage = -1;
2199 afe->mtk_afe_hardware = &mt8365_afe_hardware;
2200 afe->memif_fs = mt8365_memif_fs;
2201 afe->irq_fs = mt8365_irq_fs;
2208 afe->reg_back_up_list = mt8365_afe_backup_list;
2209 afe->reg_back_up_list_num = ARRAY_SIZE(mt8365_afe_backup_list);
2210 afe->runtime_resume = mt8365_afe_runtime_resume;
2211 afe->runtime_suspend = mt8365_afe_runtime_suspend;
2213 /* open afe pdn for dapm read/write audio register */
2214 mt8365_afe_enable_top_cg(afe, MT8365_TOP_CG_AFE);
2217 mt8365_afe_set_clk_parent(afe,
2223 afe->dai_drivers,
2224 afe->num_dai_drivers);
2230 mt8365_afe_init_registers(afe);
2237 struct mtk_base_afe *afe = platform_get_drvdata(pdev);
2239 mt8365_afe_disable_top_cg(afe, MT8365_TOP_CG_AFE);
2247 { .compatible = "mediatek,mt8365-afe-pcm", },
2260 .name = "mt8365-afe-pcm",