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