forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/sound/soc/mediatek/mt8173/mt8173-rt5650-rt5676.c
....@@ -47,12 +47,11 @@
4747 static int mt8173_rt5650_rt5676_hw_params(struct snd_pcm_substream *substream,
4848 struct snd_pcm_hw_params *params)
4949 {
50
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
50
+ struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
51
+ struct snd_soc_dai *codec_dai;
5152 int i, ret;
5253
53
- for (i = 0; i < rtd->num_codecs; i++) {
54
- struct snd_soc_dai *codec_dai = rtd->codec_dais[i];
55
-
54
+ for_each_rtd_codec_dais(rtd, i, codec_dai) {
5655 /* pll from mclk 12.288M */
5756 ret = snd_soc_dai_set_pll(codec_dai, 0, 0, MCLK_FOR_CODECS,
5857 params_rate(params) * 512);
....@@ -78,8 +77,8 @@
7877 static int mt8173_rt5650_rt5676_init(struct snd_soc_pcm_runtime *runtime)
7978 {
8079 struct snd_soc_card *card = runtime->card;
81
- struct snd_soc_component *component = runtime->codec_dais[0]->component;
82
- struct snd_soc_component *component_sub = runtime->codec_dais[1]->component;
80
+ struct snd_soc_component *component = asoc_rtd_to_codec(runtime, 0)->component;
81
+ struct snd_soc_component *component_sub = asoc_rtd_to_codec(runtime, 1)->component;
8382 int ret;
8483
8584 rt5645_sel_asrc_clk_src(component,
....@@ -112,14 +111,6 @@
112111 &mt8173_rt5650_rt5676_jack);
113112 }
114113
115
-static struct snd_soc_dai_link_component mt8173_rt5650_rt5676_codecs[] = {
116
- {
117
- .dai_name = "rt5645-aif1",
118
- },
119
- {
120
- .dai_name = "rt5677-aif1",
121
- },
122
-};
123114
124115 enum {
125116 DAI_LINK_PLAYBACK,
....@@ -130,47 +121,69 @@
130121 DAI_LINK_INTERCODEC
131122 };
132123
124
+SND_SOC_DAILINK_DEFS(playback,
125
+ DAILINK_COMP_ARRAY(COMP_CPU("DL1")),
126
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
127
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
128
+
129
+SND_SOC_DAILINK_DEFS(capture,
130
+ DAILINK_COMP_ARRAY(COMP_CPU("VUL")),
131
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
132
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
133
+
134
+SND_SOC_DAILINK_DEFS(hdmi_pcm,
135
+ DAILINK_COMP_ARRAY(COMP_CPU("HDMI")),
136
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
137
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
138
+
139
+SND_SOC_DAILINK_DEFS(codec,
140
+ DAILINK_COMP_ARRAY(COMP_CPU("I2S")),
141
+ DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "rt5645-aif1"),
142
+ COMP_CODEC(NULL, "rt5677-aif1")),
143
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
144
+
145
+SND_SOC_DAILINK_DEFS(hdmi_be,
146
+ DAILINK_COMP_ARRAY(COMP_CPU("HDMIO")),
147
+ DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "i2s-hifi")),
148
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
149
+
150
+SND_SOC_DAILINK_DEFS(intercodec,
151
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
152
+ DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "rt5677-aif2")),
153
+ DAILINK_COMP_ARRAY(COMP_DUMMY()));
154
+
133155 /* Digital audio interface glue - connects codec <---> CPU */
134156 static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = {
135157 /* Front End DAI links */
136158 [DAI_LINK_PLAYBACK] = {
137159 .name = "rt5650_rt5676 Playback",
138160 .stream_name = "rt5650_rt5676 Playback",
139
- .cpu_dai_name = "DL1",
140
- .codec_name = "snd-soc-dummy",
141
- .codec_dai_name = "snd-soc-dummy-dai",
142161 .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
143162 .dynamic = 1,
144163 .dpcm_playback = 1,
164
+ SND_SOC_DAILINK_REG(playback),
145165 },
146166 [DAI_LINK_CAPTURE] = {
147167 .name = "rt5650_rt5676 Capture",
148168 .stream_name = "rt5650_rt5676 Capture",
149
- .cpu_dai_name = "VUL",
150
- .codec_name = "snd-soc-dummy",
151
- .codec_dai_name = "snd-soc-dummy-dai",
152169 .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
153170 .dynamic = 1,
154171 .dpcm_capture = 1,
172
+ SND_SOC_DAILINK_REG(capture),
155173 },
156174 [DAI_LINK_HDMI] = {
157175 .name = "HDMI",
158176 .stream_name = "HDMI PCM",
159
- .cpu_dai_name = "HDMI",
160
- .codec_name = "snd-soc-dummy",
161
- .codec_dai_name = "snd-soc-dummy-dai",
162177 .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
163178 .dynamic = 1,
164179 .dpcm_playback = 1,
180
+ SND_SOC_DAILINK_REG(hdmi_pcm),
165181 },
166182
167183 /* Back End DAI links */
168184 [DAI_LINK_CODEC_I2S] = {
169185 .name = "Codec",
170
- .cpu_dai_name = "I2S",
171186 .no_pcm = 1,
172
- .codecs = mt8173_rt5650_rt5676_codecs,
173
- .num_codecs = 2,
174187 .init = mt8173_rt5650_rt5676_init,
175188 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
176189 SND_SOC_DAIFMT_CBS_CFS,
....@@ -178,26 +191,23 @@
178191 .ignore_pmdown_time = 1,
179192 .dpcm_playback = 1,
180193 .dpcm_capture = 1,
194
+ SND_SOC_DAILINK_REG(codec),
181195 },
182196 [DAI_LINK_HDMI_I2S] = {
183197 .name = "HDMI BE",
184
- .cpu_dai_name = "HDMIO",
185198 .no_pcm = 1,
186
- .codec_dai_name = "i2s-hifi",
187199 .dpcm_playback = 1,
200
+ SND_SOC_DAILINK_REG(hdmi_be),
188201 },
189202 /* rt5676 <-> rt5650 intercodec link: Sets rt5676 I2S2 as master */
190203 [DAI_LINK_INTERCODEC] = {
191204 .name = "rt5650_rt5676 intercodec",
192205 .stream_name = "rt5650_rt5676 intercodec",
193
- .cpu_dai_name = "snd-soc-dummy-dai",
194
- .platform_name = "snd-soc-dummy",
195206 .no_pcm = 1,
196
- .codec_dai_name = "rt5677-aif2",
197207 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
198208 SND_SOC_DAIFMT_CBM_CFM,
209
+ SND_SOC_DAILINK_REG(intercodec),
199210 },
200
-
201211 };
202212
203213 static struct snd_soc_codec_conf mt8173_rt5650_rt5676_codec_conf[] = {
....@@ -225,6 +235,7 @@
225235 {
226236 struct snd_soc_card *card = &mt8173_rt5650_rt5676_card;
227237 struct device_node *platform_node;
238
+ struct snd_soc_dai_link *dai_link;
228239 int i, ret;
229240
230241 platform_node = of_parse_phandle(pdev->dev.of_node,
....@@ -234,38 +245,41 @@
234245 return -EINVAL;
235246 }
236247
237
- for (i = 0; i < card->num_links; i++) {
238
- if (mt8173_rt5650_rt5676_dais[i].platform_name)
248
+ for_each_card_prelinks(card, i, dai_link) {
249
+ if (dai_link->platforms->name)
239250 continue;
240
- mt8173_rt5650_rt5676_dais[i].platform_of_node = platform_node;
251
+ dai_link->platforms->of_node = platform_node;
241252 }
242253
243
- mt8173_rt5650_rt5676_codecs[0].of_node =
254
+ mt8173_rt5650_rt5676_dais[DAI_LINK_CODEC_I2S].codecs[0].of_node =
244255 of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 0);
245
- if (!mt8173_rt5650_rt5676_codecs[0].of_node) {
256
+ if (!mt8173_rt5650_rt5676_dais[DAI_LINK_CODEC_I2S].codecs[0].of_node) {
246257 dev_err(&pdev->dev,
247258 "Property 'audio-codec' missing or invalid\n");
248
- return -EINVAL;
259
+ ret = -EINVAL;
260
+ goto put_node;
249261 }
250
- mt8173_rt5650_rt5676_codecs[1].of_node =
262
+ mt8173_rt5650_rt5676_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node =
251263 of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 1);
252
- if (!mt8173_rt5650_rt5676_codecs[1].of_node) {
264
+ if (!mt8173_rt5650_rt5676_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node) {
253265 dev_err(&pdev->dev,
254266 "Property 'audio-codec' missing or invalid\n");
255
- return -EINVAL;
267
+ ret = -EINVAL;
268
+ goto put_node;
256269 }
257
- mt8173_rt5650_rt5676_codec_conf[0].of_node =
258
- mt8173_rt5650_rt5676_codecs[1].of_node;
270
+ mt8173_rt5650_rt5676_codec_conf[0].dlc.of_node =
271
+ mt8173_rt5650_rt5676_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node;
259272
260
- mt8173_rt5650_rt5676_dais[DAI_LINK_INTERCODEC].codec_of_node =
261
- mt8173_rt5650_rt5676_codecs[1].of_node;
273
+ mt8173_rt5650_rt5676_dais[DAI_LINK_INTERCODEC].codecs->of_node =
274
+ mt8173_rt5650_rt5676_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node;
262275
263
- mt8173_rt5650_rt5676_dais[DAI_LINK_HDMI_I2S].codec_of_node =
276
+ mt8173_rt5650_rt5676_dais[DAI_LINK_HDMI_I2S].codecs->of_node =
264277 of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 2);
265
- if (!mt8173_rt5650_rt5676_dais[DAI_LINK_HDMI_I2S].codec_of_node) {
278
+ if (!mt8173_rt5650_rt5676_dais[DAI_LINK_HDMI_I2S].codecs->of_node) {
266279 dev_err(&pdev->dev,
267280 "Property 'audio-codec' missing or invalid\n");
268
- return -EINVAL;
281
+ ret = -EINVAL;
282
+ goto put_node;
269283 }
270284
271285 card->dev = &pdev->dev;
....@@ -275,6 +289,7 @@
275289 dev_err(&pdev->dev, "%s snd_soc_register_card fail %d\n",
276290 __func__, ret);
277291
292
+put_node:
278293 of_node_put(platform_node);
279294 return ret;
280295 }