[ALSA] soc - Ensure PCMs are suspended

This fixes a bug whereby PCMs were not being suspended when the rest of the
audio subsystem was suspended.

Signed-off-by: Liam Girdwood <lg@opensource.wolfsonmicro.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Liam Girdwood 2008-01-10 14:39:01 +01:00 committed by Jaroslav Kysela
parent 3c1c47e0eb
commit 4ccab3e72e
2 changed files with 8 additions and 0 deletions

View file

@ -447,6 +447,9 @@ struct snd_soc_dai_link {
/* codec/machine specific init - e.g. add machine controls */ /* codec/machine specific init - e.g. add machine controls */
int (*init)(struct snd_soc_codec *codec); int (*init)(struct snd_soc_codec *codec);
/* DAI pcm */
struct snd_pcm *pcm;
}; };
/* SoC machine */ /* SoC machine */

View file

@ -645,6 +645,10 @@ static int soc_suspend(struct platform_device *pdev, pm_message_t state)
dai->dai_ops.digital_mute(dai, 1); dai->dai_ops.digital_mute(dai, 1);
} }
/* suspend all pcms */
for (i = 0; i < machine->num_links; i++)
snd_pcm_suspend_all(machine->dai_link[i].pcm);
if (machine->suspend_pre) if (machine->suspend_pre)
machine->suspend_pre(pdev, state); machine->suspend_pre(pdev, state);
@ -879,6 +883,7 @@ static int soc_new_pcm(struct snd_soc_device *socdev,
return ret; return ret;
} }
dai_link->pcm = pcm;
pcm->private_data = rtd; pcm->private_data = rtd;
soc_pcm_ops.mmap = socdev->platform->pcm_ops->mmap; soc_pcm_ops.mmap = socdev->platform->pcm_ops->mmap;
soc_pcm_ops.pointer = socdev->platform->pcm_ops->pointer; soc_pcm_ops.pointer = socdev->platform->pcm_ops->pointer;