www.pudn.com > 6027_HD65.rar > ADAC.c
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 04/08/02 1:37p $ ****************/
/*************** $Revision:: 13 $ ****************/
/*************** ****************/
/*************** Description : Audio DAC Module ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : Alan Hsu ****************/
/**********************************************************************/
#define _C_ADAC_
#include "general.h"
#pragma NOAREGS
#ifndef _NPADAC_
BYTE xdata _bAudioSample; // 0->50k, 1->100k, 2->200k
#endif
#ifdef _PCM1723_
extern void vADAC1723Setting(WORD wValue) large;
#endif
#ifdef _PCM1604_
extern BYTE bDA1604Read(BYTE bIndex) large;
extern void vDA1604Write(BYTE bIndex, BYTE bValue) large;
#endif
#if (defined(_PCM1742_) || defined(_WM8746_) || defined(_AK4357_) || defined(_AK4356_) || defined(_AK4382_))
extern void vADACWrite(BYTE bRegAddr, BYTE bValue) large;
#endif
#if (defined(_AV2188_) || defined(_AV2388_))
/*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x AV2188 Serial Port Control Register Assignment x
x--------------------------------------------------------------------x
x Default Value = 80h for 0 ~ 2. Device Addr : 0x31 x
x--------------------------------------------------------------------x
x 0 CREG0[7:0] : Data Inout Format, de-emphasis filter selection x
x 1 CREG1[7:0] : DAC and ADC power down control x
x 2 VOLREG[7:0] : Volume Control x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
BYTE bData;
bData = 0x00; //Enable auto-mute function
fgI2CByteWrite(0x31, 0x00, bData); // 24-bit, Right-Justified Format
bData = 0x00;
fgI2CByteWrite(0x31, 0x01, bData); // Power On DAC
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
BYTE bData;
switch(bDataFormat)
{
case RTJ_16BIT:
bData = 0x38;
break;
case RTJ_18BIT:
bData = 0x28;
break;
case RTJ_20BIT:
bData = 0x18;
break;
case RTJ_24BIT:
bData = 0x08;
break;
case I2S_16BIT:
bData = 0x78;
break;
case I2S_18BIT:
bData = 0x68;
break;
case I2S_20BIT:
bData = 0x58;
break;
case I2S_24BIT:
bData = 0x48;
break;
case LTJ_16BIT:
bData = 0xB8;
break;
case LTJ_18BIT:
bData = 0xA8;
break;
case LTJ_20BIT:
bData = 0x98;
break;
case LTJ_24BIT:
bData = 0x88;
break;
default:
bData = 0x08; //24-bit, RTJ
break;
}
fgI2CByteWrite(0x31, 0x00, bData);
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
BYTE bData;
if((bReadAUD(AUD_AOUTCFG) & 0x30) == 0x20) // Left-Justified
{
bData = 0x88;
}
else if((bReadAUD(AUD_AOUTCFG) & 0x30) == 0x30) // I2S Format
{
bData = 0x48;
}
else // Right-Justified
{
bData = 0x08;
}
if(bReadAUD(AUD_ADACCFG) == 16) // 16-bit
{
bData = bData + 0x30;
}
else if(bReadAUD(AUD_ADACCFG) == 18) // 18-bit
{
bData = bData + 0x20;
}
else if(bReadAUD(AUD_ADACCFG) == 20) // 20-bit
{
bData = bData + 0x10;
}
else if(bReadAUD(AUD_ADACCFG) == 24) // 24-bit
{
bData = bData + 0x00;
}
bData = bData + (BYTE)fgEnable;
fgI2CByteWrite(0x31, 0x00, bData);
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
BYTE bData;
if(fgEnable)
{
bData = 0x00;
}
else
{
bData = 0x87;
}
fgI2CByteWrite(0x31, 0x01, bData);
}
#endif //_AV2188_, _AV2388_
#ifdef _CS4228_
/************************************************************************
Function : void ADACInit(void)
Description : Audio DAC initial
Parameter : None
Return : None
************************************************************************/
void ADACInit(void) large
{
BYTE bData;
bData = 0x08;
fgI2CByteWrite(0x10, 0x01, bData);
// bData = 0x80;
// fgI2CByteWrite(0x10, 0x02, bData);
bData = 0x80;
fgI2CByteWrite(0x10, 0x03, bData);
bData = 0x00;
fgI2CByteWrite(0x10, 0x04, bData);
//Enable Mute Control Normal
#ifdef DAC_EXTPIN_MUTE
bData = 0x40;
fgI2CByteWrite(0x10, 0x05, bData);
#endif
bData = 0x80;
fgI2CByteWrite(0x10, 0x06, bData);
//Volume Control, Improve the Hardware-->Modified by hardware setting
bData = 0x04;
fgI2CByteWrite(0x10, 0x07, bData);
fgI2CByteWrite(0x10, 0x08, bData);
fgI2CByteWrite(0x10, 0x09, bData);
fgI2CByteWrite(0x10, 0x0A, bData);
fgI2CByteWrite(0x10, 0x0B, bData);
fgI2CByteWrite(0x10, 0x0C, bData);
//24-bit, right-justified
bData = 0x40;
fgI2CByteWrite(0x10, 0x0D, bData);
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
BYTE bData;
switch(bDataFormat)
{
case RTJ_16BIT:
case RTJ_18BIT:
bData = 0x42;
break;
case RTJ_20BIT:
bData = 0x41;
break;
case RTJ_24BIT:
bData = 0x40;
break;
case I2S_16BIT:
case I2S_18BIT:
case I2S_20BIT:
case I2S_24BIT:
bData = 0x44;
break;
case LTJ_16BIT:
case LTJ_18BIT:
case LTJ_20BIT:
case LTJ_24BIT:
bData = 0x43;
break;
default:
bData = 0x40; //24-bit, RTJ
break;
}
fgI2CByteWrite(0x10, 0x0D, bData);
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
BYTE bData;
if(fgEnable)
{
bData = 0xBF;
}
else
{
bData = 0x80;
}
fgI2CByteWrite(0x10, 0x06, bData);
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
BYTE bData;
if(fgEnable)
{
bData = 0x80;
}
else
{
bData = 0x00;
}
fgI2CByteWrite(0x10, 0x02, bData);
}
#endif //_CS4228//
#ifdef _PCM1604_
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
//default auto-mute off
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
BYTE bData;
switch(bDataFormat)
{
case RTJ_16BIT:
bData = 0x03;
break;
case RTJ_18BIT:
bData = 0x02;
break;
case RTJ_20BIT:
bData = 0x01;
break;
case RTJ_24BIT:
bData = 0x00;
break;
case I2S_16BIT:
bData = 0x04;
break;
case I2S_18BIT:
bData = 0x04;
break;
case I2S_20BIT:
bData = 0x04;
break;
case I2S_24BIT:
bData = 0x04;
break;
case LTJ_16BIT:
bData = 0x05;
break;
case LTJ_18BIT:
bData = 0x05;
break;
case LTJ_20BIT:
bData = 0x05;
break;
case LTJ_24BIT:
bData = 0x05;
break;
default:
bData = 0x00; //24-bit, RTJ
break;
}
vDA1604Write(0x09, bData);
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
if(fgEnable)
{
vDA1604Write(0x0A, 0x07);
}
else
{
vDA1604Write(0x0A, 0x00);
}
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
BYTE bData;
if(fgEnable)
{
bData = 0x00;
}
else
{
bData = 0x7F;
}
vDA1604Write(0x08, bData);
}
#endif //_PCM1604_
#ifdef _PCM1723_
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
vADAC1723Setting(0x0530); // 24-bit data, Stereo output (register 2)
vADAC1723Setting(0x0740); //Right-Justified format (register 3)
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
switch(bDataFormat)
{
case RTJ_16BIT:
vADAC1723Setting(0x0520);
_bSerialBus = 0;
break;
case RTJ_18BIT: //Using I2S Format
; // No 18-bit setting, no change
_bSerialBus = 1;
break;
case RTJ_20BIT:
vADAC1723Setting(0x0528);
_bSerialBus = 0;
break;
case RTJ_24BIT:
vADAC1723Setting(0x0530);
_bSerialBus = 0;
break;
case I2S_16BIT:
vADAC1723Setting(0x0520);
_bSerialBus = 1;
break;
case I2S_18BIT:
; // No 18-bit setting, no change
_bSerialBus = 1;
break;
case I2S_20BIT:
vADAC1723Setting(0x0528);
_bSerialBus = 1;
break;
case I2S_24BIT:
vADAC1723Setting(0x0530);
_bSerialBus = 1;
break;
case LTJ_16BIT:
vADAC1723Setting(0x0520);
_bSerialBus = 1; //No Left Justified-->Change to I2S
break;
case LTJ_18BIT:
; // No 18-bit setting, no change
_bSerialBus = 1; //No Left Justified-->Change to I2S
break;
case LTJ_20BIT:
vADAC1723Setting(0x0528);
_bSerialBus = 1; //No Left Justified-->Change to I2S
break;
case LTJ_24BIT:
vADAC1723Setting(0x0530);
_bSerialBus = 1; //No Left Justified-->Change to I2S
break;
default:
vADAC1723Setting(0x0530); //RTJ_24BIT
_bSerialBus = 0;
break;
}
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
BYTE bData;
if(bReadAUD(AUD_ADACCFG) == 16) //the Data to 16bit
{
bData = 0x0520 + ((BYTE)fgEnable<<1);
}
else if(bReadAUD(AUD_ADACCFG) == 20) //the Data to 18bit
{
bData = 0x0528 + ((BYTE)fgEnable<<1);
}
else //the Data to 24bit
{
bData = 0x0530 + ((BYTE)fgEnable<<1);
}
vADAC1723Setting(bData);
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
}
#endif // _PCM1723_
#ifdef _PCM1742_
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
//default auto-mute off
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
BYTE bData;
switch(bDataFormat)
{
case RTJ_16BIT:
bData = 0x03;
break;
case RTJ_18BIT:
bData = 0x02;
break;
case RTJ_20BIT:
bData = 0x01;
break;
case RTJ_24BIT:
bData = 0x00;
break;
case I2S_16BIT:
case I2S_18BIT:
case I2S_20BIT:
case I2S_24BIT:
bData = 0x04;
break;
case LTJ_16BIT:
case LTJ_18BIT:
case LTJ_20BIT:
case LTJ_24BIT:
default:
bData = 0x05; //24-bit, LTJ
break;
}
vADACWrite(0x14, bData);
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
BYTE bData = 0x00;
if(fgEnable)
{
bData = 0x10;
}
vADACWrite(0x13, bData);
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
BYTE bData = 0x00;
if(fgEnable == 0)
{
bData = 0x03;
}
vADACWrite(0x13, bData);
}
#endif //_PCM1742_
#ifdef _WM8746_
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
vADACFormat(RTJ_24BIT);
vADACPower(TRUE);
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
BYTE bData;
switch(bDataFormat)
{
case RTJ_16BIT:
bData = 0x00;
break;
case RTJ_18BIT:
case RTJ_20BIT:
bData = 0x10;
break;
case RTJ_24BIT:
bData = 0x20;
break;
case I2S_16BIT:
bData = 0x02;
break;
case I2S_18BIT: //no 18-bit
case I2S_20BIT:
bData = 0x12;
break;
case I2S_24BIT:
bData = 0x22;
break;
case LTJ_16BIT:
bData = 0x01;
break;
case LTJ_18BIT:
case LTJ_20BIT:
bData = 0x11;
break;
case LTJ_24BIT:
bData = 0x21;
break;
default:
bData = 0x20; //24-bit, RTJ
break;
}
vADACWrite(0x03, bData);
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
BYTE bData;
if(fgEnable)
{
bData = 0x22;
}
else
{
bData = 0x20;
}
vADACWrite(0x02, bData);
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
BYTE bData;
if(fgEnable)
{
bData = 0x20;
}
else
{
bData = 0x24;
}
vADACWrite(0x02, bData);
}
#endif // _WM8746_
#if (defined(_AK4357_) || defined(_AK4356_))
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
#ifdef _AK4357_
vADACDSDOn(0);
vADACWrite(0x00, 0x99); //24-bit, RTJ
#endif
#ifdef _AK4356_
vADACWrite(0x00, 0x19); //24-bit, RTJ
vADACWrite(0x01, 0x0D); //Mode 3, 48K and 96K are 384FS
#endif
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
BYTE bData;
vADACWrite(0x00, 0x00); //Reset ADAC
vADACWrite(0x02, 0x0E); //Reset ADAC
switch(bDataFormat)
{
case RTJ_16BIT:
bData = 0x00;
break;
case RTJ_18BIT: //Using I2S Format
bData = 0x03;
break;
case RTJ_20BIT:
bData = 0x01;
break;
case RTJ_24BIT:
bData = 0x04;
break;
case I2S_16BIT:
case I2S_18BIT:
case I2S_20BIT:
case I2S_24BIT:
bData = 0x03;
break;
case LTJ_16BIT: //Using I2S Format
case LTJ_18BIT:
case LTJ_20BIT:
bData = 0x03;
break;
case LTJ_24BIT:
bData = 0x02;
break;
default:
bData = 0x04; //24-bit, RTJ
break;
}
#ifdef _AK4357_
bData = 0x90 + (bData << 1) + 1;
#endif
#ifdef _AK4356_
bData = 0x10 + (bData << 1) + 1;
#endif
//Decide which sampling rates
if(_bAudioSample <= 0x05) //FS384_48K
{
vADACWrite(0x02, 0x0F);
}
else if(_bAudioSample <= 0x08) //FS384_96K
{
vADACWrite(0x02, 0x1F);
}
else
{
vADACWrite(0x02, 0x2F);
}
vADACWrite(0x00, bData);
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
BYTE bData;
if(fgEnable)
{
bData = 0x00;
}
else
{
bData = 0x01;
}
vADACWrite(0x03, bData);
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Power UP , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
BYTE bData;
if(fgEnable)
{
bData = 0x0F;
}
else
{
bData = 0x01;
}
vADACWrite(0x02, bData);
}
#ifdef _AK4357_
/************************************************************************
Function : void vADACDSDOn(BOOL fgEnable)
Description : DSD data output Control
Parameter : fgEnable : 1->DSD , 0-> PCM
Return : NONE
************************************************************************/
void vADACDSDOn(BOOL fgEnable) large
{
BYTE bData, bData1;
vADACWrite(0x02, 0x0E);
if(fgEnable)
{
#ifndef AUDIO_256FS
bData = 0x30; // DCKS = 1 , D/P = 1
#else
bData = 0x10; // DCKS = 1 , D/P = 1
#endif
}
else
{
bData = 0x00;
}
vADACWrite(0x0A, bData);
//Setting ADSP Register
bData1 = bReadAUD(AUD_AOUTCFG);
bData1 = bData1 & 0xF7;
if(fgEnable)
{
WriteAUD(AUD_ACLKCFG, 0x66);
vAClkSetting(0x0B); //FS768_44K
bData1 = bData1 + 0X08;
}
else
{
#ifndef AUDIO_256FS
WriteAUD(AUD_ACLKCFG, 0x64); //Setting the Audio Clk to Internal Clk
#else
WriteAUD(AUD_ACLKCFG, 0x42); //Setting the Audio Clk to Internal Clk
#endif
vAClkSetting(0x04); //FS384_44K
}
WriteAUD(AUD_AOUTCFG, bData1);
vADACWrite(0x02, 0x0F);
}
#endif //_AK4357_
#endif //_AK4357_ || _AK4356_
#ifdef _WM8756_
/************************************************************************
Function : void vADACWrite(BYTE bRegAddr, BYTE bValue)
Description : Write Routine
timing :
ASTB(CSN) --|_____________________________________________|-------|
VSCK(CCLK) --|_|^|_|^|_|^|_|^|_|^|_|^|_|^|_|^|_|^|__~__|_|^|-------
VSDA(CDTI) __| 0 | 0 |R/W| A4| A3| A2| A1| A0| D7|__~__|D0 |XXXXXXXX
Parameter : 1. bRegAddr 2. bValue
Return : NONE
************************************************************************/
/*
void vADACWrite(BYTE bRegAddr, BYTE bValue) large
{
}
*/
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
// vADACDSDOn(0);
BYTE bTmp;
//open ACLK,ABCK,ALRCK
bTmp = bReadBIM(BIM_SIFData);
WriteBIM(BIM_SIFSel, 0x14);
WriteBIM(BIM_SIFData, 0x01);
WriteBIM(BIM_SIFSel, bTmp);
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
}
/************************************************************************
Function : void vADACDSDOn(BOOL fgEnable)
Description : DSD data output Control
Parameter : fgEnable : 1->DSD , 0-> PCM
Return : NONE
************************************************************************/
void vADACDSDOn(BOOL fgEnable) large
{
#if 0
BYTE bData, bData1;
if(fgEnable)
{
// _fgOPcmOn = 0; //DSD Mode
}
else
{
// _fgOPcmOn = 1; //PCM Mode
}
// ReFreshMT1336IO07();
//Setting ADSP Register
bData1 = bReadAUD(AUD_AOUTCFG);
bData1 = bData1 & 0xF7;
if(fgEnable)
{
WriteAUD(AUD_ACLKCFG, 0x66);
vAClkSetting(0x0B); //FS768_44K
bData1 = bData1 + 0X08;
}
else
{
#ifndef AUDIO_256FS
WriteAUD(AUD_ACLKCFG, 0x64); //Setting the Audio Clk to Internal Clk
#else
WriteAUD(AUD_ACLKCFG, 0x42); //Setting the Audio Clk to Internal Clk
#endif
vAClkSetting(0x04); //FS384_44K
}
WriteAUD(AUD_AOUTCFG, bData1);
#endif
}
#endif //_WM8756_
#if (defined(_CS4360_) || defined(_CS4362_))
/*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x CS4360 Serial Port Control Register Assignment x
x--------------------------------------------------------------------x
x Device Addr : 0x10 x
x--------------------------------------------------------------------x
x Audio Format : Left Justified 16~24bit x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
BYTE bData;
//Enable I2C Control Port
#ifdef _CS4362_
bData = 0x81;
fgI2CByteWrite(0x18, 0x01, bData);
#else
bData = 0xA8;
fgI2CByteWrite(0x10, 0x0C, bData); // Power On DAC
#ifndef DAC_EXTPIN_MUTE
//Disable auto-mute function to use mute pin
bData = 0x00;
fgI2CByteWrite(0x10, 0x01, bData); // Power On DAC
#endif
#endif
//Reduce the chip volume control to avoid overflow
//44kHz, 0dB, 96kHz Fs testing bitstream
#ifdef _CS4362_
bData = 0x80;
fgI2CByteWrite(0x18, 0x07, bData);
fgI2CByteWrite(0x18, 0x08, bData);
fgI2CByteWrite(0x18, 0x0a, bData);
fgI2CByteWrite(0x18, 0x0b, bData);
fgI2CByteWrite(0x18, 0x0d, bData);
fgI2CByteWrite(0x18, 0x0e, bData);
vI2CDelay2us(250);
fgI2CByteWrite(0x18, 0x01, bData);
#else
bData = 0x01;
fgI2CByteWrite(0x10, 0x06, bData); // Reduce the volume
fgI2CByteWrite(0x10, 0x07, bData); // Reduce the volume
fgI2CByteWrite(0x10, 0x08, bData); // Reduce the volume
fgI2CByteWrite(0x10, 0x09, bData); // Reduce the volume
fgI2CByteWrite(0x10, 0x0A, bData); // Reduce the volume
fgI2CByteWrite(0x10, 0x0B, bData); // Reduce the volume
#endif
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
BYTE bData;
switch(bDataFormat)
{
case RTJ_16BIT:
bData = 0x20;
break;
case RTJ_18BIT:
bData = 0x50;
break;
case RTJ_20BIT:
bData = 0x40;
break;
case RTJ_24BIT:
bData = 0x30;
break;
case I2S_16BIT:
case I2S_18BIT:
case I2S_20BIT:
case I2S_24BIT:
bData = 0x10;
break;
case LTJ_16BIT:
case LTJ_18BIT:
case LTJ_20BIT:
case LTJ_24BIT:
default:
bData = 0x00; //24-bit, LTJ
break;
}
#ifdef _CS4362_
fgI2CByteWrite(0x18, 0x02, bData);
//Decide which sampling rates
if(_bAudioSample <= 0x05) //FS384_48K
bData = 0x24;
else if(_bAudioSample <= 0x08) //FS384_96K
bData = 0x25;
else
bData = 0x26;
fgI2CByteWrite(0x18, 0x06, bData);
fgI2CByteWrite(0x18, 0x09, bData);
fgI2CByteWrite(0x18, 0x0c, bData);
fgI2CByteWrite(0x18, 0x0f, bData);
#else
//Decide which sampling rates
if(_bAudioSample <= 0x05) //FS384_48K
{
bData = bData + 0x00;
}
else if(_bAudioSample <= 0x08) //FS384_96K
{
bData = bData + 0x01;
}
else
{
bData = bData + 0x02;
}
fgI2CByteRead(0x10, 0x01, &bDataFormat);
bData = (bDataFormat&0x8C) + bData;
fgI2CByteWrite(0x10, 0x01, bData);
#endif
#ifdef _CS4362_
bData = 0x01;
fgI2CByteWrite(0x18, 0x07, bData);
fgI2CByteWrite(0x18, 0x08, bData);
fgI2CByteWrite(0x18, 0x0a, bData);
fgI2CByteWrite(0x18, 0x0b, bData);
fgI2CByteWrite(0x18, 0x0d, bData);
fgI2CByteWrite(0x18, 0x0e, bData);
#endif
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
BYTE bData;
#ifdef _CS4362_
fgI2CByteRead(0x18, 0x04, &bData);
bData = bData & 0xF9;
if(fgEnable)
{
bData = bData + 0x02;
}
fgI2CByteWrite(0x18, 0x04, bData);
#else
fgI2CByteRead(0x10, 0x01, &bData);
bData = bData & 0xF3;
if(fgEnable)
{
bData = bData + 0x04;
}
fgI2CByteWrite(0x10, 0x01, bData);
#endif
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
BYTE bData;
fgI2CByteRead(0x10, 0x0C, &bData);
bData = bData & 0xEF;
if(fgEnable == 0)
{
bData = bData | 0x10;
}
fgI2CByteWrite(0x10, 0x0C, bData);
}
#endif //_CS4360_
#ifdef _AK4382_
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
vADACWrite(0x00, 0x8B); //24-bit, RTJ
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
switch(bDataFormat)
{
case RTJ_16BIT:
vADACWrite(0x00, 0x83);
break;
case RTJ_18BIT:
; // No 18-bit RTJ setting, no change
break;
case RTJ_20BIT:
vADACWrite(0x00, 0x87);
break;
case RTJ_24BIT:
vADACWrite(0x00, 0x93);
break;
case I2S_16BIT:
; // No 16-bit I2S setting, no change
break;
case I2S_18BIT:
; // No 18-bit I2S setting, no change
break;
case I2S_20BIT:
; // No 20-bit I2S setting, no change
break;
case I2S_24BIT:
vADACWrite(0x00, 0x8F);
break;
case LTJ_16BIT:
; // No 16-bit LTJ setting, no change
break;
case LTJ_18BIT:
; // No 18-bit LTJ setting, no change
break;
case LTJ_20BIT:
; // No 20-bit LTJ setting, no change
break;
case LTJ_24BIT:
vADACWrite(0x00, 0x8B);
break;
default:
vADACWrite(0x00, 0x8B);
break;
}
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
if(fgEnable == 1)
{
vADACWrite(0x00, 0x89);
}
}
#endif //_AK4382_
#ifdef _CS4391_
/*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x CS4391 Serial Port Control Register Assignment x
x--------------------------------------------------------------------x
x Device Addr : 0x10 or 0x11 x
x--------------------------------------------------------------------x
x Audio Format : Left Justified 16~24bit x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
BYTE bData;
//Enable I2C Control Port
bData = 0x20;
fgI2CByteWrite(0x10, 0x05, bData); // Power On DAC
#ifdef DAC_AUTO_MUTE
//Eable auto-mute function
bData = 0x80;
fgI2CByteWrite(0x10, 0x01, bData);
#endif
//Reduce the chip volume control to avoid overflow
//44kHz, 0dB, 96kHz Fs testing bitstream
bData = 0x00;
fgI2CByteWrite(0x10, 0x03, bData); // Channel A Volume Control
fgI2CByteWrite(0x10, 0x04, bData); // Channel A Volume Control
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
BYTE bData;
switch(bDataFormat)
{
case RTJ_16BIT:
bData = 0x20;
break;
case RTJ_18BIT:
bData = 0x50;
break;
case RTJ_20BIT:
bData = 0x40;
break;
case RTJ_24BIT:
bData = 0x30;
break;
case I2S_16BIT:
case I2S_18BIT:
case I2S_20BIT:
case I2S_24BIT:
bData = 0x10;
break;
case LTJ_16BIT:
case LTJ_18BIT:
case LTJ_20BIT:
case LTJ_24BIT:
default:
bData = 0x00; //24-bit, LTJ
break;
}
//Decide which sampling rates
if(_bAudioSample <= 0x05) //FS384_48K
{
bData = bData + 0x00;
}
else if(_bAudioSample <= 0x08) //FS384_96K
{
bData = bData + 0x01;
}
else if(_bAudioSample <= 0x0A) //FS384_192K
{
bData = bData + 0x02;
}
else
{
bData = bData + 0x03;
}
fgI2CByteRead(0x10, 0x01, &bDataFormat);
bData = (bDataFormat&0x8C) + bData;
fgI2CByteWrite(0x10, 0x01, bData);
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
BYTE bData;
fgI2CByteRead(0x10, 0x01, &bData);
bData = bData & 0xF3;
if(fgEnable)
{
bData = bData | 0x04;
}
fgI2CByteWrite(0x10, 0x01, bData);
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
BYTE bData;
fgI2CByteRead(0x10, 0x05, &bData);
bData = bData & 0xEF;
if(fgEnable == 0)
{
bData = bData | 0x10;
}
fgI2CByteWrite(0x10, 0x05, bData);
}
/************************************************************************
Function : void vADACDSDOn(BOOL fgEnable)
Description : DSD data output Control
Parameter : fgEnable : 1->DSD , 0-> PCM
Return : NONE
************************************************************************/
void vADACDSDOn(BOOL fgEnable) large
{
BYTE bData, bData1;
if(fgEnable)
{
_fgOPcmOn = 0; //DSD Mode
}
else
{
_fgOPcmOn = 1; //PCM Mode
}
ReFreshMT1336IO07();
//Setting ADSP Register
bData1 = bReadAUD(AUD_AOUTCFG);
bData1 = bData1 & 0xF7;
if(fgEnable)
{
WriteAUD(AUD_ACLKCFG, 0x66);
vAClkSetting(0x0B); //FS768_44K
bData1 = bData1 + 0X08;
}
else
{
#ifndef AUDIO_256FS
WriteAUD(AUD_ACLKCFG, 0x64); //Setting the Audio Clk to Internal Clk
#else
WriteAUD(AUD_ACLKCFG, 0x42); //Setting the Audio Clk to Internal Clk
#endif
vAClkSetting(0x04); //FS384_44K
}
WriteAUD(AUD_AOUTCFG, bData1);
}
#endif //_CS4391_
#ifdef MTK_ADAC
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
BYTE bTmp;
ClrBitAUD(ADAC_ATOP1, 0x02);
vADACPower(TRUE);
bTmp = bReadBIM(BIM_SIFData);
WriteBIM(BIM_SIFSel, 0x14);
WriteBIM(BIM_SIFData, 0x01);
WriteBIM(BIM_SIFSel, bTmp);
//use internal DAC++
SetBitBIM(BIM_PCTL3, AUCLKOFF);
//use internal DAC--
//unmute++
ClrBitAUD(ADAC_ATOP1, ADAC_CTRL_SEL);
ClrBitAUD(ADAC_CTRL0, ADAC_MUTE);
SetBitBIM(BIM_RIODRL, IOL_ABCK);//set output
ClrBitBIM(BIM_RIODOL, IOL_ABCK);//set low
//unmute--
// Set 0xFA07 bit0 to 1. Turn on AL,AR, which are turn off by default.
// this should be no effect with the E1~E3 chip.
// because there is no such a reg in these chips.
WriteSRV(0x07, bReadSRV(0x07) | 0x01);
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
if(fgEnable)
{
ClrBitAUD(ADAC_ATOP0, (ADAC_TMAUPDN | ADAC_AUPDN));
}
else
{
SetBitAUD(ADAC_ATOP0, (ADAC_TMAUPDN | ADAC_AUPDN));
}
}
#else
#ifdef MT1389_REV_D
void vADACClkOut(void) large
{
BYTE bTmp;
//open ACLK,ABCK,ALRCK, these clock default are closed.
bTmp = bReadBIM(BIM_SIFData);
WriteBIM(BIM_SIFSel, 0x14);
WriteBIM(BIM_SIFData, 0x01);
WriteBIM(BIM_SIFSel, bTmp);
}
#endif //MT1389_REV_D
#endif // MTK_ADAC
#ifdef _NPADAC_
/************************************************************************
Function : void ADACInit(void)
Description : ADAC Initial Routine
Parameter : NONE
Return : NONE
************************************************************************/
void ADACInit(void) large
{
#if 0
#ifdef MT1389_REV_D
BYTE bTmp;
//open ACLK,ABCK,ALRCK, these clock default are closed.
bTmp = bReadBIM(BIM_SIFData);
WriteBIM(BIM_SIFSel, 0x14);
WriteBIM(BIM_SIFData, 0x01);
WriteBIM(BIM_SIFSel, bTmp);
#endif
#endif
}
/************************************************************************
Function : void vADACFormat(BYTE bDataFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384)
Return : NONE
************************************************************************/
void vADACFormat(BYTE bDataFormat) large
{
}
/************************************************************************
Function : void ADACDeEmphasis(BOOL fgEnable) large
Description : Audio DAC de-emphasis Turn on/off
If use this function, disable the mute function.
Parameter : fgDeEmphasisOn : 1->On, 0->Off
Return : None
************************************************************************/
void ADACDeEmphasis(BOOL fgEnable) large
{
}
/************************************************************************
Function : void vADACPower(BOOL fgEnable)
Description : ADAC Power Control
Parameter : fgEnable : 1->Enable , 0-> Power Down
Return : NONE
************************************************************************/
void vADACPower(BOOL fgEnable) large
{
}
#endif //_NPADAC_
#ifdef _INTACLK_
/************************************************************************
Function : void vAClkSetting(void)
Description : Support the internal Audio MClk
Parameter : NONE
Return : NONE
************************************************************************/
void vAClkSetting(BYTE bFs) large
{
BYTE ACK_FS;
BYTE AOUT_CFG;
#ifdef MTK_ADAC
BYTE bAK1;
BYTE bAK2;
BYTE bAckFs;
#endif
#ifdef ADSP_USE_APLL
BYTE bACLKC = bReadBIM(BIM_ACLKC);
BYTE bTmp;
if ((bACLKC & AC_CLK_MASK) == ADSP_APLL_RATIO)
{
bTmp = (bACLKC & (~AC_CLK_MASK)) | AC_DPLD4;
WriteBIM(BIM_ACLKC, bTmp);
}
#endif /* ADSP_USE_APLL */
#ifdef AUDIO_256FS
ACK_FS = 0x42;
#else
ACK_FS = 0x63;
#endif
AOUT_CFG = bReadAUD(AUD_AOUTCFG) & (~DSD_MASK);
if (bFs <= FS384_192K)
{
WriteBIM(BIM_APLLC1, 0x80+(_bAPllBank[1]<<1)); // Setting APLL Bank
WriteBIM(BIM_AMH, 0x01); // AM: 375
WriteBIM(BIM_AML, 0x77);
WriteBIM(BIM_AN2H, 0x02); // AN2: 512
WriteBIM(BIM_AN2L, 0x00);
}
else if (bFs>=FS384_22K)
{
WriteBIM(BIM_APLLC1, 0x80+(_bAPllBank[0]<<1)); // Setting APLL Bank
WriteBIM(BIM_AMH, 0x02); // AM: 625
WriteBIM(BIM_AML, 0x71);
WriteBIM(BIM_AN2H, 0x03); // AN2: 784
WriteBIM(BIM_AN2L, 0x10);
}
switch(bFs) //384Fs APLL N1 Setting
{
case FS384_16K: //384fs or 256fs
WriteBIM(BIM_AOCLKC, 0x18); // Set AK2 divided by 24
break;
case FS384_22K: //384fs or 256fs
case FS384_24K: //384fs or 256fs
WriteBIM(BIM_AOCLKC, 0x10); // Set AK2 divided by 16
break;
case FS384_32K: //384fs or 256fs
WriteBIM(BIM_AOCLKC, 0x0C); // Set AK2 divided by 12
break;
case FS384_44K: //384fs or 256fs
case FS384_48K: //384fs or 256fs
WriteBIM(BIM_AOCLKC, 0x08); // Set AK2 divided by 8
break;
case FS768_44K: //DSD mode
WriteBIM(BIM_AOCLKC, 0x08); // Set AK2 divided by 8
AOUT_CFG |= DSD_MASK;
break;
case FS384_64K: //384fs or 256fs
WriteBIM(BIM_AOCLKC, 0x06); // Set AK2 divided by 6
break;
case FS384_88K: //384fs or 256fs
case FS384_96K: //384fs or 256fs
WriteBIM(BIM_AOCLKC, 0x04); // Set AK2 divided by 4
break;
case FS384_176K: //384fs or 256ds -->128fs
case FS384_192K: //384fs or 256fs -->128fs
#ifdef AUDIO_256FS
WriteBIM(BIM_AOCLKC, 0x04); // Set AK2 divided by 4
#else
WriteBIM(BIM_AOCLKC, 0x06); // Set AK2 divided by 6
#endif
ACK_FS = 0x21; //switch to 128fs
break;
}
if (bReadAUD(AUD_ACLKCFG) != ACK_FS)
{
WriteAUD(AUD_ACLKCFG, ACK_FS);
}
if (bReadAUD(AUD_AOUTCFG) != AOUT_CFG)
{
WriteAUD(AUD_AOUTCFG, AOUT_CFG);
}
#ifdef AUDIO_256FS
WriteBIM(BIM_AN1, 0x01); // Set AK1 = 3
#ifdef MTK_ADAC
bAK2 = 3;
#endif
#else
WriteBIM(BIM_AN1, 0x00); // Set AK1 = 2
#ifdef MTK_ADAC
bAK2 = 2;
#endif
#endif
#ifdef ADSP_USE_APLL
if (bACLKC != bReadBIM(BIM_ACLKC))
{
// delay 200us
for (bTmp = 0; bTmp < 100; bTmp++)
{
_nop_(); _nop_(); _nop_(); _nop_();
}
WriteBIM(BIM_ACLKC, bACLKC);
}
#endif /* ADSP_USE_APLL */
#ifdef MTK_ADAC
bAK1 = bReadBIM(BIM_AOCLKC) & 0x3F; // Read AK1
bAckFs = (bReadAUD(AUD_ACLKCFG) & 0xE0) >> 5;
ClrBitAUD(ADAC_ATOP1, ADAC_CTRL_SEL);
ClrBitAUD(ADAC_CTRL0, ADAC_OSR);
if(bFs == FS384_32K)
{
SetBitAUD(ADAC_CTRL0, 1<<7);//set oversampling rate 128X
bAckFs = bAK1*bAK2*bAckFs>>3; //Ak1*Ak2*ACK/1024fs, ACK = N*128*fs
WriteAUD(ADAC_CLK_SET2, (bAckFs<<5 | 0x11));
}
else
{
SetBitAUD(ADAC_CTRL0, 1<<6);//set oversampling rate 64X
bAckFs = bAK1*bAK2*bAckFs>>2; //Ak1*Ak2*ACK/512fs, ACK = N*128*fs
WriteAUD(ADAC_CLK_SET2, (bAckFs<<5 | 0x0A));
}
if(bAckFs & 0x08)
{
WriteAUD(ADAC_CLK_SET1, 0x01);
}
else
{
WriteAUD(ADAC_CLK_SET1, 0x00);
}
//WriteAUD(ADAC_CLK_SET2, (bAckFs<<5 | 0x0A));
#endif
}
#else //external clock
/************************************************************************
Function : void vAClkSetting(void)
Description : Support the External Audio MClk
Parameter : NONE
Return : NONE
************************************************************************/
void vAClkSetting(BYTE bFs) large
{
}
#endif /* _INTACLK_ */
/************************************************************************
Function : void ADACDataFormat(BYTE bDataFormat, BYTE bClockFormat)
Description : Setting ADAC Data Format
Parameter : 16 ~ 24bits, Rt/I2S/Lt (Data bit + Data Format),
Sampling Point(256/384), Sampling Frequency.
Return : NONE
************************************************************************/
void ADACDataFormat(BYTE bDataFormat, BYTE bClockFormat) large
{
#ifndef _NPADAC_
_bAudioSample = bClockFormat;
#if(defined(_CS4360_) || defined(_AK4382_) || defined(_CS4362_) || \
defined(_CS4391_))
vADACFormat(LTJ_24BIT);
#else
vADACFormat(RTJ_24BIT);
#endif
#endif /* _NPADAC */
// vADACFormat(bDataFormat); Change this in the ADAC Init function
vAClkSetting(bClockFormat);
}
/************************************************************************
Function : void AdacCmdDispatch(void)
Description : Dispatch Audio DAC command
Parameter : None
Return : None
************************************************************************/
void AdacCmdDispatch(void) large
{
switch (_pbPeriCmd[0])
{
#if 0
case 8:
// WriteBIM(0x02, 4);
// WriteBIM(0xc0, 0x80);
WriteType0Cmd(0x64, 0x66);
// SRVInit();
WriteType0Cmd(0x6b, 0x05);
WriteType0Cmd(0x64, 0x66);
// WriteDEC(0x4e, 0xb);
break;
#endif
#ifdef DSP_LOAD_FORCE_SYNC
case ADAC_SET_DSP_SPEED_DMPLL:
WriteBIM(BIM_ACLKC, 0x6);
break;
case ADAC_SET_DSP_SEEED_APLL:
WriteBIM(BIM_ACLKC, 0x2);
break;
#endif
case ADAC_CMD_FMT:
#ifndef MLP_CERTIFICATION
ADACDataFormat(_pbPeriCmd[1] & (~UPSAMPLE_MASK), _pbPeriCmd[2]);
#else
if(bReadDRAML(0x08, 0x8954) == 0)
{
ADACDataFormat(_pbPeriCmd[1] & (~UPSAMPLE_MASK), _pbPeriCmd[2]);
}
#endif
#ifdef AUDIO_IN_EN
vAinFsSelect(_pbPeriCmd[1] & UPSAMPLE_MASK, _pbPeriCmd[2]);
#endif
break;
case ADAC_CMD_EMPH:
ADACDeEmphasis(_pbPeriCmd[1]);
break;
case ADAC_CMD_DAC_MUTE:
vAudioMute(_pbPeriCmd[1]);
break;
#ifdef AUDIO_IN_EN
case ADAC_CMD_AIN_SEL:
vAinChSel(_pbPeriCmd[1]);
break;
#endif /* AUDIO_IN_EN */
} // switch (bCmd)
}