Re: [PATCH] ASoC: core: Always store of_node when getting DAI link component

From: Kuninori Morimoto
Date: Sun Jun 25 2023 - 19:54:40 EST



Hi Mark

Thank you for the patch !

> The generic snd_soc_dai_get_dlc() contains a default translation function
> for DAI names which has factored out common code in a number of card
> drivers, resolving the dai_name and of_node either using a driver provided
> translation function or with a generic implementation. Unfortunately the
> of_node can't be set by the translation function since it currently doesn't
> have an interface to do that but snd_soc_dai_get_dlc() only initialises the
> of_node in the case where there is no translation function.
>
> This breaks the Meson support after conversion to use the generic helpers
> since the DPCM cards for it check which component of the SoC is connected
> to each link by checking the compatible for the component and the Meson
> components provide a custom operation so don't use the generic code.
>
> Fix this and potentially other cards by unconditionally storing the node in
> the dai_link_component, there shouldn't be a binding specific of_node
> selected since that's how we determine the translation function.
>
> Fixes: 2e1dbea1f8a3 ("ASoC: meson: use snd_soc_{of_}get_dlc()")
> Fixes: 3c8b5861850c ("ASoC: soc-core.c: add index on snd_soc_of_get_dai_name()")
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---

Yes, indeed.
But I think we want to set it under lock and if ret was no error case ?

----------
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index ab1f302ee078..5cc3f4cc9d1b 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -3375,7 +3375,6 @@ int snd_soc_get_dlc(const struct of_phandle_args *args, struct snd_soc_dai_link_
id--;
}

- dlc->of_node = args->np;
dlc->dai_name = snd_soc_dai_name_get(dai);
} else if (ret) {
/*
@@ -3389,6 +3388,10 @@ int snd_soc_get_dlc(const struct of_phandle_args *args, struct snd_soc_dai_link_

break;
}
+
+ if (ret == 0)
+ dlc->of_node = args->np;
+
mutex_unlock(&client_mutex);
return ret;
}
-----------

Thank you for your help !!

Best regards
---
Kuninori Morimoto