aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2017-10-26 03:45:35 -0400
committerMark Brown <broonie@kernel.org>2017-10-26 03:45:35 -0400
commiteefb175fc227492bfcfadce5409f48911923fa02 (patch)
tree45314543ec64a0b86521016b2b7d6f593a91d56c
parentcc0b8139d87b6d9efa3ae24cdb8d92e48da0143f (diff)
parent5d61f0ba6524dcbad198126e5793157c8afdea91 (diff)
Merge remote-tracking branch 'asoc/fix/pcm' into asoc-linus
-rw-r--r--sound/soc/soc-pcm.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 94b88b897c3b..c0f0b09cb433 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -2632,6 +2632,17 @@ static int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream)
2632 return ret; 2632 return ret;
2633} 2633}
2634 2634
2635static void soc_pcm_private_free(struct snd_pcm *pcm)
2636{
2637 struct snd_soc_pcm_runtime *rtd = pcm->private_data;
2638 struct snd_soc_platform *platform = rtd->platform;
2639
2640 /* need to sync the delayed work before releasing resources */
2641 flush_delayed_work(&rtd->delayed_work);
2642 if (platform->driver->pcm_free)
2643 platform->driver->pcm_free(pcm);
2644}
2645
2635/* create a new pcm */ 2646/* create a new pcm */
2636int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) 2647int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
2637{ 2648{
@@ -2757,7 +2768,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
2757 } 2768 }
2758 } 2769 }
2759 2770
2760 pcm->private_free = platform->driver->pcm_free; 2771 pcm->private_free = soc_pcm_private_free;
2761out: 2772out:
2762 dev_info(rtd->card->dev, "%s <-> %s mapping ok\n", 2773 dev_info(rtd->card->dev, "%s <-> %s mapping ok\n",
2763 (rtd->num_codecs > 1) ? "multicodec" : rtd->codec_dai->name, 2774 (rtd->num_codecs > 1) ? "multicodec" : rtd->codec_dai->name,