From 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 02:46:07 +0000 Subject: [PATCH] add audio --- kernel/sound/soc/rockchip/rockchip_multicodecs.c | 30 +++++++++++++++++++++--------- 1 files changed, 21 insertions(+), 9 deletions(-) diff --git a/kernel/sound/soc/rockchip/rockchip_multicodecs.c b/kernel/sound/soc/rockchip/rockchip_multicodecs.c index 8b1cb5f..f7982ad 100644 --- a/kernel/sound/soc/rockchip/rockchip_multicodecs.c +++ b/kernel/sound/soc/rockchip/rockchip_multicodecs.c @@ -336,8 +336,8 @@ static int rk_multicodecs_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { - struct snd_soc_pcm_runtime *rtd = substream->private_data; - struct snd_soc_dai *cpu_dai = rtd->cpu_dai; + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); + struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0); struct snd_soc_dai *codec_dai; struct multicodecs_data *mc_data = snd_soc_card_get_drvdata(rtd->card); unsigned int mclk; @@ -345,8 +345,7 @@ mclk = params_rate(params) * mc_data->mclk_fs; - for (i = 0; i < rtd->num_codecs; i++) { - codec_dai = rtd->codec_dais[i]; + for_each_rtd_codec_dais(rtd, i, codec_dai) { ret = snd_soc_dai_set_sysclk(codec_dai, substream->stream, mclk, SND_SOC_CLOCK_IN); if (ret && ret != -ENOTSUPP) { @@ -437,8 +436,7 @@ int i; /* set jack for the first successful one */ - for (i = 0; i < rtd->num_codecs; i++) { - codec_dai = rtd->codec_dais[i]; + for_each_rtd_codec_dais(rtd, i, codec_dai) { ret = snd_soc_component_set_jack(codec_dai->component, jack_headset, NULL); if (ret >= 0) @@ -584,6 +582,8 @@ struct snd_soc_card *card; struct device_node *np = pdev->dev.of_node; struct snd_soc_dai_link *link; + struct snd_soc_dai_link_component *cpus; + struct snd_soc_dai_link_component *platforms; struct snd_soc_dai_link_component *codecs; struct multicodecs_data *mc_data; struct of_phandle_args args; @@ -604,6 +604,14 @@ if (!mc_data) return -ENOMEM; + cpus = devm_kzalloc(&pdev->dev, sizeof(*cpus), GFP_KERNEL); + if (!cpus) + return -ENOMEM; + + platforms = devm_kzalloc(&pdev->dev, sizeof(*platforms), GFP_KERNEL); + if (!platforms) + return -ENOMEM; + card = &mc_data->snd_card; card->dev = &pdev->dev; @@ -617,6 +625,10 @@ link->stream_name = link->name; link->init = rk_dailink_init; link->ops = &rk_ops; + link->cpus = cpus; + link->platforms = platforms; + link->num_cpus = 1; + link->num_platforms = 1; link->ignore_pmdown_time = 1; card->dai_link = link; @@ -673,11 +685,11 @@ /* Only reference the codecs[0].of_node which maybe as master. */ rk_multicodecs_parse_daifmt(np, codecs[0].of_node, mc_data, prefix); - link->cpu_of_node = of_parse_phandle(np, "rockchip,cpu", 0); - if (!link->cpu_of_node) + link->cpus->of_node = of_parse_phandle(np, "rockchip,cpu", 0); + if (!link->cpus->of_node) return -ENODEV; - link->platform_of_node = link->cpu_of_node; + link->platforms->of_node = link->cpus->of_node; mc_data->mclk_fs = DEFAULT_MCLK_FS; if (!of_property_read_u32(np, "rockchip,mclk-fs", &val)) -- Gitblit v1.6.2