hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/sound/soc/samsung/snow.c
....@@ -1,15 +1,6 @@
1
-/*
2
- * ASoC machine driver for Snow boards
3
- *
4
- * This program is free software; you can redistribute it and/or
5
- * modify it under the terms of the GNU General Public License
6
- * version 2 as published by the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope that it will be useful, but
9
- * WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
- * General Public License for more details.
12
- */
1
+// SPDX-License-Identifier: GPL-2.0
2
+//
3
+// ASoC machine driver for Snow boards
134
145 #include <linux/clk.h>
156 #include <linux/module.h>
....@@ -23,6 +14,11 @@
2314
2415 #define FIN_PLL_RATE 24000000
2516
17
+SND_SOC_DAILINK_DEFS(links,
18
+ DAILINK_COMP_ARRAY(COMP_EMPTY()),
19
+ DAILINK_COMP_ARRAY(COMP_EMPTY()),
20
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
21
+
2622 struct snow_priv {
2723 struct snd_soc_dai_link dai_link;
2824 struct clk *clk_i2s_bus;
....@@ -34,7 +30,7 @@
3430 static const unsigned int pll_rate[] = {
3531 73728000U, 67737602U, 49152000U, 45158401U, 32768001U
3632 };
37
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
33
+ struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
3834 struct snow_priv *priv = snd_soc_card_get_drvdata(rtd->card);
3935 int bfs, psr, rfs, bitwidth;
4036 unsigned long int rclk;
....@@ -110,13 +106,13 @@
110106 struct snd_soc_pcm_runtime *rtd;
111107 struct snd_soc_dai *codec_dai;
112108
113
- rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
109
+ rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]);
114110
115111 /* In the multi-codec case codec_dais 0 is MAX98095 and 1 is HDMI. */
116112 if (rtd->num_codecs > 1)
117
- codec_dai = rtd->codec_dais[0];
113
+ codec_dai = asoc_rtd_to_codec(rtd, 0);
118114 else
119
- codec_dai = rtd->codec_dai;
115
+ codec_dai = asoc_rtd_to_codec(rtd, 0);
120116
121117 /* Set the MCLK rate for the codec */
122118 return snd_soc_dai_set_sysclk(codec_dai, 0,
....@@ -150,6 +146,13 @@
150146 link->name = "Primary";
151147 link->stream_name = link->name;
152148
149
+ link->cpus = links_cpus;
150
+ link->num_cpus = ARRAY_SIZE(links_cpus);
151
+ link->codecs = links_codecs;
152
+ link->num_codecs = ARRAY_SIZE(links_codecs);
153
+ link->platforms = links_platforms;
154
+ link->num_platforms = ARRAY_SIZE(links_platforms);
155
+
153156 card->dai_link = link;
154157 card->num_links = 1;
155158 card->dev = dev;
....@@ -160,10 +163,10 @@
160163 if (cpu) {
161164 link->ops = &snow_card_ops;
162165
163
- link->cpu_of_node = of_parse_phandle(cpu, "sound-dai", 0);
166
+ link->cpus->of_node = of_parse_phandle(cpu, "sound-dai", 0);
164167 of_node_put(cpu);
165168
166
- if (!link->cpu_of_node) {
169
+ if (!link->cpus->of_node) {
167170 dev_err(dev, "Failed parsing cpu/sound-dai property\n");
168171 return -EINVAL;
169172 }
....@@ -173,38 +176,38 @@
173176 of_node_put(codec);
174177
175178 if (ret < 0) {
176
- of_node_put(link->cpu_of_node);
179
+ of_node_put(link->cpus->of_node);
177180 dev_err(dev, "Failed parsing codec node\n");
178181 return ret;
179182 }
180183
181
- priv->clk_i2s_bus = of_clk_get_by_name(link->cpu_of_node,
184
+ priv->clk_i2s_bus = of_clk_get_by_name(link->cpus->of_node,
182185 "i2s_opclk0");
183186 if (IS_ERR(priv->clk_i2s_bus)) {
184187 snd_soc_of_put_dai_link_codecs(link);
185
- of_node_put(link->cpu_of_node);
188
+ of_node_put(link->cpus->of_node);
186189 return PTR_ERR(priv->clk_i2s_bus);
187190 }
188191 } else {
189
- link->codec_dai_name = "HiFi",
192
+ link->codecs->dai_name = "HiFi",
190193
191
- link->cpu_of_node = of_parse_phandle(dev->of_node,
194
+ link->cpus->of_node = of_parse_phandle(dev->of_node,
192195 "samsung,i2s-controller", 0);
193
- if (!link->cpu_of_node) {
196
+ if (!link->cpus->of_node) {
194197 dev_err(dev, "i2s-controller property parse error\n");
195198 return -EINVAL;
196199 }
197200
198
- link->codec_of_node = of_parse_phandle(dev->of_node,
201
+ link->codecs->of_node = of_parse_phandle(dev->of_node,
199202 "samsung,audio-codec", 0);
200
- if (!link->codec_of_node) {
201
- of_node_put(link->cpu_of_node);
203
+ if (!link->codecs->of_node) {
204
+ of_node_put(link->cpus->of_node);
202205 dev_err(dev, "audio-codec property parse error\n");
203206 return -EINVAL;
204207 }
205208 }
206209
207
- link->platform_of_node = link->cpu_of_node;
210
+ link->platforms->of_node = link->cpus->of_node;
208211
209212 /* Update card-name if provided through DT, else use default name */
210213 snd_soc_of_parse_card_name(card, "samsung,model");
....@@ -212,10 +215,9 @@
212215 snd_soc_card_set_drvdata(card, priv);
213216
214217 ret = devm_snd_soc_register_card(dev, card);
215
- if (ret) {
216
- dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret);
217
- return ret;
218
- }
218
+ if (ret)
219
+ return dev_err_probe(&pdev->dev, ret,
220
+ "snd_soc_register_card failed\n");
219221
220222 return ret;
221223 }
....@@ -225,8 +227,8 @@
225227 struct snow_priv *priv = platform_get_drvdata(pdev);
226228 struct snd_soc_dai_link *link = &priv->dai_link;
227229
228
- of_node_put(link->cpu_of_node);
229
- of_node_put(link->codec_of_node);
230
+ of_node_put(link->cpus->of_node);
231
+ of_node_put(link->codecs->of_node);
230232 snd_soc_of_put_dai_link_codecs(link);
231233
232234 clk_put(priv->clk_i2s_bus);