From 6c868238a5e083dca4d74439a7fd467b5c7726b0 Mon Sep 17 00:00:00 2001 From: Liam Girdwood Date: Fri, 1 Jun 2007 12:56:55 +0100 Subject: [PATCH] This fixes a bug whereby PCM's were not being suspended when the rest of the audio subsystem was suspended. --- include/sound/soc.h | 3 +++ sound/soc/soc-core.c | 8 ++++++++ 2 files changed, 11 insertions(+), 0 deletions(-) Index: linux-2.6.22/include/sound/soc.h =================================================================== --- linux-2.6.22.orig/include/sound/soc.h 2007-07-09 00:32:17.000000000 +0100 +++ linux-2.6.22/include/sound/soc.h 2007-11-09 16:13:08.000000000 +0000 @@ -411,6 +411,9 @@ /* codec/machine specific init - e.g. add machine controls */ int (*init)(struct snd_soc_codec *codec); + + /* DAI pcm */ + struct snd_pcm *pcm; }; /* SoC machine */ Index: linux-2.6.22/sound/soc/soc-core.c =================================================================== --- linux-2.6.22.orig/sound/soc/soc-core.c 2007-07-09 00:32:17.000000000 +0100 +++ linux-2.6.22/sound/soc/soc-core.c 2007-11-09 16:18:45.000000000 +0000 @@ -639,6 +639,10 @@ dai->dai_ops.digital_mute(dai, 1); } + /* suspend all pcm's */ + for(i = 0; i < machine->num_links; i++) + snd_pcm_suspend_all(machine->dai_link[i].pcm); + if (machine->suspend_pre) machine->suspend_pre(pdev, state); @@ -873,6 +877,7 @@ return ret; } + dai_link->pcm = pcm; pcm->private_data = rtd; soc_pcm_ops.mmap = socdev->platform->pcm_ops->mmap; soc_pcm_ops.pointer = socdev->platform->pcm_ops->pointer;