Hi
On 8/8/19 8:52 AM, Kuninori Morimoto wrote:
From: Kuninori Morimoto kuninori.morimoto.gx@renesas.com
To find aux_dev, ASoC is using .name, codec_name, codec_of_node. Here, .name is used to fallback in case of no codec.
But, we already have this kind of component finding method by snd_soc_dai_link_component and soc_find_component(). We shouldn't have duplicated implementation to do same things. This patch adds snd_soc_dai_link_component support to finding aux_dev.
Now, no driver is using only .name. All drivers are using codec_name and/or codec_of_node. This means no driver is finding component from .name so far. (Actually almost all drivers are using .name as just "device name", not for finding component...)
This patch
- add snd_soc_dai_link_component support for aux_dev. legacy style will be removed if all drivers are switched to new style.
- try to find component via snd_soc_dai_link_component. Then, it doesn't try to find via .name, because no driver is using it so far.
Signed-off-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com
include/sound/soc.h | 7 +++++++ sound/soc/soc-core.c | 36 ++++++++++-------------------------- 2 files changed, 17 insertions(+), 26 deletions(-)
diff --git a/include/sound/soc.h b/include/sound/soc.h index c92697e..9dad2bf 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -941,6 +941,7 @@ struct snd_soc_dai_link { #define COMP_CPU(_dai) { .dai_name = _dai, } #define COMP_CODEC(_name, _dai) { .name = _name, .dai_name = _dai, } #define COMP_PLATFORM(_name) { .name = _name } +#define COMP_AUX(_name) { .name = _name } #define COMP_DUMMY() { .name = "snd-soc-dummy", .dai_name = "snd-soc-dummy-dai", }
extern struct snd_soc_dai_link_component null_dailink_component[0]; @@ -971,6 +972,12 @@ struct snd_soc_aux_dev { const char *codec_name; struct device_node *codec_of_node;
- /*
* name, codec_name, codec_of_node will be replaced
* into dlc. don't use both in the same time
*/
- struct snd_soc_dai_link_component dlc;
- /* codec/machine specific init - e.g. add machine controls */ int (*init)(struct snd_soc_component *component);
}; diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index e0d427a..ecaea88 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1531,38 +1531,22 @@ static int soc_bind_aux_dev(struct snd_soc_card *card, int num) { struct snd_soc_aux_dev *aux_dev = &card->aux_dev[num]; struct snd_soc_component *component;
struct snd_soc_dai_link_component dlc;
if (aux_dev->codec_of_node || aux_dev->codec_name) {
/* codecs, usually analog devices */
dlc.name = aux_dev->codec_name;
dlc.of_node = aux_dev->codec_of_node;
component = soc_find_component(&dlc);
if (!component) {
if (dlc.of_node)
dlc.name = of_node_full_name(dlc.of_node);
goto err_defer;
}
} else if (aux_dev->name) {
/* generic components */
dlc.name = aux_dev->name;
dlc.of_node = NULL;
component = soc_find_component(&dlc);
if (!component)
goto err_defer;
} else {
dev_err(card->dev, "ASoC: Invalid auxiliary device\n");
return -EINVAL;
}
- /* remove me */
- if (aux_dev->codec_name)
aux_dev->dlc.name = aux_dev->codec_name;
- if (aux_dev->codec_of_node)
aux_dev->dlc.of_node = aux_dev->codec_of_node;
Bike-shedding: maybe comment here should say legacy style binding etc? I know these lines are removed by patch 13/15 but here yet comment is not valid :-)