Unverified Commit d0b95e6c authored by Charles Keepax's avatar Charles Keepax Committed by Mark Brown
Browse files

ASoC: core: Allow soc_find_component lookups to match parent of_node



For devices implemented as a MFD it is common to only have a single node
in devicetree representing the whole device. As such when looking up
components in soc_find_components we should match against both the devices
of_node and the devices parent's of_node, as is already done in the rest
of the ASoC core.

This causes regressions for some DAI links at the moment as
soc_find_component was recently added as a check in soc_init_dai_link.

Fixes: 8780cf11 ("ASoC: soc-core: defer card probe until all component is added to list")
Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 8077ec01
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -735,12 +735,17 @@ static struct snd_soc_component *soc_find_component(
	const struct device_node *of_node, const char *name)
{
	struct snd_soc_component *component;
	struct device_node *component_of_node;

	lockdep_assert_held(&client_mutex);

	for_each_component(component) {
		if (of_node) {
			if (component->dev->of_node == of_node)
			component_of_node = component->dev->of_node;
			if (!component_of_node && component->dev->parent)
				component_of_node = component->dev->parent->of_node;

			if (component_of_node == of_node)
				return component;
		} else if (name && strcmp(component->name, name) == 0) {
			return component;