summaryrefslogtreecommitdiff
path: root/packages/linux/linux-openmoko/soc-core-suspend.patch
blob: 7fb6cc7f7a04a9c05636776319f618a929d84ed9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
From 6c868238a5e083dca4d74439a7fd467b5c7726b0 Mon Sep 17 00:00:00 2001
From: Liam Girdwood <liam@localhost.localdomain>
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;