Commit c13cb78a authored by Mark Brown's avatar Mark Brown

Merge branch 'pxa2xx-i2s' into for-2.6.31

parents d34c4307 916465a8
...@@ -106,10 +106,8 @@ static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream, ...@@ -106,10 +106,8 @@ static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream,
if (IS_ERR(clk_i2s)) if (IS_ERR(clk_i2s))
return PTR_ERR(clk_i2s); return PTR_ERR(clk_i2s);
if (!cpu_dai->active) { if (!cpu_dai->active)
SACR0 |= SACR0_RST;
SACR0 = 0; SACR0 = 0;
}
return 0; return 0;
} }
...@@ -178,9 +176,7 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream, ...@@ -178,9 +176,7 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream,
/* is port used by another stream */ /* is port used by another stream */
if (!(SACR0 & SACR0_ENB)) { if (!(SACR0 & SACR0_ENB)) {
SACR0 = 0; SACR0 = 0;
SACR1 = 0;
if (pxa_i2s.master) if (pxa_i2s.master)
SACR0 |= SACR0_BCKD; SACR0 |= SACR0_BCKD;
...@@ -226,6 +222,10 @@ static int pxa2xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd, ...@@ -226,6 +222,10 @@ static int pxa2xx_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
switch (cmd) { switch (cmd) {
case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_START:
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
SACR1 &= ~SACR1_DRPL;
else
SACR1 &= ~SACR1_DREC;
SACR0 |= SACR0_ENB; SACR0 |= SACR0_ENB;
break; break;
case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_RESUME:
...@@ -252,21 +252,16 @@ static void pxa2xx_i2s_shutdown(struct snd_pcm_substream *substream, ...@@ -252,21 +252,16 @@ static void pxa2xx_i2s_shutdown(struct snd_pcm_substream *substream,
SAIMR &= ~SAIMR_RFS; SAIMR &= ~SAIMR_RFS;
} }
if (SACR1 & (SACR1_DREC | SACR1_DRPL)) { if ((SACR1 & (SACR1_DREC | SACR1_DRPL)) == (SACR1_DREC | SACR1_DRPL)) {
SACR0 &= ~SACR0_ENB; SACR0 &= ~SACR0_ENB;
pxa_i2s_wait(); pxa_i2s_wait();
clk_disable(clk_i2s); clk_disable(clk_i2s);
} }
clk_put(clk_i2s);
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int pxa2xx_i2s_suspend(struct snd_soc_dai *dai) static int pxa2xx_i2s_suspend(struct snd_soc_dai *dai)
{ {
if (!dai->active)
return 0;
/* store registers */ /* store registers */
pxa_i2s.sacr0 = SACR0; pxa_i2s.sacr0 = SACR0;
pxa_i2s.sacr1 = SACR1; pxa_i2s.sacr1 = SACR1;
...@@ -281,16 +276,14 @@ static int pxa2xx_i2s_suspend(struct snd_soc_dai *dai) ...@@ -281,16 +276,14 @@ static int pxa2xx_i2s_suspend(struct snd_soc_dai *dai)
static int pxa2xx_i2s_resume(struct snd_soc_dai *dai) static int pxa2xx_i2s_resume(struct snd_soc_dai *dai)
{ {
if (!dai->active)
return 0;
pxa_i2s_wait(); pxa_i2s_wait();
SACR0 = pxa_i2s.sacr0 &= ~SACR0_ENB; SACR0 = pxa_i2s.sacr0 & ~SACR0_ENB;
SACR1 = pxa_i2s.sacr1; SACR1 = pxa_i2s.sacr1;
SAIMR = pxa_i2s.saimr; SAIMR = pxa_i2s.saimr;
SADIV = pxa_i2s.sadiv; SADIV = pxa_i2s.sadiv;
SACR0 |= SACR0_ENB;
SACR0 = pxa_i2s.sacr0;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment