Lines Matching +full:fe +full:- +full:dai +full:- +full:link
1 // SPDX-License-Identifier: GPL-2.0
10 #include "meson-card.h"
29 if (ret && ret != -ENOTSUPP)
35 if (ret && ret != -ENOTSUPP)
49 links = krealloc(priv->card.dai_link,
50 num_links * sizeof(*priv->card.dai_link),
55 ldata = krealloc(priv->link_data,
56 num_links * sizeof(*priv->link_data),
61 priv->card.dai_link = links;
62 priv->link_data = ldata;
63 priv->card.num_links = num_links;
69 dev_err(priv->card.dev, "failed to allocate links\n");
70 return -ENOMEM;
82 return -EINVAL;
86 return dev_err_probe(card->dev, ret, "can't parse dai\n");
93 struct snd_soc_dai_link *link,
97 char *name = devm_kasprintf(card->dev, GFP_KERNEL, "%s.%s",
98 prefix, node->full_name);
100 return -ENOMEM;
102 link->name = name;
103 link->stream_name = name;
136 struct snd_soc_dai_link *link,
145 dev_err(card->dev, "be link %s has no codec\n",
146 node->full_name);
147 return -EINVAL;
150 codec = devm_kcalloc(card->dev, num_codecs, sizeof(*codec), GFP_KERNEL);
152 return -ENOMEM;
154 link->codecs = codec;
155 link->num_codecs = num_codecs;
167 ret = meson_card_set_link_name(card, link, node, "be");
169 dev_err(card->dev, "error setting %pOFn link name\n", np);
176 struct snd_soc_dai_link *link,
180 link->codecs = &snd_soc_dummy_dlc;
181 link->num_codecs = 1;
183 link->dynamic = 1;
184 link->dpcm_merged_format = 1;
185 link->dpcm_merged_chan = 1;
186 link->dpcm_merged_rate = 1;
189 link->playback_only = 1;
191 link->capture_only = 1;
193 return meson_card_set_link_name(card, link, node, "fe");
200 struct device_node *node = card->dev->of_node;
206 dev_err(card->dev, "card has no links\n");
207 return -EINVAL;
216 ret = priv->match_data->add_link(card, np, &i);
234 if (!of_property_read_bool(card->dev->of_node, propname))
243 struct snd_soc_card *card = &priv->card;
244 struct snd_soc_dai_link *link;
249 if (card->dai_link) {
250 for_each_card_prelinks(card, i, link) {
251 if (link->cpus)
252 of_node_put(link->cpus->of_node);
253 for_each_link_codecs(link, j, codec)
254 of_node_put(codec->of_node);
258 if (card->aux_dev) {
260 of_node_put(aux->dlc.of_node);
263 kfree(card->dai_link);
264 kfree(priv->link_data);
270 struct device *dev = &pdev->dev;
277 return -ENODEV;
282 return -ENOMEM;
285 snd_soc_card_set_drvdata(&priv->card, priv);
287 priv->card.owner = THIS_MODULE;
288 priv->card.dev = dev;
289 priv->card.driver_name = dev->driver->name;
290 priv->match_data = data;
292 ret = snd_soc_of_parse_card_name(&priv->card, "model");
296 ret = meson_card_parse_of_optional(&priv->card, "audio-routing",
303 ret = meson_card_parse_of_optional(&priv->card, "audio-widgets",
310 ret = meson_card_add_links(&priv->card);
314 ret = snd_soc_of_parse_aux_devs(&priv->card, "audio-aux-devs");
318 ret = devm_snd_soc_register_card(dev, &priv->card);