tree d2543863b52be984f10963c87240babd98d59e1d
parent 46c73187f2986e40b427485bb8f4401aa9143ed0
author Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 1535685072 +0000
committer Mark Brown <broonie@kernel.org> 1535727538 +0100
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQFHBAABCgAxFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAluJV7ITHGJyb29uaWVA
 a2VybmVsLm9yZwAKCRAk1otyXVSH0O/HB/4pkEXZyULqJ46cMKmzwZxe5en1tSO+
 yD+HaWjITH3TDbmc5AL2e9mLx0pQH8UW0N2jULVT4XRGczigzlzZE52s69f2X7tX
 QHz3wehh7zDoa6hENtv8Vxe1c3g+/rL0Q3FmOkRnKeLJFjXTnWIAEkHckmDPYxBw
 7IWL4ooIe2oSSf4I3KBBMsp5oLtk02LkhxE4RiG+Bhm2S0eaeFjE6An4WVp74bvB
 WW90VggY6LudIWiwBhLh1BMDcxiQucTqrdrCmqT/pn0HOGxjRVIKurAUUaetQS8u
 qaJUNzHc6FAa68jH7WKoUfywMrSQ9zbJY7cfDgt5eFUZY6SM5Ksf3xoh
 =S21p
 -----END PGP SIGNATURE-----

ASoC: audio-graph-scu-card: support snd_soc_dai_link_component style for platform

Current ASoC is supporting snd_soc_dai_link_component for binding,
it is more useful than current legacy style.
Currently only codec is supporting it as multicodec (= codecs).
CPU will support multi style in the future.
We want to have it on Platform too in the future.

If all Codec/CPU/Platform are replaced into snd_soc_dai_link_component
style, we can remove legacy complex style.
This patch supports snd_soc_dai_link_component style
for audio-graph-scu-card for platform.

[current]
struct snd_soc_dai_link {
	...
	*cpu_name;
	*cpu_of_node;
	*cpu_dai_name;

	*codec_name;
	*codec_of_node;
	*codec_dai_name;
	*codecs;
	num_codecs;

	*platform_name;
	*platform_of_node;
	...
}

[in the future]
struct snd_soc_dai_link {
	...
	*cpus
	num_cpus;

	*codecs;
	num_codecs;

	*platform;
	...
}

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
