]> git.openfabrics.org - ~shefty/rdma-dev.git/blobdiff - sound/arm/pxa2xx-ac97-lib.c
ALSA: pxa27x: fix ac97 cold reset
[~shefty/rdma-dev.git] / sound / arm / pxa2xx-ac97-lib.c
index 6fc0ae90e5b1de99992b288d35035e2a0d061df2..1ecd0a66ecd37384228caaedf27a928eb4cf0d04 100644 (file)
@@ -148,6 +148,8 @@ static inline void pxa_ac97_warm_pxa27x(void)
 
 static inline void pxa_ac97_cold_pxa27x(void)
 {
+       unsigned int timeout;
+
        GCR &=  GCR_COLD_RST;  /* clear everything but nCRST */
        GCR &= ~GCR_COLD_RST;  /* then assert nCRST */
 
@@ -157,8 +159,10 @@ static inline void pxa_ac97_cold_pxa27x(void)
        clk_enable(ac97conf_clk);
        udelay(5);
        clk_disable(ac97conf_clk);
-       GCR = GCR_COLD_RST;
-       udelay(50);
+       GCR = GCR_COLD_RST | GCR_WARM_RST;
+       timeout = 100;     /* wait for the codec-ready bit to be set */
+       while (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR)) && timeout--)
+               mdelay(1);
 }
 #endif