Hi All,
I am reading the samsung s2440 Ac97 driver.
The AC97 use the IIS bus ,and why does it configure the GPIO as following:
BOOL HardwareContext::AC97_Init()
{
RETAILMSG(AC97_DEBUG,(_T("WAVDEV_AC97::AC97_Init()++\r\n")));
//----- 1. IMPORTANT: By default, the internal clock is disabled. To
configure the controller ------
// we must first enable it.
g_pCLKPWRreg->rCLKCON |= AC97_INTERNAL_CLOCK_ENABLE; // Enable the CPU
clock to the AC97 controller
AC97_GPIO_Init();
v_pAC97regs->rAC_GLBCTRL = 0;
Delay(10); //Sleep(5);
// Write into the AC97 Global Control Register
//Cold Reset
v_pAC97regs->rAC_GLBCTRL = 0x1;
Delay(10); //Sleep(5);
v_pAC97regs->rAC_GLBCTRL = 0x0;
Delay(10); //Sleep(5);
//AC-link On
v_pAC97regs->rAC_GLBCTRL = (1<<2);
Delay(10); //Sleep(5);
//Transfer data enable using AC-link
v_pAC97regs->rAC_GLBCTRL = v_pAC97regs->rAC_GLBCTRL | (1<<3);
Delay(10); //Sleep(5);
// Disable the Codec ready Interrupt
v_pAC97regs->rAC_GLBCTRL = v_pAC97regs->rAC_GLBCTRL | (1<<22);
Delay(10); //Sleep(5);
//while (!(v_pAC97regs->rAC_GLBSTAT& 0x400000));
RETAILMSG(AC97_DEBUG,(_T("WAVEDEV_AC97::AC97 Codec Ready!\r\n")));
v_pAC97regs->rAC_GLBCTRL &= ~(0x400000); // codec ready interrupt disable
Delay(10); //Sleep(5);
v_pAC97regs->rAC_GLBCTRL = (v_pAC97regs->rAC_GLBCTRL & ~(0x3f<<8)) |
0x0000; // PCM_OUT=OFF,PCM_IN=OFF,MIC=OFF;
//v_pAC97regs->rAC_GLBCTRL = (v_pAC97regs->rAC_GLBCTRL & ~(0x3f<<8)) |
0x2200; // PCM_OUT=DMA,PCM_IN=OFF,MIC=DMA;
RETAILMSG(AC97_DEBUG,(_T("WAVDEV_AC97::AC97_Init()--\r\n")));
return TRUE;
}
void AC97_GPIO_Init()
{
//----- 2. Configure the GPIO pins for AC97 mode -----
//
// AC_SDATA_OUT - GPE4
// AC_SDATA_IN - GPE3
// AC_nRESET - GPE2
// AC_BIT_CLK - GPE1
// AC_SYNC - GPE0
//
// Port Init for AC97
//PG[4:0]=AC_SDATA_OUT:AC_SDATA_IN:AC_nRESET:AC_BIT_CLK:AC_SYNC
v_pIOPregs->rGPECON = ((v_pIOPregs->rGPECON & 0xfffffc00) | 0x3ff);
v_pIOPregs->rGPEUP = (v_pIOPregs->rGPEUP & ~(0x1f)) | 0x1f;
}
Many thanks,
Peter