Wince AC97 reset sequence is as follows : - GPIO89 is setup as output GPIO, alt.func 1 (AC97_SYSCLK) - GPIO28 and GPIO29 are setup as input, alt.func 1 (AC97_BITCLK and AC97_SDATA_IN_0) - GPIO30 and GPIO31 are set (GPSR..) - GPIO30 and GPIO31 are setup as output, alt.func 2 (AC97_SDATA_OUT, AC97_SYNC) - GPIO95 is set - ICMR: AC97 irq is masqued - CKEN |= CKEN2 - call ColdReset() - call WarmReset() - write 0x1111 into ac97 register 0 - call mdelay(10) - call ColdReset() - call WarmReset() ColdReset() - GCR = 0 - GCR |= 1 (AC97 interrupt generator) - GEDR2: Clear edge detect status on GPIO95 - GPIO87 is setup as normal gpio - GPIO95 is set - mdelay(10) - GPIO95 is cleared - mdelay(10) - GPIO95 is set - GCR |= 2 (nRST = 1 => end of cold reset) - mdelay(100) - for (i=0; i < 1000; i++) test GSR.PCRDY == 1 udelay(1/3.25) - return success if (GSR.PCRDY == 1) WarmReset() - GCR |= 0xc0004 (SRDY_IE | PRDY_IE | WRST) - udelay(5/3.25) - for (i=0; i < 1000; i++) test GSR.PCRDY == 1 udelay(1/3.25) - return success if (GSR.PCRDY == 1)