Hi Robert
Thank you for your reporting
asoc-simple-card irxs-audio: parse error -22 asoc-simple-card: probe of irxs-audio failed with error -22
(snip)
Inside snd_soc_get_dai_name, snd_soc_component_of_xlate_dai_name is called and returns -ENOTSUPP, so we fall into the if block and end up failing out here:
if (id < 0 || id >= pos->num_dai) { ret = -EINVAL; continue; }
Platform support was added to simple-audio-card by someone (I forgot detail), and I have never use it unfortunately. But in my quick check, the purpose of asoc_simple_parse_platform() is setup dlc->of_node
asoc_simple_parse_dai(...) { ... => dlc->of_node = args.np; ... }
and it will be checked at asoc_simple_canonicalize_platform()
asoc_simple_canonicalize_platform(...) { /* Assumes platform == cpu */ => if (!dai_link->platforms->of_node) => dai_link->platforms->of_node = dai_link->cpus->of_node; ... }
and will be used at soc-core
(A) soc_dai_link_sanity_check(...) { ... for_each_link_platforms(link, i, platform) { => if (!!platform->name == !!platform->of_node) { ... }
snd_soc_add_pcm_runtime(...) { ... (A) ret = soc_dai_link_sanity_check(); ...
for_each_link_cpus(dai_link, i, cpu) { (X) asoc_rtd_to_cpu(rtd, i) = snd_soc_find_dai(cpu); ... }
for_each_link_codecs(dai_link, i, codec) { (X) asoc_rtd_to_codec(rtd, i) = snd_soc_find_dai(codec); ... }
for_each_link_platforms(dai_link, i, platform) { (Y) for_each_component(component) { => if (!snd_soc_is_matching_component(platform, component)) ... }
But, at snd_soc_add_pcm_runtime(), CPU/Codec needs of_node and DAI name (= X) Platform needs of_node (= Y)
So maybe (I didn't confirm) for platform, asoc_simple_parse_dai() don't need to call snd_soc_of_get_dai_name() ?
Thank you for your help !!
Best regards --- Kuninori Morimoto