📄 rt5621.cpp
字号:
//Disable Main Spatial
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,0,SPATIAL_CTRL_EN);
}
return bRetVal;
}
//*****************************************************************************
//
//Function:Enable/Disable and setting 3D spatial control function(use this function,enable Main Spatial function first)
//
//*****************************************************************************
BOOL RT5621_Codec::Set_3D_Func(SET_3D_PARA_MODE S_3d_para,BYTE para)
{
BOOL bRetVal=FALSE;
switch(S_3d_para)
{
case SET_3D_L_GAIN:
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,(para<<9),GAIN_3D_PARA_L_MASK);//set 3D left gain
break;
case SET_3D_R_GAIN:
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,(para<<6),GAIN_3D_PARA_R_MASK);//set 3D right gain
break;
case SET_3D_L_RATIO:
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,(para<<4),RATIO_3D_L_MASK); //set 3D left ratio
break;
case SET_3D_R_RATIO:
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,(para<<2),RATIO_3D_R_MASK); //set 3D right ratio
break;
case SET_3D_ENABLE:
Enable_Main_Spatial(TRUE);
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,STEREO_EXPENSION_EN,STEREO_EXPENSION_EN); //enable 3D spatial
break;
case SET_3D_DISABLE:
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,0,STEREO_EXPENSION_EN); //disable 3D spatial
break;
default:
return FALSE;
}
return bRetVal;
}
//*****************************************************************************
//
//function:Enable/Disable Pseudio Stereo function(use this function,enable Main Spatial function first)
//
//*****************************************************************************
BOOL RT5621_Codec::Enable_Pseudo_Stereo(BOOL Enable_Pseudo_Stereo)
{
BOOL bRetVal=FALSE;
if(Enable_Pseudo_Stereo)
{
Enable_Main_Spatial(TRUE);
Enable_All_Pass_Filter(TRUE);
//Enable Pseudio stereo
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,PSEUDO_STEREO_EN,PSEUDO_STEREO_EN);
}
else
{
Enable_All_Pass_Filter(FALSE);
//Disable Pseudio stereo
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,0,PSEUDO_STEREO_EN);
}
return bRetVal;
}
//*****************************************************************************
//
//function:Enable/Disable All Pass Filter function(use this function,enable Main Spatial function first)
//
//*****************************************************************************
BOOL RT5621_Codec::Enable_All_Pass_Filter(BOOL Enable_APF)
{
BOOL bRetVal=FALSE;
if(Enable_APF)
{
Enable_Main_Spatial(TRUE);
//set parameter a1 support 48K
if(KHZ48_000==m_WaveOutSampleRate)
{
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,APF_FOR_48K,APF_MASK);
}
else if(KHZ44_100==m_WaveOutSampleRate)//set parameter a1 support 44.1K
{
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,APF_FOR_44_1K,APF_MASK);
}
else
{
//set parameter a1 support 32k and lower
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,APF_FOR_32K,APF_MASK);
}
//Enable All Pass Filter
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,ALL_PASS_FILTER_EN,ALL_PASS_FILTER_EN);
}
else
{
//Disable All Pass Filter
bRetVal=WriteCodecRegMask(RT5621_PSEDUEO_SPATIAL_CTRL,0,ALL_PASS_FILTER_EN);
}
return bRetVal;
}
//*****************************************************************************
//
//function:Enable/Disable ADC input source control
//
//*****************************************************************************
BOOL RT5621_Codec::Enable_ADC_Input_Source(unsigned short int ADC_Input_Sour,BOOL Enable)
{
BOOL bRetVal=FALSE;
if(Enable)
{
//Enable ADC source
bRetVal=WriteCodecRegMask(RT5621_ADC_REC_MIXER,0,ADC_Input_Sour);
}
else
{
//Disable ADC source
bRetVal=WriteCodecRegMask(RT5621_ADC_REC_MIXER,ADC_Input_Sour,ADC_Input_Sour);
}
return bRetVal;
}
//*****************************************************************************
//
//function:Enable/Disable Auto Volume Control function
//
//*****************************************************************************
BOOL RT5621_Codec::EnableAVC(BOOL Enable_AVC)
{
BOOL bRetVal=FALSE;
if(Enable_AVC)
{
//enable AVC target select
WriteCodecRegMask(RT5621_AVC_CTRL,AVC_TARTGET_SEL_L,AVC_TARTGET_SEL_MASK);
//Enable AVC function
bRetVal=WriteCodecRegMask(RT5621_AVC_CTRL,AVC_ENABLE,AVC_ENABLE);
}
else
{
//Disable AVC function
bRetVal=WriteCodecRegMask(RT5621_AVC_CTRL,0,AVC_ENABLE);
}
return bRetVal;
}
//*****************************************************************************
//
//function:Config SPEAKER AB&D Vmid ratio Control function
//
//*****************************************************************************
BOOL RT5621_Codec::ConfigVmidOutput(BYTE SPK_Type,unsigned short int VMID_RATIO)
{
BOOL bRetVal=FALSE;
switch(SPK_Type)
{
case SPK_CLASS_AB:
bRetVal=WriteCodecRegMask(
RT5621_ADD_CTRL_REG,
VMID_RATIO,
SPK_AB_AMP_CTRL_MASK
);
break;
case SPK_CLASS_D:
bRetVal=WriteCodecRegMask(
RT5621_ADD_CTRL_REG,
VMID_RATIO,
SPK_D_AMP_CTRL_MASK
);
break;
default:
return FALSE;
}
return bRetVal;
}
//*****************************************************************************
//
//function:Config Microphone BIAS function
//
//*****************************************************************************
BOOL RT5621_Codec::ConfigMicBias(BYTE Mic,BYTE MicBiasCtrl)
{
BOOL bRetVal=FALSE;
if(Mic==MIC1)
{
if(MicBiasCtrl==MIC_BIAS_90_PRECNET_AVDD)//90% of AVDD
{
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MICBIAS_VOLT_CTRL_90P,MICBIAS_VOLT_CTRL_MASK);
}
else if(MicBiasCtrl==MIC_BIAS_75_PRECNET_AVDD)//75% of AVDD
{
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MICBIAS_VOLT_CTRL_75P,MICBIAS_VOLT_CTRL_MASK);
}
}
return bRetVal;
}
//*****************************************************************************
//function:Enable the PLL function
//*****************************************************************************
BOOL RT5621_Codec::EnablePLLPath(BOOL bEnablePLL,unsigned short int K,unsigned short int M,unsigned short int N)
{
unsigned short int usRegVal;
BOOL bRetVal=FALSE;
if(bEnablePLL)
{
bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,PWR_VREF,PWR_VREF); //power on Vref for All analog circuit
bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_MAIN_BIAS,PWR_MAIN_BIAS); //power on main bias
usRegVal=PLL_CTRL_M_VAL(M) | PLL_CTRL_K_VAL(K) |PLL_CTRL_N_VAL(N);
bRetVal=ShadowWriteCodec(RT5621_PLL_CTRL,usRegVal);
//codec clock source from PLL output
bRetVal=WriteCodecRegMask(RT5621_GLOBAL_CLK_CTRL_REG,SYSCLK_SOUR_SEL_PLL,SYSCLK_SOUR_SEL_MASK);
//Disable PLL Power
bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,0,PWR_PLL);
//Enable PLL Power
bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,PWR_PLL,PWR_PLL);
}
else
{
//codec clock source from MCLK output
bRetVal=WriteCodecRegMask(RT5621_GLOBAL_CLK_CTRL_REG,SYSCLK_SOUR_SEL_MCLK,SYSCLK_SOUR_SEL_MASK);
//Disable PLL Power
bRetVal=WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,0,PWR_PLL);
}
return bRetVal;
}
//*****************************************************************************
//
//function:Config Microphone Boost function
//
//*****************************************************************************
BOOL RT5621_Codec::ConfigMicBoost(BYTE Mic,MIC_BOOST_TYPE BoostType)
{
BOOL bRetVal=FALSE;
if(Mic==MIC1)
{
switch(BoostType)
{
//Bypass mic1 boost
case BOOST_BYPASS:
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC1_BOOST_CTRL_BYPASS,MIC1_BOOST_CTRL_MASK);
break;
//Set mic1 boost to 20DB
case BOOST_20DB:
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC1_BOOST_CTRL_20DB,MIC1_BOOST_CTRL_MASK);
break;
//Set mic1 boost to 30DB
case BOOST_30DB:
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC1_BOOST_CTRL_30DB,MIC1_BOOST_CTRL_MASK);
break;
//Set mic1 boost to 40DB
case BOOST_40DB:
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC1_BOOST_CTRL_40DB,MIC1_BOOST_CTRL_MASK);
break;
default:
bRetVal=FALSE;
}
}
else if(Mic==MIC2)
{
switch(BoostType)
{
//Bypass mic2 boost
case BOOST_BYPASS:
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC2_BOOST_CTRL_BYPASS,MIC2_BOOST_CTRL_MASK);
break;
//Set mic2 boost to 20DB
case BOOST_20DB:
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC2_BOOST_CTRL_20DB,MIC2_BOOST_CTRL_MASK);
break;
//Set mic2 boost to 30DB
case BOOST_30DB:
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC2_BOOST_CTRL_30DB,MIC2_BOOST_CTRL_MASK);
break;
//Set mic2 boost to 40DB
case BOOST_40DB:
bRetVal=WriteCodecRegMask(RT5621_MICROPHONE_CTRL,MIC2_BOOST_CTRL_40DB,MIC2_BOOST_CTRL_MASK);
break;
default:
bRetVal=FALSE;
}
}
return bRetVal;
}
//*****************************************************************************
//
//function:Depop of HP Out
//
//*****************************************************************************
void RT5621_Codec::DepopForHP(DEPOP_MODE Depop_mode)
{
if(DEPOP_MODE1_HP)
{
WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_MAIN_BIAS,PWR_MAIN_BIAS); //enable Main Bias
WriteCodecRegMask(RT5621_MISC_CTRL,HP_DEPOP_MODE1_EN,HP_DEPOP_MODE1_EN); //Enable Depop Mode 1
WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_HP_L_OUT_VOL|PWR_HP_R_OUT_VOL,PWR_HP_L_OUT_VOL|PWR_HP_R_OUT_VOL); //Enable HP volume AMP
WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,PWR_VREF ,PWR_VREF ); //Enable Vref
DelayMSTime(1500);//delay 1.5S
WriteCodecRegMask(RT5621_PWR_MANAG_ADD1,PWR_HP_AMP|PWR_HP_OUT,PWR_HP_AMP|PWR_HP_OUT); //Enable HP output buffer and HP AMP
WriteCodecRegMask(RT5621_MISC_CTRL,0,HP_DEPOP_MODE1_EN); //Disable Depop Mode 1
}
else if(DEPOP_MODE2_HP)
{
WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_MAIN_BIAS,PWR_MAIN_BIAS); //enable Main Bias
WriteCodecRegMask(RT5621_MISC_CTRL,HP_DEPOP_MODE2_EN,HP_DEPOP_MODE2_EN); //Enable Depop Mode 2
WriteCodecRegMask(RT5621_PWR_MANAG_ADD2,PWR_VREF,PWR_VREF); //Enable Vref
WriteCodecRegMask(RT5621_PWR_MANAG_ADD3,PWR_HP_L_OUT_VOL|PWR_HP_R_OUT_VOL,PWR_HP_L_OUT_VOL|PWR_HP_R_OUT_VOL); //Enable HP volume AMP
DelayMSTime(800);//delay 800 ms
WriteCodecRegMask(RT5621_PWR_MANAG_ADD1,PWR_HP_AMP|PWR_HP_OUT,PWR_HP_AMP|PWR_HP_OUT); //Enable HP output buffer and HP AMP
WriteCodecRegMask(RT5621_MISC_CTRL,0,HP_DEPOP_MODE2_EN); //Disable Depop Mode 2
}
}
//*****************************************************************************
//
//function AudioOutEnable:Mute/Unmute audio out channel
// WavOutPath:output channel
// Mute :Mute/Unmute output channel
//
//*****************************************************************************
BOOL RT5621_Codec::AudioOutEnable(WAVOUT_PATH WavOutPath,BOOL Mute)
{
BOOL RetVal=FALSE;
if(Mute)
{
switch(WavOutPath)
{
case RT_WAVOUT_PATH_ALL:
RetVal=WriteCodecRegMask(RT5621_SPK_OUT_VOL,RT_L_MUTE|RT_R_MUTE,RT_L_MUTE|RT_R_MUTE); //Mute Speaker right/left channel
RetVal=WriteCodecRegMask(RT5621_HP_OUT_VOL,RT_L_MUTE|RT_R_MUTE,RT_L_MUTE|RT_R_MUTE); //Mute headphone right/left channel
RetVal=WriteCodecRegMask(RT5621_MONO_AUX_OUT_VOL,RT_L_MUTE|RT_R_MUTE,RT_L_MUTE|RT_R_MUTE); //Mute Aux/Mono right/left channel
RetVal=WriteCodecRegMask(RT5621_STEREO_DAC_VOL,RT_M_HP_MIXER|RT_M_SPK_MIXER|RT_M_MONO_MIXER
,RT_M_HP_MIXER|RT_M_SPK_MIXER|RT_M_MONO_MIXER); //Mute DAC to HP,Speaker,Mono Mixer
break;
case RT_WAVOUT_PATH_HP:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -