Lines Matching refs:afe

196 static int mt8173_afe_set_i2s(struct mtk_base_afe *afe, unsigned int rate)  in mt8173_afe_set_i2s()  argument
205 regmap_update_bits(afe->regmap, AFE_ADDA_TOP_CON0, 0x1, 0x1); in mt8173_afe_set_i2s()
206 regmap_update_bits(afe->regmap, AFE_ADDA2_TOP_CON0, 0x1, 0x1); in mt8173_afe_set_i2s()
213 regmap_update_bits(afe->regmap, AFE_I2S_CON2, ~AFE_I2S_CON2_EN, val); in mt8173_afe_set_i2s()
220 regmap_update_bits(afe->regmap, AFE_I2S_CON1, ~AFE_I2S_CON1_EN, val); in mt8173_afe_set_i2s()
224 static void mt8173_afe_set_i2s_enable(struct mtk_base_afe *afe, bool enable) in mt8173_afe_set_i2s_enable() argument
228 regmap_read(afe->regmap, AFE_I2S_CON2, &val); in mt8173_afe_set_i2s_enable()
233 regmap_update_bits(afe->regmap, AFE_I2S_CON2, 0x1, enable); in mt8173_afe_set_i2s_enable()
236 regmap_update_bits(afe->regmap, AFE_I2S_CON1, 0x1, enable); in mt8173_afe_set_i2s_enable()
239 static int mt8173_afe_dais_enable_clks(struct mtk_base_afe *afe, in mt8173_afe_dais_enable_clks() argument
247 dev_err(afe->dev, "Failed to enable m_ck\n"); in mt8173_afe_dais_enable_clks()
255 dev_err(afe->dev, "Failed to enable b_ck\n"); in mt8173_afe_dais_enable_clks()
262 static int mt8173_afe_dais_set_clks(struct mtk_base_afe *afe, in mt8173_afe_dais_set_clks() argument
271 dev_err(afe->dev, "Failed to set m_ck rate\n"); in mt8173_afe_dais_set_clks()
279 dev_err(afe->dev, "Failed to set b_ck rate\n"); in mt8173_afe_dais_set_clks()
286 static void mt8173_afe_dais_disable_clks(struct mtk_base_afe *afe, in mt8173_afe_dais_disable_clks() argument
298 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); in mt8173_afe_i2s_startup() local
303 regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, in mt8173_afe_i2s_startup()
311 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); in mt8173_afe_i2s_shutdown() local
316 mt8173_afe_set_i2s_enable(afe, false); in mt8173_afe_i2s_shutdown()
317 regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, in mt8173_afe_i2s_shutdown()
326 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); in mt8173_afe_i2s_prepare() local
327 struct mt8173_afe_private *afe_priv = afe->platform_priv; in mt8173_afe_i2s_prepare()
330 mt8173_afe_dais_set_clks(afe, afe_priv->clocks[MT8173_CLK_I2S1_M], in mt8173_afe_i2s_prepare()
332 mt8173_afe_dais_set_clks(afe, afe_priv->clocks[MT8173_CLK_I2S2_M], in mt8173_afe_i2s_prepare()
335 ret = mt8173_afe_set_i2s(afe, substream->runtime->rate); in mt8173_afe_i2s_prepare()
339 mt8173_afe_set_i2s_enable(afe, true); in mt8173_afe_i2s_prepare()
347 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); in mt8173_afe_hdmi_startup() local
348 struct mt8173_afe_private *afe_priv = afe->platform_priv; in mt8173_afe_hdmi_startup()
353 mt8173_afe_dais_enable_clks(afe, afe_priv->clocks[MT8173_CLK_I2S3_M], in mt8173_afe_hdmi_startup()
361 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); in mt8173_afe_hdmi_shutdown() local
362 struct mt8173_afe_private *afe_priv = afe->platform_priv; in mt8173_afe_hdmi_shutdown()
367 mt8173_afe_dais_disable_clks(afe, afe_priv->clocks[MT8173_CLK_I2S3_M], in mt8173_afe_hdmi_shutdown()
375 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); in mt8173_afe_hdmi_prepare() local
376 struct mt8173_afe_private *afe_priv = afe->platform_priv; in mt8173_afe_hdmi_prepare()
380 mt8173_afe_dais_set_clks(afe, afe_priv->clocks[MT8173_CLK_I2S3_M], in mt8173_afe_hdmi_prepare()
392 regmap_update_bits(afe->regmap, AFE_TDM_CON1, ~AFE_TDM_CON1_EN, val); in mt8173_afe_hdmi_prepare()
427 regmap_update_bits(afe->regmap, AFE_TDM_CON2, 0x0000ffff, val); in mt8173_afe_hdmi_prepare()
429 regmap_update_bits(afe->regmap, AFE_HDMI_OUT_CON0, in mt8173_afe_hdmi_prepare()
437 struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai); in mt8173_afe_hdmi_trigger() local
439 dev_info(afe->dev, "%s cmd=%d %s\n", __func__, cmd, dai->name); in mt8173_afe_hdmi_trigger()
444 regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, in mt8173_afe_hdmi_trigger()
448 regmap_write(afe->regmap, AFE_HDMI_CONN0, in mt8173_afe_hdmi_trigger()
459 regmap_update_bits(afe->regmap, AFE_HDMI_OUT_CON0, 0x1, 0x1); in mt8173_afe_hdmi_trigger()
462 regmap_update_bits(afe->regmap, AFE_TDM_CON1, 0x1, 0x1); in mt8173_afe_hdmi_trigger()
468 regmap_update_bits(afe->regmap, AFE_TDM_CON1, 0x1, 0); in mt8173_afe_hdmi_trigger()
471 regmap_update_bits(afe->regmap, AFE_HDMI_OUT_CON0, 0x1, 0); in mt8173_afe_hdmi_trigger()
473 regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, in mt8173_afe_hdmi_trigger()
487 struct mtk_base_afe *afe = snd_soc_component_get_drvdata(component); in mt8173_memif_fs() local
488 struct mtk_base_afe_memif *memif = &afe->memif[asoc_rtd_to_cpu(rtd, 0)->id]; in mt8173_memif_fs()
916 struct mtk_base_afe *afe = dev_id; in mt8173_afe_irq_handler() local
920 ret = regmap_read(afe->regmap, AFE_IRQ_STATUS, &reg_value); in mt8173_afe_irq_handler()
922 dev_err(afe->dev, "%s irq status err\n", __func__); in mt8173_afe_irq_handler()
928 struct mtk_base_afe_memif *memif = &afe->memif[i]; in mt8173_afe_irq_handler()
934 irq = &afe->irqs[memif->irq_usage]; in mt8173_afe_irq_handler()
944 regmap_write(afe->regmap, AFE_IRQ_CLR, in mt8173_afe_irq_handler()
952 struct mtk_base_afe *afe = dev_get_drvdata(dev); in mt8173_afe_runtime_suspend() local
953 struct mt8173_afe_private *afe_priv = afe->platform_priv; in mt8173_afe_runtime_suspend()
956 regmap_update_bits(afe->regmap, AFE_DAC_CON0, 0x1, 0); in mt8173_afe_runtime_suspend()
959 regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, in mt8173_afe_runtime_suspend()
974 struct mtk_base_afe *afe = dev_get_drvdata(dev); in mt8173_afe_runtime_resume() local
975 struct mt8173_afe_private *afe_priv = afe->platform_priv; in mt8173_afe_runtime_resume()
1005 regmap_update_bits(afe->regmap, AUDIO_TOP_CON0, AUD_TCON0_PDN_AFE, 0); in mt8173_afe_runtime_resume()
1008 regmap_update_bits(afe->regmap, AFE_CONN_24BIT, in mt8173_afe_runtime_resume()
1012 regmap_update_bits(afe->regmap, AFE_IRQ_MCU_EN, 0xff, 0xff); in mt8173_afe_runtime_resume()
1015 regmap_update_bits(afe->regmap, AFE_DAC_CON0, 0x1, 0x1); in mt8173_afe_runtime_resume()
1033 static int mt8173_afe_init_audio_clk(struct mtk_base_afe *afe) in mt8173_afe_init_audio_clk() argument
1036 struct mt8173_afe_private *afe_priv = afe->platform_priv; in mt8173_afe_init_audio_clk()
1039 afe_priv->clocks[i] = devm_clk_get(afe->dev, aud_clks[i]); in mt8173_afe_init_audio_clk()
1041 dev_err(afe->dev, "%s devm_clk_get %s fail\n", in mt8173_afe_init_audio_clk()
1055 struct mtk_base_afe *afe; in mt8173_afe_pcm_dev_probe() local
1062 afe = devm_kzalloc(&pdev->dev, sizeof(*afe), GFP_KERNEL); in mt8173_afe_pcm_dev_probe()
1063 if (!afe) in mt8173_afe_pcm_dev_probe()
1066 afe->platform_priv = devm_kzalloc(&pdev->dev, sizeof(*afe_priv), in mt8173_afe_pcm_dev_probe()
1068 afe_priv = afe->platform_priv; in mt8173_afe_pcm_dev_probe()
1072 afe->dev = &pdev->dev; in mt8173_afe_pcm_dev_probe()
1077 ret = devm_request_irq(afe->dev, irq_id, mt8173_afe_irq_handler, in mt8173_afe_pcm_dev_probe()
1078 0, "Afe_ISR_Handle", (void *)afe); in mt8173_afe_pcm_dev_probe()
1080 dev_err(afe->dev, "could not request_irq\n"); in mt8173_afe_pcm_dev_probe()
1084 afe->base_addr = devm_platform_ioremap_resource(pdev, 0); in mt8173_afe_pcm_dev_probe()
1085 if (IS_ERR(afe->base_addr)) in mt8173_afe_pcm_dev_probe()
1086 return PTR_ERR(afe->base_addr); in mt8173_afe_pcm_dev_probe()
1088 afe->regmap = devm_regmap_init_mmio(&pdev->dev, afe->base_addr, in mt8173_afe_pcm_dev_probe()
1090 if (IS_ERR(afe->regmap)) in mt8173_afe_pcm_dev_probe()
1091 return PTR_ERR(afe->regmap); in mt8173_afe_pcm_dev_probe()
1094 ret = mt8173_afe_init_audio_clk(afe); in mt8173_afe_pcm_dev_probe()
1096 dev_err(afe->dev, "mt8173_afe_init_audio_clk fail\n"); in mt8173_afe_pcm_dev_probe()
1101 afe->memif_size = MT8173_AFE_MEMIF_NUM; in mt8173_afe_pcm_dev_probe()
1102 afe->memif = devm_kcalloc(afe->dev, afe->memif_size, in mt8173_afe_pcm_dev_probe()
1103 sizeof(*afe->memif), GFP_KERNEL); in mt8173_afe_pcm_dev_probe()
1104 if (!afe->memif) in mt8173_afe_pcm_dev_probe()
1107 afe->irqs_size = MT8173_AFE_IRQ_NUM; in mt8173_afe_pcm_dev_probe()
1108 afe->irqs = devm_kcalloc(afe->dev, afe->irqs_size, in mt8173_afe_pcm_dev_probe()
1109 sizeof(*afe->irqs), GFP_KERNEL); in mt8173_afe_pcm_dev_probe()
1110 if (!afe->irqs) in mt8173_afe_pcm_dev_probe()
1113 for (i = 0; i < afe->irqs_size; i++) { in mt8173_afe_pcm_dev_probe()
1114 afe->memif[i].data = &memif_data[i]; in mt8173_afe_pcm_dev_probe()
1115 afe->irqs[i].irq_data = &irq_data[i]; in mt8173_afe_pcm_dev_probe()
1116 afe->irqs[i].irq_occupyed = true; in mt8173_afe_pcm_dev_probe()
1117 afe->memif[i].irq_usage = i; in mt8173_afe_pcm_dev_probe()
1118 afe->memif[i].const_irq = 1; in mt8173_afe_pcm_dev_probe()
1121 afe->mtk_afe_hardware = &mt8173_afe_hardware; in mt8173_afe_pcm_dev_probe()
1122 afe->memif_fs = mt8173_memif_fs; in mt8173_afe_pcm_dev_probe()
1123 afe->irq_fs = mt8173_irq_fs; in mt8173_afe_pcm_dev_probe()
1125 platform_set_drvdata(pdev, afe); in mt8173_afe_pcm_dev_probe()
1134 afe->reg_back_up_list = mt8173_afe_backup_list; in mt8173_afe_pcm_dev_probe()
1135 afe->reg_back_up_list_num = ARRAY_SIZE(mt8173_afe_backup_list); in mt8173_afe_pcm_dev_probe()
1136 afe->runtime_resume = mt8173_afe_runtime_resume; in mt8173_afe_pcm_dev_probe()
1137 afe->runtime_suspend = mt8173_afe_runtime_suspend; in mt8173_afe_pcm_dev_probe()