ASoC: pxa2xx-i2s: Proper initialization
authorKarl Beldan <karl.beldan@gmail.com>
Mon, 11 May 2009 21:49:41 +0000 (23:49 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 13 May 2009 18:16:00 +0000 (19:16 +0100)
Reset FIFO logic and registers, and make sure REC and RPL functions along
with FIFO service are disabled at probe.

Signed-off-by: Karl Beldan <karl.beldan@mobile-devices.fr>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/pxa/pxa2xx-i2s.c

index 60145770aeba38afbedc8738d89b95fb209b0078..fce8a2894e2cf88855b754c9764d0ffe0beef4a2 100644 (file)
@@ -347,6 +347,19 @@ static int pxa2xx_i2s_probe(struct platform_device *dev)
        if (ret != 0)
                clk_put(clk_i2s);
 
+       /*
+        * PXA Developer's Manual:
+        * If SACR0[ENB] is toggled in the middle of a normal operation,
+        * the SACR0[RST] bit must also be set and cleared to reset all
+        * I2S controller registers.
+        */
+       SACR0 = SACR0_RST;
+       SACR0 = 0;
+       /* Make sure RPL and REC are disabled */
+       SACR1 = SACR1_DRPL | SACR1_DREC;
+       /* Along with FIFO servicing */
+       SAIMR &= ~(SAIMR_RFS | SAIMR_TFS);
+
        return ret;
 }