|
@@ -2632,6 +2632,17 @@ static int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static void soc_pcm_private_free(struct snd_pcm *pcm)
|
|
|
+{
|
|
|
+ struct snd_soc_pcm_runtime *rtd = pcm->private_data;
|
|
|
+ struct snd_soc_platform *platform = rtd->platform;
|
|
|
+
|
|
|
+ /* need to sync the delayed work before releasing resources */
|
|
|
+ flush_delayed_work(&rtd->delayed_work);
|
|
|
+ if (platform->driver->pcm_free)
|
|
|
+ platform->driver->pcm_free(pcm);
|
|
|
+}
|
|
|
+
|
|
|
/* create a new pcm */
|
|
|
int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
|
|
|
{
|
|
@@ -2757,7 +2768,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- pcm->private_free = platform->driver->pcm_free;
|
|
|
+ pcm->private_free = soc_pcm_private_free;
|
|
|
out:
|
|
|
dev_info(rtd->card->dev, "%s <-> %s mapping ok\n",
|
|
|
(rtd->num_codecs > 1) ? "multicodec" : rtd->codec_dai->name,
|