summaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-core.c
diff options
context:
space:
mode:
authorMark Brown2019-05-30 17:47:43 +0200
committerMark Brown2019-05-30 17:47:43 +0200
commit79b3b7c4a396b9fa1963ac70e853998633e8151d (patch)
treec1e507b4a6fff773ec81e90e1be11f1b35e773b6 /sound/soc/soc-core.c
parentASoC: SOF: add COMPILE_TEST for PCI options (diff)
parentASoC: sun4i-codec: fix first delay on Speaker (diff)
downloadkernel-qcow2-linux-79b3b7c4a396b9fa1963ac70e853998633e8151d.tar.gz
kernel-qcow2-linux-79b3b7c4a396b9fa1963ac70e853998633e8151d.tar.xz
kernel-qcow2-linux-79b3b7c4a396b9fa1963ac70e853998633e8151d.zip
Merge branch 'asoc-5.2' into asoc-5.3
Diffstat (limited to 'sound/soc/soc-core.c')
-rw-r--r--sound/soc/soc-core.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 5f83e2f19801..2d3520fca613 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -228,7 +228,10 @@ static void soc_init_card_debugfs(struct snd_soc_card *card)
static void soc_cleanup_card_debugfs(struct snd_soc_card *card)
{
+ if (!card->debugfs_card_root)
+ return;
debugfs_remove_recursive(card->debugfs_card_root);
+ card->debugfs_card_root = NULL;
}
static void snd_soc_debugfs_init(void)
@@ -1010,12 +1013,14 @@ static void soc_remove_link_components(struct snd_soc_card *card,
struct snd_soc_component *component;
struct snd_soc_rtdcom_list *rtdcom;
+ mutex_lock(&client_mutex);
for_each_rtdcom(rtd, rtdcom) {
component = rtdcom->component;
if (component->driver->remove_order == order)
soc_remove_component(component);
}
+ mutex_unlock(&client_mutex);
}
static void soc_remove_dai_links(struct snd_soc_card *card)
@@ -2035,8 +2040,10 @@ match:
static int soc_cleanup_card_resources(struct snd_soc_card *card)
{
/* free the ALSA card at first; this syncs with pending operations */
- if (card->snd_card)
+ if (card->snd_card) {
snd_card_free(card->snd_card);
+ card->snd_card = NULL;
+ }
/* remove and free each DAI */
soc_remove_dai_links(card);