aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/pxa
diff options
context:
space:
mode:
authorDaniel Mack <daniel@caiaq.de>2010-02-02 05:45:27 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-02-02 06:41:53 -0500
commit026384d614b827f368834860c9b623ce08439b7e (patch)
treeae6ad9346a8ff72c8590e4405abf535390b48504 /sound/soc/pxa
parent59cdd9bc057a54384a7838231dd2672a89dff2ac (diff)
ASoC: fix PXA SSP port resume
Unconditionally save the register states when suspending and restore them again at resume time. Register contents were not preserved over suspend, and hence the driver takes false assumptions about them. The clock must be enabled to access the register block. Signed-off-by: Daniel Mack <daniel@caiaq.de> Acked-by: Liam Girdwood <lrg@slimlogic.co.uk> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/pxa')
-rw-r--r--sound/soc/pxa/pxa-ssp.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index 3bd7712f029b..e69397f40f72 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -135,10 +135,11 @@ static int pxa_ssp_suspend(struct snd_soc_dai *cpu_dai)
135 struct ssp_priv *priv = cpu_dai->private_data; 135 struct ssp_priv *priv = cpu_dai->private_data;
136 136
137 if (!cpu_dai->active) 137 if (!cpu_dai->active)
138 return 0; 138 clk_enable(priv->dev.ssp->clk);
139 139
140 ssp_save_state(&priv->dev, &priv->state); 140 ssp_save_state(&priv->dev, &priv->state);
141 clk_disable(priv->dev.ssp->clk); 141 clk_disable(priv->dev.ssp->clk);
142
142 return 0; 143 return 0;
143} 144}
144 145
@@ -146,12 +147,13 @@ static int pxa_ssp_resume(struct snd_soc_dai *cpu_dai)
146{ 147{
147 struct ssp_priv *priv = cpu_dai->private_data; 148 struct ssp_priv *priv = cpu_dai->private_data;
148 149
149 if (!cpu_dai->active)
150 return 0;
151
152 clk_enable(priv->dev.ssp->clk); 150 clk_enable(priv->dev.ssp->clk);
153 ssp_restore_state(&priv->dev, &priv->state); 151 ssp_restore_state(&priv->dev, &priv->state);
154 ssp_enable(&priv->dev); 152
153 if (cpu_dai->active)
154 ssp_enable(&priv->dev);
155 else
156 clk_disable(priv->dev.ssp->clk);
155 157
156 return 0; 158 return 0;
157} 159}