The FIFO logic and the registers are reset at stream startup with SACR0_RST => the sibling function might suffer and the FIFOs might unpleasantly fill up whence the calls to pxa_i2s_wait all over the place. This gets rid of it.
Signed-off-by: Karl Beldan karl.beldan@mobile-devices.fr --- sound/soc/pxa/pxa2xx-i2s.c | 20 +------------------- 1 files changed, 1 insertions(+), 19 deletions(-)
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c index 0e53d07..755e2d1 100644 --- a/sound/soc/pxa/pxa2xx-i2s.c +++ b/sound/soc/pxa/pxa2xx-i2s.c @@ -106,25 +106,12 @@ static int pxa2xx_i2s_startup(struct snd_pcm_substream *substream, if (IS_ERR(clk_i2s)) return PTR_ERR(clk_i2s);
- if (!cpu_dai->active) { - SACR0 |= SACR0_RST; + if (!cpu_dai->active) SACR0 = 0; - }
return 0; }
-/* wait for I2S controller to be ready */ -static int pxa_i2s_wait(void) -{ - int i; - - /* flush the Rx FIFO */ - for(i = 0; i < 16; i++) - SADR; - return 0; -} - static int pxa2xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt) { @@ -169,7 +156,6 @@ static int pxa2xx_i2s_hw_params(struct snd_pcm_substream *substream,
BUG_ON(IS_ERR(clk_i2s)); clk_enable(clk_i2s); - pxa_i2s_wait();
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) cpu_dai->dma_data = &pxa2xx_i2s_pcm_stereo_out; @@ -256,7 +242,6 @@ static void pxa2xx_i2s_shutdown(struct snd_pcm_substream *substream,
if ((SACR1 & (SACR1_DREC | SACR1_DRPL)) == (SACR1_DREC | SACR1_DRPL)) { SACR0 &= ~SACR0_ENB; - pxa_i2s_wait(); clk_disable(clk_i2s); } } @@ -275,7 +260,6 @@ static int pxa2xx_i2s_suspend(struct snd_soc_dai *dai)
/* deactivate link */ SACR0 &= ~SACR0_ENB; - pxa_i2s_wait(); return 0; }
@@ -284,8 +268,6 @@ static int pxa2xx_i2s_resume(struct snd_soc_dai *dai) if (!dai->active) return 0;
- pxa_i2s_wait(); - SACR0 = pxa_i2s.sacr0 &= ~SACR0_ENB; SACR1 = pxa_i2s.sacr1; SAIMR = pxa_i2s.saimr;