*参照元 [#p7411447] #backlinks *説明 [#k5aca460] -パス: [[linux-4.4.1/sound/soc/soc-core.c]] -FIXME: これは何? --説明 **引数 [#pa3d3b86] -struct snd_soc_card *card -- --[[linux-4.4.1/snd_soc_card]] -int num -- **返り値 [#wfd9858d] -int -- **参考 [#pc5dc658] *実装 [#v567e552] static int soc_bind_dai_link(struct snd_soc_card *card, int num) { struct snd_soc_dai_link *dai_link = &card->dai_link[num]; struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; struct snd_soc_dai_link_component *codecs = dai_link->codecs; struct snd_soc_dai_link_component cpu_dai_component; struct snd_soc_dai **codec_dais = rtd->codec_dais; struct snd_soc_platform *platform; const char *platform_name; int i; - --[[linux-4.4.1/snd_soc_dai_link]] --[[linux-4.4.1/snd_soc_pcm_runtime]] --[[linux-4.4.1/snd_soc_dai_link_component]] --[[linux-4.4.1/snd_soc_dai]] --[[linux-4.4.1/snd_soc_platform]] dev_dbg(card->dev, "ASoC: binding %s at idx %d\n", dai_link->name, num); - --[[linux-4.4.1/dev_dbg()]] cpu_dai_component.name = dai_link->cpu_name; cpu_dai_component.of_node = dai_link->cpu_of_node; cpu_dai_component.dai_name = dai_link->cpu_dai_name; rtd->cpu_dai = snd_soc_find_dai(&cpu_dai_component); if (!rtd->cpu_dai) { dev_err(card->dev, "ASoC: CPU DAI %s not registered\n", dai_link->cpu_dai_name); return -EPROBE_DEFER; } - --[[linux-4.4.1/snd_soc_find_dai()]] rtd->num_codecs = dai_link->num_codecs; /* Find CODEC from registered CODECs */ for (i = 0; i < rtd->num_codecs; i++) { codec_dais[i] = snd_soc_find_dai(&codecs[i]); if (!codec_dais[i]) { dev_err(card->dev, "ASoC: CODEC DAI %s not registered\n", codecs[i].dai_name); return -EPROBE_DEFER; } } /* Single codec links expect codec and codec_dai in runtime data */ rtd->codec_dai = codec_dais[0]; rtd->codec = rtd->codec_dai->codec; /* if there's no platform we match on the empty platform */ platform_name = dai_link->platform_name; if (!platform_name && !dai_link->platform_of_node) platform_name = "snd-soc-dummy"; /* find one from the set of registered platforms */ list_for_each_entry(platform, &platform_list, list) { if (dai_link->platform_of_node) { if (platform->dev->of_node != dai_link->platform_of_node) continue; } else { if (strcmp(platform->component.name, platform_name)) continue; } rtd->platform = platform; } - --[[linux-4.4.1/list_for_each_entry()]] --[[linux-4.4.1/strcmp()]] --[[linux-4.4.1/platform_list(global)]] if (!rtd->platform) { dev_err(card->dev, "ASoC: platform %s not registered\n", dai_link->platform_name); return -EPROBE_DEFER; } card->num_rtd++; return 0; } *コメント [#k3a1791d]