Lines Matching +full:li +full:-
1 // SPDX-License-Identifier: GPL-2.0
8 // based on ${LINUX}/sound/soc/generic/simple-card.c
29 struct snd_soc_dapm_context *dapm = w->dapm; in graph_outdrv_event()
30 struct asoc_simple_priv *priv = snd_soc_card_get_drvdata(dapm->card); in graph_outdrv_event()
34 gpiod_set_value_cansleep(priv->pa_gpio, 1); in graph_outdrv_event()
37 gpiod_set_value_cansleep(priv->pa_gpio, 0); in graph_outdrv_event()
40 return -EINVAL; in graph_outdrv_event()
62 if (dai && (dai->component->driver->pcm_construct || in soc_component_is_pcm()
63 (dai->driver->ops && dai->driver->ops->pcm_new))) in soc_component_is_pcm()
73 struct device_node *top = dev->of_node; in graph_parse_convert()
96 of_property_read_u32(top, "mclk-fs", &props->mclk_fs); in graph_parse_mclk_fs()
98 of_property_read_u32(ports, "mclk-fs", &props->mclk_fs); in graph_parse_mclk_fs()
99 of_property_read_u32(port, "mclk-fs", &props->mclk_fs); in graph_parse_mclk_fs()
100 of_property_read_u32(ep, "mclk-fs", &props->mclk_fs); in graph_parse_mclk_fs()
108 struct link_info *li, in graph_parse_node() argument
112 struct device_node *top = dev->of_node; in graph_parse_node()
113 struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link); in graph_parse_node()
114 struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link); in graph_parse_node()
147 struct link_info *li, in graph_link_init() argument
151 struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link); in graph_link_init()
155 NULL, &dai_link->dai_fmt); in graph_link_init()
159 dai_link->init = asoc_simple_dai_init; in graph_link_init()
160 dai_link->ops = &graph_ops; in graph_link_init()
161 if (priv->ops) in graph_link_init()
162 dai_link->ops = priv->ops; in graph_link_init()
170 struct link_info *li) in graph_dai_link_of_dpcm() argument
173 struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link); in graph_dai_link_of_dpcm()
174 struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link); in graph_dai_link_of_dpcm()
175 struct device_node *top = dev->of_node; in graph_dai_link_of_dpcm()
176 struct device_node *ep = li->cpu ? cpu_ep : codec_ep; in graph_dai_link_of_dpcm()
182 if (li->cpu) { in graph_dai_link_of_dpcm()
191 dai_link->dynamic = 1; in graph_dai_link_of_dpcm()
192 dai_link->dpcm_merged_format = 1; in graph_dai_link_of_dpcm()
194 ret = graph_parse_node(priv, cpu_ep, li, &is_single_links); in graph_dai_link_of_dpcm()
199 "fe.%pOFP.%s", cpus->of_node, cpus->dai_name); in graph_dai_link_of_dpcm()
201 * In BE<->BE connections it is not required to create in graph_dai_link_of_dpcm()
207 * For example: FE <-> BE1 <-> BE2 <-> ... <-> BEn where in graph_dai_link_of_dpcm()
210 if (card->component_chaining && !soc_component_is_pcm(cpus)) { in graph_dai_link_of_dpcm()
211 dai_link->no_pcm = 1; in graph_dai_link_of_dpcm()
212 dai_link->be_hw_params_fixup = asoc_simple_be_hw_params_fixup; in graph_dai_link_of_dpcm()
226 dai_link->no_pcm = 1; in graph_dai_link_of_dpcm()
227 dai_link->be_hw_params_fixup = asoc_simple_be_hw_params_fixup; in graph_dai_link_of_dpcm()
229 ret = graph_parse_node(priv, codec_ep, li, NULL); in graph_dai_link_of_dpcm()
234 "be.%pOFP.%s", codecs->of_node, codecs->dai_name); in graph_dai_link_of_dpcm()
239 snd_soc_of_parse_node_prefix(top, cconf, codecs->of_node, in graph_dai_link_of_dpcm()
242 snd_soc_of_parse_node_prefix(ports, cconf, codecs->of_node, "prefix"); in graph_dai_link_of_dpcm()
243 snd_soc_of_parse_node_prefix(port, cconf, codecs->of_node, in graph_dai_link_of_dpcm()
250 graph_parse_convert(dev, ep, &dai_props->adata); in graph_dai_link_of_dpcm()
254 ret = graph_link_init(priv, cpu_ep, codec_ep, li, dai_name); in graph_dai_link_of_dpcm()
256 li->link++; in graph_dai_link_of_dpcm()
264 struct link_info *li) in graph_dai_link_of() argument
267 struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link); in graph_dai_link_of()
276 ret = graph_parse_node(priv, cpu_ep, li, &is_single_links); in graph_dai_link_of()
280 ret = graph_parse_node(priv, codec_ep, li, NULL); in graph_dai_link_of()
285 "%s-%s", cpus->dai_name, codecs->dai_name); in graph_dai_link_of()
290 ret = graph_link_init(priv, cpu_ep, codec_ep, li, dai_name); in graph_dai_link_of()
294 li->link++; in graph_dai_link_of()
303 if (priv->force_dpcm) in parse_as_dpcm_link()
306 if (!priv->dpcm_selectable) in parse_as_dpcm_link()
312 * or has convert-xxx property in parse_as_dpcm_link()
322 struct link_info *li, in __graph_for_each_link() argument
326 struct link_info *li), in __graph_for_each_link() argument
330 struct link_info *li)) in __graph_for_each_link()
334 struct device_node *node = dev->of_node; in __graph_for_each_link()
358 /* get convert-xxx property */ in __graph_for_each_link()
371 if (li->cpu || in __graph_for_each_link()
373 ret = func_dpcm(priv, cpu_ep, codec_ep, li); in __graph_for_each_link()
376 if (li->cpu) in __graph_for_each_link()
377 ret = func_noml(priv, cpu_ep, codec_ep, li); in __graph_for_each_link()
396 struct link_info *li, in graph_for_each_link() argument
400 struct link_info *li), in graph_for_each_link() argument
404 struct link_info *li)) in graph_for_each_link()
411 * as "CPU-Codec". in graph_for_each_link()
414 * all CPUs are detected as "CPU-dummy", and in graph_for_each_link()
415 * all Codecs are detected as "dummy-Codec". in graph_for_each_link()
416 * To avoid random sub-device numbering, in graph_for_each_link()
417 * detect "dummy-Codec" in last; in graph_for_each_link()
419 for (li->cpu = 1; li->cpu >= 0; li->cpu--) { in graph_for_each_link()
420 ret = __graph_for_each_link(priv, li, func_noml, func_dpcm); in graph_for_each_link()
431 struct link_info *li) in graph_count_noml() argument
435 if (li->link >= SNDRV_MAX_LINKS) { in graph_count_noml()
437 return -EINVAL; in graph_count_noml()
443 * simple-card.c :: simple_count_noml() in graph_count_noml()
445 li->num[li->link].cpus = 1; in graph_count_noml()
446 li->num[li->link].platforms = 1; in graph_count_noml()
448 li->num[li->link].codecs = 1; in graph_count_noml()
450 li->link += 1; /* 1xCPU-Codec */ in graph_count_noml()
460 struct link_info *li) in graph_count_dpcm() argument
464 if (li->link >= SNDRV_MAX_LINKS) { in graph_count_dpcm()
466 return -EINVAL; in graph_count_dpcm()
469 if (li->cpu) { in graph_count_dpcm()
473 * simple-card.c :: simple_count_noml() in graph_count_dpcm()
475 li->num[li->link].cpus = 1; in graph_count_dpcm()
476 li->num[li->link].platforms = 1; in graph_count_dpcm()
478 li->link++; /* 1xCPU-dummy */ in graph_count_dpcm()
480 li->num[li->link].codecs = 1; in graph_count_dpcm()
482 li->link++; /* 1xdummy-Codec */ in graph_count_dpcm()
491 struct link_info *li) in graph_get_dais_count() argument
495 * CPU-Codec / CPU-dummy / dummy-Codec in graph_get_dais_count()
498 * same number for "dummy-Codec" in graph_get_dais_count()
501 * CPU0 --- Codec0 link : 5 in graph_get_dais_count()
502 * CPU1 --- Codec1 dais : 7 in graph_get_dais_count()
503 * CPU2 -/ ccnf : 1 in graph_get_dais_count()
504 * CPU3 --- Codec2 in graph_get_dais_count()
506 * => 5 links = 2xCPU-Codec + 2xCPU-dummy + 1xdummy-Codec in graph_get_dais_count()
508 * => 1 ccnf = 1xdummy-Codec in graph_get_dais_count()
511 * CPU0 --- Codec0 link : 5 in graph_get_dais_count()
512 * CPU1 --- Codec1 dais : 6 in graph_get_dais_count()
513 * CPU2 -/ ccnf : 1 in graph_get_dais_count()
514 * CPU3 -/ in graph_get_dais_count()
516 * => 5 links = 1xCPU-Codec + 3xCPU-dummy + 1xdummy-Codec in graph_get_dais_count()
518 * => 1 ccnf = 1xdummy-Codec in graph_get_dais_count()
521 * CPU0 --- Codec0 link : 6 in graph_get_dais_count()
522 * CPU1 -/ dais : 6 in graph_get_dais_count()
523 * CPU2 --- Codec1 ccnf : 2 in graph_get_dais_count()
524 * CPU3 -/ in graph_get_dais_count()
526 * => 6 links = 0xCPU-Codec + 4xCPU-dummy + 2xdummy-Codec in graph_get_dais_count()
528 * => 2 ccnf = 2xdummy-Codec in graph_get_dais_count()
531 * CPU0 --- Codec0 (convert-rate) link : 3 in graph_get_dais_count()
532 * CPU1 --- Codec1 dais : 4 in graph_get_dais_count()
535 * => 3 links = 1xCPU-Codec + 1xCPU-dummy + 1xdummy-Codec in graph_get_dais_count()
537 * => 1 ccnf = 1xdummy-Codec in graph_get_dais_count()
539 return graph_for_each_link(priv, li, in graph_get_dais_count()
547 struct link_info *li; in audio_graph_parse_of() local
550 li = devm_kzalloc(dev, sizeof(*li), GFP_KERNEL); in audio_graph_parse_of()
551 if (!li) in audio_graph_parse_of()
552 return -ENOMEM; in audio_graph_parse_of()
554 card->owner = THIS_MODULE; in audio_graph_parse_of()
555 card->dev = dev; in audio_graph_parse_of()
557 ret = graph_get_dais_count(priv, li); in audio_graph_parse_of()
561 if (!li->link) in audio_graph_parse_of()
562 return -EINVAL; in audio_graph_parse_of()
564 ret = asoc_simple_init_priv(priv, li); in audio_graph_parse_of()
568 priv->pa_gpio = devm_gpiod_get_optional(dev, "pa", GPIOD_OUT_LOW); in audio_graph_parse_of()
569 if (IS_ERR(priv->pa_gpio)) { in audio_graph_parse_of()
570 ret = PTR_ERR(priv->pa_gpio); in audio_graph_parse_of()
583 memset(li, 0, sizeof(*li)); in audio_graph_parse_of()
584 ret = graph_for_each_link(priv, li, in audio_graph_parse_of()
602 devm_kfree(dev, li); in audio_graph_parse_of()
615 struct device *dev = &pdev->dev; in graph_probe()
621 return -ENOMEM; in graph_probe()
624 card->dapm_widgets = graph_dapm_widgets; in graph_probe()
625 card->num_dapm_widgets = ARRAY_SIZE(graph_dapm_widgets); in graph_probe()
626 card->probe = asoc_graph_card_probe; in graph_probe()
629 priv->dpcm_selectable = 1; in graph_probe()
635 { .compatible = "audio-graph-card", },
636 { .compatible = "audio-graph-scu-card",
644 .name = "asoc-audio-graph-card",
653 MODULE_ALIAS("platform:asoc-audio-graph-card");