diff options
Diffstat (limited to 'meta/packages/linux/linux-openmoko/iis-suspend.patch')
-rw-r--r-- | meta/packages/linux/linux-openmoko/iis-suspend.patch | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/meta/packages/linux/linux-openmoko/iis-suspend.patch b/meta/packages/linux/linux-openmoko/iis-suspend.patch new file mode 100644 index 0000000000..ab38672463 --- /dev/null +++ b/meta/packages/linux/linux-openmoko/iis-suspend.patch | |||
@@ -0,0 +1,63 @@ | |||
1 | Index: linux-2.6.22/sound/soc/s3c24xx/s3c24xx-i2s.c | ||
2 | =================================================================== | ||
3 | --- linux-2.6.22.orig/sound/soc/s3c24xx/s3c24xx-i2s.c 2007-11-09 16:13:04.000000000 +0000 | ||
4 | +++ linux-2.6.22/sound/soc/s3c24xx/s3c24xx-i2s.c 2007-11-09 16:17:47.000000000 +0000 | ||
5 | @@ -75,6 +75,10 @@ | ||
6 | struct s3c24xx_i2s_info { | ||
7 | void __iomem *regs; | ||
8 | struct clk *iis_clk; | ||
9 | + u32 iiscon; | ||
10 | + u32 iismod; | ||
11 | + u32 iisfcon; | ||
12 | + u32 iispsr; | ||
13 | }; | ||
14 | static struct s3c24xx_i2s_info s3c24xx_i2s; | ||
15 | |||
16 | @@ -404,6 +408,38 @@ | ||
17 | return 0; | ||
18 | } | ||
19 | |||
20 | +#ifdef CONFIG_PM | ||
21 | +int s3c24xx_i2s_suspend(struct platform_device *pdev, | ||
22 | + struct snd_soc_cpu_dai *cpu_dai) | ||
23 | +{ | ||
24 | + s3c24xx_i2s.iiscon=readl(s3c24xx_i2s.regs + S3C2410_IISCON); | ||
25 | + s3c24xx_i2s.iismod=readl(s3c24xx_i2s.regs + S3C2410_IISMOD); | ||
26 | + s3c24xx_i2s.iisfcon=readl(s3c24xx_i2s.regs + S3C2410_IISFCON); | ||
27 | + s3c24xx_i2s.iispsr=readl(s3c24xx_i2s.regs + S3C2410_IISPSR); | ||
28 | + | ||
29 | + clk_disable(s3c24xx_i2s.iis_clk); | ||
30 | + | ||
31 | + return 0; | ||
32 | +} | ||
33 | + | ||
34 | +int s3c24xx_i2s_resume(struct platform_device *pdev, | ||
35 | + struct snd_soc_cpu_dai *cpu_dai) | ||
36 | +{ | ||
37 | + clk_enable(s3c24xx_i2s.iis_clk); | ||
38 | + | ||
39 | + writel(s3c24xx_i2s.iiscon, s3c24xx_i2s.regs + S3C2410_IISCON); | ||
40 | + writel(s3c24xx_i2s.iismod, s3c24xx_i2s.regs + S3C2410_IISMOD); | ||
41 | + writel(s3c24xx_i2s.iisfcon, s3c24xx_i2s.regs + S3C2410_IISFCON); | ||
42 | + writel(s3c24xx_i2s.iispsr, s3c24xx_i2s.regs + S3C2410_IISPSR); | ||
43 | + | ||
44 | + return 0; | ||
45 | +} | ||
46 | +#else | ||
47 | +#define s3c24xx_i2s_suspend NULL | ||
48 | +#define s3c24xx_i2s_resume NULL | ||
49 | +#endif | ||
50 | + | ||
51 | + | ||
52 | #define S3C24XX_I2S_RATES \ | ||
53 | (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \ | ||
54 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \ | ||
55 | @@ -414,6 +450,8 @@ | ||
56 | .id = 0, | ||
57 | .type = SND_SOC_DAI_I2S, | ||
58 | .probe = s3c24xx_i2s_probe, | ||
59 | + .suspend = s3c24xx_i2s_suspend, | ||
60 | + .resume = s3c24xx_i2s_resume, | ||
61 | .playback = { | ||
62 | .channels_min = 2, | ||
63 | .channels_max = 2, | ||