ASoC: core: Don't defer probe on optional, NULL components
authorMatthias Reichl <hias@horus.com>
Tue, 15 Jan 2019 16:51:07 +0000 (17:51 +0100)
committerMark Brown <broonie@kernel.org>
Tue, 15 Jan 2019 18:57:17 +0000 (18:57 +0000)
cpu and platform are optional components in DAI links. For example
codec-codec links usually have no platform set.

Call snd_soc_find_component only if the name or of_node of
a cpu or platform is set. Otherwise it will return NULL and
soc_init_dai_link bails out immediately with -EPROBE_DEFER,
meaning registering a card with NULL cpu or platform in DAI links
can never succeed.

Fixes: 8780cf1142a5 ("ASoC: soc-core: defer card probe until all component is added to list")
Signed-off-by: Matthias Reichl <hias@horus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-core.c

index b680c673c5538345405d65977a260a05362774dc..aae450ba4f08f3c02c2b23f88b50ef3e07c8e817 100644 (file)
@@ -1135,7 +1135,8 @@ static int soc_init_dai_link(struct snd_soc_card *card,
         * Defer card registartion if platform dai component is not added to
         * component list.
         */
-       if (!soc_find_component(link->platform->of_node, link->platform->name))
+       if ((link->platform->of_node || link->platform->name) &&
+           !soc_find_component(link->platform->of_node, link->platform->name))
                return -EPROBE_DEFER;
 
        /*
@@ -1154,7 +1155,8 @@ static int soc_init_dai_link(struct snd_soc_card *card,
         * Defer card registartion if cpu dai component is not added to
         * component list.
         */
-       if (!soc_find_component(link->cpu_of_node, link->cpu_name))
+       if ((link->cpu_of_node || link->cpu_name) &&
+           !soc_find_component(link->cpu_of_node, link->cpu_name))
                return -EPROBE_DEFER;
 
        /*