Lines Matching +full:link +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0-only
6 #include "../common/soc-intel-quirks.h"
11 * Intel HDMI DAI Link
15 struct sof_card_private *ctx = snd_soc_card_get_drvdata(rtd->card); in hdmi_init()
18 ctx->hdmi.hdmi_comp = dai->component; in hdmi_init()
27 if (!ctx->hdmi_num) in sof_intel_board_card_late_probe()
30 if (!ctx->hdmi.idisp_codec) in sof_intel_board_card_late_probe()
33 if (!ctx->hdmi.hdmi_comp) in sof_intel_board_card_late_probe()
34 return -EINVAL; in sof_intel_board_card_late_probe()
36 return hda_dsp_hdmi_build_controls(card, ctx->hdmi.hdmi_comp); in sof_intel_board_card_late_probe()
41 * DMIC DAI Link
53 struct snd_soc_card *card = rtd->card; in dmic_init()
56 ret = snd_soc_dapm_new_controls(&card->dapm, dmic_widgets, in dmic_init()
59 dev_err(rtd->dev, "fail to add dmic widgets, ret %d\n", ret); in dmic_init()
63 ret = snd_soc_dapm_add_routes(&card->dapm, dmic_routes, in dmic_init()
66 dev_err(rtd->dev, "fail to add dmic routes, ret %d\n", ret); in dmic_init()
74 * DAI Link Helpers
78 .name = "dmic-codec",
79 .dai_name = "dmic-hifi",
85 /* name might be overridden during probe */
86 .name = "0000:00:1f.3"
91 struct snd_soc_dai_link *link, int be_id, in sof_intel_board_set_codec_link() argument
96 dev_dbg(dev, "link %d: codec %s, ssp %d\n", be_id, in sof_intel_board_set_codec_link()
99 /* link name */ in sof_intel_board_set_codec_link()
100 link->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-Codec", ssp_codec); in sof_intel_board_set_codec_link()
101 if (!link->name) in sof_intel_board_set_codec_link()
102 return -ENOMEM; in sof_intel_board_set_codec_link()
108 return -ENOMEM; in sof_intel_board_set_codec_link()
111 /* backward-compatibility for BYT/CHT boards */ in sof_intel_board_set_codec_link()
112 cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "ssp%d-port", in sof_intel_board_set_codec_link()
115 cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", in sof_intel_board_set_codec_link()
118 if (!cpus->dai_name) in sof_intel_board_set_codec_link()
119 return -ENOMEM; in sof_intel_board_set_codec_link()
121 link->cpus = cpus; in sof_intel_board_set_codec_link()
122 link->num_cpus = 1; in sof_intel_board_set_codec_link()
124 /* codecs - caller to handle */ in sof_intel_board_set_codec_link()
127 link->platforms = platform_component; in sof_intel_board_set_codec_link()
128 link->num_platforms = ARRAY_SIZE(platform_component); in sof_intel_board_set_codec_link()
130 link->id = be_id; in sof_intel_board_set_codec_link()
131 link->no_pcm = 1; in sof_intel_board_set_codec_link()
132 link->dpcm_capture = 1; in sof_intel_board_set_codec_link()
133 link->dpcm_playback = 1; in sof_intel_board_set_codec_link()
140 struct snd_soc_dai_link *link, int be_id, in sof_intel_board_set_dmic_link() argument
149 return -ENOMEM; in sof_intel_board_set_dmic_link()
153 dev_dbg(dev, "link %d: dmic01\n", be_id); in sof_intel_board_set_dmic_link()
155 link->name = "dmic01"; in sof_intel_board_set_dmic_link()
156 cpus->dai_name = "DMIC01 Pin"; in sof_intel_board_set_dmic_link()
159 dev_dbg(dev, "link %d: dmic16k\n", be_id); in sof_intel_board_set_dmic_link()
161 link->name = "dmic16k"; in sof_intel_board_set_dmic_link()
162 cpus->dai_name = "DMIC16k Pin"; in sof_intel_board_set_dmic_link()
166 return -EINVAL; in sof_intel_board_set_dmic_link()
169 link->cpus = cpus; in sof_intel_board_set_dmic_link()
170 link->num_cpus = 1; in sof_intel_board_set_dmic_link()
173 link->codecs = dmic_component; in sof_intel_board_set_dmic_link()
174 link->num_codecs = ARRAY_SIZE(dmic_component); in sof_intel_board_set_dmic_link()
177 link->platforms = platform_component; in sof_intel_board_set_dmic_link()
178 link->num_platforms = ARRAY_SIZE(platform_component); in sof_intel_board_set_dmic_link()
180 link->id = be_id; in sof_intel_board_set_dmic_link()
182 link->init = dmic_init; in sof_intel_board_set_dmic_link()
183 link->ignore_suspend = 1; in sof_intel_board_set_dmic_link()
184 link->no_pcm = 1; in sof_intel_board_set_dmic_link()
185 link->dpcm_capture = 1; in sof_intel_board_set_dmic_link()
192 struct snd_soc_dai_link *link, int be_id, in sof_intel_board_set_intel_hdmi_link() argument
197 dev_dbg(dev, "link %d: intel hdmi, hdmi id %d, idisp codec %d\n", in sof_intel_board_set_intel_hdmi_link()
200 /* link name */ in sof_intel_board_set_intel_hdmi_link()
201 link->name = devm_kasprintf(dev, GFP_KERNEL, "iDisp%d", hdmi_id); in sof_intel_board_set_intel_hdmi_link()
202 if (!link->name) in sof_intel_board_set_intel_hdmi_link()
203 return -ENOMEM; in sof_intel_board_set_intel_hdmi_link()
209 return -ENOMEM; in sof_intel_board_set_intel_hdmi_link()
211 cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "iDisp%d Pin", hdmi_id); in sof_intel_board_set_intel_hdmi_link()
212 if (!cpus->dai_name) in sof_intel_board_set_intel_hdmi_link()
213 return -ENOMEM; in sof_intel_board_set_intel_hdmi_link()
215 link->cpus = cpus; in sof_intel_board_set_intel_hdmi_link()
216 link->num_cpus = 1; in sof_intel_board_set_intel_hdmi_link()
224 return -ENOMEM; in sof_intel_board_set_intel_hdmi_link()
226 codecs->name = "ehdaudio0D2"; in sof_intel_board_set_intel_hdmi_link()
227 codecs->dai_name = devm_kasprintf(dev, GFP_KERNEL, in sof_intel_board_set_intel_hdmi_link()
228 "intel-hdmi-hifi%d", hdmi_id); in sof_intel_board_set_intel_hdmi_link()
229 if (!codecs->dai_name) in sof_intel_board_set_intel_hdmi_link()
230 return -ENOMEM; in sof_intel_board_set_intel_hdmi_link()
232 link->codecs = codecs; in sof_intel_board_set_intel_hdmi_link()
234 link->codecs = &snd_soc_dummy_dlc; in sof_intel_board_set_intel_hdmi_link()
236 link->num_codecs = 1; in sof_intel_board_set_intel_hdmi_link()
239 link->platforms = platform_component; in sof_intel_board_set_intel_hdmi_link()
240 link->num_platforms = ARRAY_SIZE(platform_component); in sof_intel_board_set_intel_hdmi_link()
242 link->id = be_id; in sof_intel_board_set_intel_hdmi_link()
243 link->init = (hdmi_id == 1) ? hdmi_init : NULL; in sof_intel_board_set_intel_hdmi_link()
244 link->no_pcm = 1; in sof_intel_board_set_intel_hdmi_link()
245 link->dpcm_playback = 1; in sof_intel_board_set_intel_hdmi_link()
252 struct snd_soc_dai_link *link, int be_id, in sof_intel_board_set_ssp_amp_link() argument
257 dev_dbg(dev, "link %d: ssp amp %s, ssp %d\n", be_id, in sof_intel_board_set_ssp_amp_link()
260 /* link name */ in sof_intel_board_set_ssp_amp_link()
261 link->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-Codec", ssp_amp); in sof_intel_board_set_ssp_amp_link()
262 if (!link->name) in sof_intel_board_set_ssp_amp_link()
263 return -ENOMEM; in sof_intel_board_set_ssp_amp_link()
269 return -ENOMEM; in sof_intel_board_set_ssp_amp_link()
271 cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", ssp_amp); in sof_intel_board_set_ssp_amp_link()
272 if (!cpus->dai_name) in sof_intel_board_set_ssp_amp_link()
273 return -ENOMEM; in sof_intel_board_set_ssp_amp_link()
275 link->cpus = cpus; in sof_intel_board_set_ssp_amp_link()
276 link->num_cpus = 1; in sof_intel_board_set_ssp_amp_link()
278 /* codecs - caller to handle */ in sof_intel_board_set_ssp_amp_link()
281 link->platforms = platform_component; in sof_intel_board_set_ssp_amp_link()
282 link->num_platforms = ARRAY_SIZE(platform_component); in sof_intel_board_set_ssp_amp_link()
284 link->id = be_id; in sof_intel_board_set_ssp_amp_link()
285 link->no_pcm = 1; in sof_intel_board_set_ssp_amp_link()
286 link->dpcm_capture = 1; /* feedback stream or firmware-generated echo reference */ in sof_intel_board_set_ssp_amp_link()
287 link->dpcm_playback = 1; in sof_intel_board_set_ssp_amp_link()
294 struct snd_soc_dai_link *link, int be_id, in sof_intel_board_set_bt_link() argument
299 dev_dbg(dev, "link %d: bt offload, ssp %d\n", be_id, ssp_bt); in sof_intel_board_set_bt_link()
301 /* link name */ in sof_intel_board_set_bt_link()
302 link->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", ssp_bt); in sof_intel_board_set_bt_link()
303 if (!link->name) in sof_intel_board_set_bt_link()
304 return -ENOMEM; in sof_intel_board_set_bt_link()
310 return -ENOMEM; in sof_intel_board_set_bt_link()
312 cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", ssp_bt); in sof_intel_board_set_bt_link()
313 if (!cpus->dai_name) in sof_intel_board_set_bt_link()
314 return -ENOMEM; in sof_intel_board_set_bt_link()
316 link->cpus = cpus; in sof_intel_board_set_bt_link()
317 link->num_cpus = 1; in sof_intel_board_set_bt_link()
320 link->codecs = &snd_soc_dummy_dlc; in sof_intel_board_set_bt_link()
321 link->num_codecs = 1; in sof_intel_board_set_bt_link()
324 link->platforms = platform_component; in sof_intel_board_set_bt_link()
325 link->num_platforms = ARRAY_SIZE(platform_component); in sof_intel_board_set_bt_link()
327 link->id = be_id; in sof_intel_board_set_bt_link()
328 link->no_pcm = 1; in sof_intel_board_set_bt_link()
329 link->dpcm_capture = 1; in sof_intel_board_set_bt_link()
330 link->dpcm_playback = 1; in sof_intel_board_set_bt_link()
337 struct snd_soc_dai_link *link, int be_id, in sof_intel_board_set_hdmi_in_link() argument
342 dev_dbg(dev, "link %d: hdmi-in, ssp %d\n", be_id, ssp_hdmi); in sof_intel_board_set_hdmi_in_link()
344 /* link name */ in sof_intel_board_set_hdmi_in_link()
345 link->name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-HDMI", ssp_hdmi); in sof_intel_board_set_hdmi_in_link()
346 if (!link->name) in sof_intel_board_set_hdmi_in_link()
347 return -ENOMEM; in sof_intel_board_set_hdmi_in_link()
353 return -ENOMEM; in sof_intel_board_set_hdmi_in_link()
355 cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", ssp_hdmi); in sof_intel_board_set_hdmi_in_link()
356 if (!cpus->dai_name) in sof_intel_board_set_hdmi_in_link()
357 return -ENOMEM; in sof_intel_board_set_hdmi_in_link()
359 link->cpus = cpus; in sof_intel_board_set_hdmi_in_link()
360 link->num_cpus = 1; in sof_intel_board_set_hdmi_in_link()
363 link->codecs = &snd_soc_dummy_dlc; in sof_intel_board_set_hdmi_in_link()
364 link->num_codecs = 1; in sof_intel_board_set_hdmi_in_link()
367 link->platforms = platform_component; in sof_intel_board_set_hdmi_in_link()
368 link->num_platforms = ARRAY_SIZE(platform_component); in sof_intel_board_set_hdmi_in_link()
370 link->id = be_id; in sof_intel_board_set_hdmi_in_link()
371 link->no_pcm = 1; in sof_intel_board_set_hdmi_in_link()
372 link->dpcm_capture = 1; in sof_intel_board_set_hdmi_in_link()
383 if (ctx->codec_type != CODEC_NONE) in calculate_num_links()
387 if (ctx->dmic_be_num > 0) in calculate_num_links()
390 if (ctx->dmic_be_num > 1) in calculate_num_links()
394 num_links += ctx->hdmi_num; in calculate_num_links()
397 if (ctx->amp_type != CODEC_NONE) in calculate_num_links()
401 if (ctx->bt_offload_present) in calculate_num_links()
404 /* HDMI-In */ in calculate_num_links()
405 num_links += hweight32(ctx->ssp_mask_hdmi_in); in calculate_num_links()
425 return -ENOMEM; in sof_intel_board_set_dai_link()
428 if (ctx->codec_type != CODEC_NONE) { in sof_intel_board_set_dai_link()
430 ctx->codec_type, in sof_intel_board_set_dai_link()
431 ctx->ssp_codec); in sof_intel_board_set_dai_link()
433 dev_err(dev, "fail to set codec link, ret %d\n", ret); in sof_intel_board_set_dai_link()
437 ctx->codec_link = &links[idx]; in sof_intel_board_set_dai_link()
442 if (ctx->dmic_be_num > 0) { in sof_intel_board_set_dai_link()
447 dev_err(dev, "fail to set dmic01 link, ret %d\n", ret); in sof_intel_board_set_dai_link()
454 if (ctx->dmic_be_num > 1) { in sof_intel_board_set_dai_link()
459 dev_err(dev, "fail to set dmic16k link, ret %d\n", ret); in sof_intel_board_set_dai_link()
467 for (i = 1; i <= ctx->hdmi_num; i++) { in sof_intel_board_set_dai_link()
470 ctx->hdmi.idisp_codec); in sof_intel_board_set_dai_link()
472 dev_err(dev, "fail to set hdmi link, ret %d\n", ret); in sof_intel_board_set_dai_link()
480 if (ctx->amp_type != CODEC_NONE) { in sof_intel_board_set_dai_link()
482 ctx->amp_type, in sof_intel_board_set_dai_link()
483 ctx->ssp_amp); in sof_intel_board_set_dai_link()
485 dev_err(dev, "fail to set amp link, ret %d\n", ret); in sof_intel_board_set_dai_link()
489 ctx->amp_link = &links[idx]; in sof_intel_board_set_dai_link()
494 if (ctx->bt_offload_present) { in sof_intel_board_set_dai_link()
496 ctx->ssp_bt); in sof_intel_board_set_dai_link()
498 dev_err(dev, "fail to set bt link, ret %d\n", ret); in sof_intel_board_set_dai_link()
505 /* HDMI-In */ in sof_intel_board_set_dai_link()
506 for_each_set_bit(ssp_hdmi_in, &ctx->ssp_mask_hdmi_in, 32) { in sof_intel_board_set_dai_link()
510 dev_err(dev, "fail to set hdmi-in link, ret %d\n", ret); in sof_intel_board_set_dai_link()
518 dev_err(dev, "link number mismatch, idx %d, num_links %d\n", idx, in sof_intel_board_set_dai_link()
520 return -EINVAL; in sof_intel_board_set_dai_link()
523 card->dai_link = links; in sof_intel_board_set_dai_link()
524 card->num_links = num_links; in sof_intel_board_set_dai_link()