Lines Matching +full:pcm +full:- +full:platform
1 // SPDX-License-Identifier: GPL-2.0-only
3 // Copyright(c) 2021-2022 Intel Corporation
14 #include <sound/soc-acpi.h>
20 struct snd_soc_dai_link_component *platform; in avs_create_dai_links() local
22 struct hda_pcm *pcm; in avs_create_dai_links() local
23 const char *cname = dev_name(&codec->core.dev); in avs_create_dai_links()
27 platform = devm_kzalloc(dev, sizeof(*platform), GFP_KERNEL); in avs_create_dai_links()
28 if (!dl || !platform) in avs_create_dai_links()
29 return -ENOMEM; in avs_create_dai_links()
31 platform->name = platform_name; in avs_create_dai_links()
32 pcm = list_first_entry(&codec->pcm_list_head, struct hda_pcm, list); in avs_create_dai_links()
34 for (i = 0; i < pcm_count; i++, pcm = list_next_entry(pcm, list)) { in avs_create_dai_links()
37 return -ENOMEM; in avs_create_dai_links()
42 dl[i].platforms = platform; in avs_create_dai_links()
46 dl[i].codecs = devm_kzalloc(dev, sizeof(*dl->codecs), GFP_KERNEL); in avs_create_dai_links()
47 dl[i].cpus = devm_kzalloc(dev, sizeof(*dl->cpus), GFP_KERNEL); in avs_create_dai_links()
49 return -ENOMEM; in avs_create_dai_links()
51 dl[i].cpus->dai_name = devm_kasprintf(dev, GFP_KERNEL, "%s-cpu%d", cname, i); in avs_create_dai_links()
52 if (!dl[i].cpus->dai_name) in avs_create_dai_links()
53 return -ENOMEM; in avs_create_dai_links()
55 dl[i].codecs->name = devm_kstrdup_const(dev, cname, GFP_KERNEL); in avs_create_dai_links()
56 if (!dl[i].codecs->name) in avs_create_dai_links()
57 return -ENOMEM; in avs_create_dai_links()
59 dl[i].codecs->dai_name = pcm->name; in avs_create_dai_links()
81 spcm = rtd->pcm ? rtd->pcm->streams[dir].pcm : NULL; in avs_card_hdmi_pcm_at()
82 if (!spcm || !strstr(spcm->id, FEDAI_NAME_PREFIX)) in avs_card_hdmi_pcm_at()
85 ret = sscanf(spcm->id, FEDAI_NAME_PREFIX "%d", &n); in avs_card_hdmi_pcm_at()
89 return rtd->pcm; in avs_card_hdmi_pcm_at()
97 struct snd_soc_acpi_mach *mach = dev_get_platdata(card->dev); in avs_card_late_probe()
98 struct hda_codec *codec = mach->pdata; in avs_card_late_probe()
100 /* Topology pcm indexing is 1-based */ in avs_card_late_probe()
103 list_for_each_entry(hpcm, &codec->pcm_list_head, list) { in avs_card_late_probe()
108 hpcm->pcm = spcm; in avs_card_late_probe()
109 hpcm->device = spcm->device; in avs_card_late_probe()
110 dev_info(card->dev, "%s: mapping HDMI converter %d to PCM %d (%p)\n", in avs_card_late_probe()
111 __func__, i, hpcm->device, spcm); in avs_card_late_probe()
113 hpcm->pcm = NULL; in avs_card_late_probe()
114 hpcm->device = SNDRV_PCM_INVALID_DEVICE; in avs_card_late_probe()
115 dev_warn(card->dev, "%s: no PCM in topology for HDMI converter %d\n", in avs_card_late_probe()
128 struct snd_soc_card *card = rtm->card; in avs_probing_link_init()
130 struct hda_pcm *pcm; in avs_probing_link_init() local
133 mach = dev_get_platdata(card->dev); in avs_probing_link_init()
134 codec = mach->pdata; in avs_probing_link_init()
136 if (list_empty(&codec->pcm_list_head)) in avs_probing_link_init()
137 return -EINVAL; in avs_probing_link_init()
138 list_for_each_entry(pcm, &codec->pcm_list_head, list) in avs_probing_link_init()
141 ret = avs_create_dai_links(card->dev, codec, pcm_count, mach->mach_params.platform, &links); in avs_probing_link_init()
143 dev_err(card->dev, "create links failed: %d\n", ret); in avs_probing_link_init()
149 dev_err(card->dev, "add links failed: %d\n", ret); in avs_probing_link_init()
157 .name = "probing-LINK",
158 .id = -1,
171 struct device *dev = &pdev->dev; in avs_hdaudio_probe()
175 codec = mach->pdata; in avs_hdaudio_probe()
178 if (!device_is_registered(&codec->core.dev)) in avs_hdaudio_probe()
179 return -ENODEV; in avs_hdaudio_probe()
183 return -ENOMEM; in avs_hdaudio_probe()
185 binder->platforms = devm_kzalloc(dev, sizeof(*binder->platforms), GFP_KERNEL); in avs_hdaudio_probe()
186 binder->codecs = devm_kzalloc(dev, sizeof(*binder->codecs), GFP_KERNEL); in avs_hdaudio_probe()
187 if (!binder->platforms || !binder->codecs) in avs_hdaudio_probe()
188 return -ENOMEM; in avs_hdaudio_probe()
190 binder->codecs->name = devm_kstrdup_const(dev, dev_name(&codec->core.dev), GFP_KERNEL); in avs_hdaudio_probe()
191 if (!binder->codecs->name) in avs_hdaudio_probe()
192 return -ENOMEM; in avs_hdaudio_probe()
194 binder->platforms->name = mach->mach_params.platform; in avs_hdaudio_probe()
195 binder->num_platforms = 1; in avs_hdaudio_probe()
196 binder->codecs->dai_name = "codec-probing-DAI"; in avs_hdaudio_probe()
197 binder->num_codecs = 1; in avs_hdaudio_probe()
201 return -ENOMEM; in avs_hdaudio_probe()
203 card->name = binder->codecs->name; in avs_hdaudio_probe()
204 card->dev = dev; in avs_hdaudio_probe()
205 card->owner = THIS_MODULE; in avs_hdaudio_probe()
206 card->dai_link = binder; in avs_hdaudio_probe()
207 card->num_links = 1; in avs_hdaudio_probe()
208 card->fully_routed = true; in avs_hdaudio_probe()
210 card->late_probe = avs_card_late_probe; in avs_hdaudio_probe()
221 MODULE_DEVICE_TABLE(platform, avs_hdaudio_driver_ids);
234 MODULE_DESCRIPTION("Intel HD-Audio machine driver");