Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e0aa8d8 authored by Jyri Sarha's avatar Jyri Sarha Committed by Mark Brown
Browse files

ASoC: core: If component doesn't have of_node use parent's node instead



If an ASoC component device does not have a device tree node, use its
parent's node instead, when looking for a matching DAI based on a
device tree reference.

This allows video device drivers to register a separate child device
for their ASoC side audio functionality.  [And MFDs in general --
broonie]

Signed-off-by: default avatarJyri Sarha <jsarha@ti.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent d6b6c2ca
Loading
Loading
Loading
Loading
+12 −2
Original line number Original line Diff line number Diff line
@@ -895,12 +895,17 @@ static struct snd_soc_dai *snd_soc_find_dai(
{
{
	struct snd_soc_component *component;
	struct snd_soc_component *component;
	struct snd_soc_dai *dai;
	struct snd_soc_dai *dai;
	struct device_node *component_of_node;


	lockdep_assert_held(&client_mutex);
	lockdep_assert_held(&client_mutex);


	/* Find CPU DAI from registered DAIs*/
	/* Find CPU DAI from registered DAIs*/
	list_for_each_entry(component, &component_list, list) {
	list_for_each_entry(component, &component_list, list) {
		if (dlc->of_node && component->dev->of_node != dlc->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 (dlc->of_node && component_of_node != dlc->of_node)
			continue;
			continue;
		if (dlc->name && strcmp(component->name, dlc->name))
		if (dlc->name && strcmp(component->name, dlc->name))
			continue;
			continue;
@@ -3480,11 +3485,16 @@ static int snd_soc_get_dai_name(struct of_phandle_args *args,
				const char **dai_name)
				const char **dai_name)
{
{
	struct snd_soc_component *pos;
	struct snd_soc_component *pos;
	struct device_node *component_of_node;
	int ret = -EPROBE_DEFER;
	int ret = -EPROBE_DEFER;


	mutex_lock(&client_mutex);
	mutex_lock(&client_mutex);
	list_for_each_entry(pos, &component_list, list) {
	list_for_each_entry(pos, &component_list, list) {
		if (pos->dev->of_node != args->np)
		component_of_node = pos->dev->of_node;
		if (!component_of_node && pos->dev->parent)
			component_of_node = pos->dev->parent->of_node;

		if (component_of_node != args->np)
			continue;
			continue;


		if (pos->driver->of_xlate_dai_name) {
		if (pos->driver->of_xlate_dai_name) {