aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sound/soc/soc-core.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 93efab486736..8c63d32ab2fe 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1048,7 +1048,7 @@ static int snd_soc_init_platform(struct snd_soc_card *card,
* soc.h :: struct snd_soc_dai_link
*/
/* convert Legacy platform link */
- if (!platform || dai_link->legacy_platform) {
+ if (!platform) {
platform = devm_kzalloc(card->dev,
sizeof(struct snd_soc_dai_link_component),
GFP_KERNEL);
@@ -1071,6 +1071,24 @@ static int snd_soc_init_platform(struct snd_soc_card *card,
return 0;
}
+static void soc_cleanup_platform(struct snd_soc_card *card)
+{
+ struct snd_soc_dai_link *link;
+ int i;
+ /*
+ * FIXME
+ *
+ * this function should be removed with snd_soc_init_platform
+ */
+
+ for_each_card_prelinks(card, i, link) {
+ if (link->legacy_platform) {
+ link->legacy_platform = 0;
+ link->platforms = NULL;
+ }
+ }
+}
+
static int snd_soc_init_multicodec(struct snd_soc_card *card,
struct snd_soc_dai_link *dai_link)
{
@@ -2015,6 +2033,7 @@ static int soc_cleanup_card_resources(struct snd_soc_card *card)
/* remove and free each DAI */
soc_remove_dai_links(card);
soc_remove_pcm_runtimes(card);
+ soc_cleanup_platform(card);
/* remove auxiliary devices */
soc_remove_aux_devices(card);