📄 audio_api.c
字号:
SGTV58xx_AISxSelectInput(eAnalogInputMP, AIS_ANA2); // Ain_MP to AIS_ANA2
SGTV58xx_ScartxOutputConfig(SCARTInput_AISANA, SCARTOutput_AOUT2); // AIS_ANA2 to SC Out
break;
case SRC_MP_HDMI1:
case SRC_MP_HDMI2:
#ifndef _SOUCE_2HDMI_
case SRC_MP_HDMI3:
#endif
#if 0
SGTV58xx_SSSIOConfig(SSSInput_I2SAin_DIn, SSSOutput_DAP_SGTLDP); // I2SA to SGTL_DP
#endif
// SGTV58xx_SSSIOConfig(SSSInput_I2SAin_DIn, SSSOutput_DAC0); // I2SA to DAC0
#if 0
if(UserPrefPipMode != NO_PIP)
{
if(IsSinglePipMode(UserPrefPipMode) || IsSideBySidePipMode(UserPrefPipMode))
{
#else
if(g_Data.ucWinStatus) //PIP ,POP, MULTIWIN
{
if(g_Data.ucWinStatus >= _TV_WIN_PIP_SS_ || g_Data.ucWinStatus <= _TV_WIN_POP_FULL_) //PIP OR POP
{
#endif
switch(ucPPSource)
{
case SRC_PIP_TV: // TV
case SRC_PIP_SVIDEO: // Video1 & SVideo lsz 060524
case SRC_PIP_AV2: // av2
case SRC_PIP_AV1: // av1
// case ALL_BOARDS_CVBS3: // Video 2
case SRC_PIP_HDTV1: // YPbPr 1
case SRC_PIP_HDTV2: // YPbPr 2
case SRC_PIP_RGB: // VGA & DVI1/2
// case ALL_BOARDS_COMP3: // DVB_T, Tenny at 2k60912
if(ucPPSource == SRC_PIP_SVIDEO || ucPPSource == SRC_PIP_AV1)
eAnalogInputPP = INPUT_PIP_AV1;
else if(ucPPSource == SRC_PIP_AV2)
eAnalogInputPP = INPUT_PIP_AV2;
else if(ucPPSource == SRC_PIP_HDTV1)
eAnalogInputPP = INPUT_PIP_YPBPR1;
else if(ucPPSource == SRC_PIP_HDTV2)
eAnalogInputPP = INPUT_PIP_YPBPR2;
else if(ucPPSource == SRC_PIP_RGB)
eAnalogInputPP = INPUT_PIP_VGA;
// else if(ucPPSource == ALL_BOARDS_COMP3)
// eAnalogInputPP = Input_Analog8;
else //if(ucPPSource== ALL_BOARDS_RF2)
eAnalogInputPP = Input_Analog9;
SGTV58xx_AISxSelectInput(eAnalogInputPP, AIS_ADC); // Ain_PP to AIS_ADC
if(bSwitch)
{
SGTV58xx_SSSIOConfig(SSSInput_ADC, SSSOutput_DAP_SGTLDP); // AIS_ADC to SGTL_DP
SGTV58xx_SSSIOConfig(SSSInput_I2SAin_DIn, SSSOutput_DAC0); // I2SA to DAC0
}
else
{
SGTV58xx_SSSIOConfig(SSSInput_I2SAin_DIn, SSSOutput_DAP_SGTLDP); // I2SA to SGTL_DP
if(ucPPSource == SRC_PIP_TV) //zenghw add
SGTV58xx_SSSIOConfig(SSSInput_Demod, SSSOutput_DAC0);
else
SGTV58xx_SSSIOConfig(SSSInput_ADC, SSSOutput_DAC0); // AIS_ADC to DAC0
}
break;
}
#ifdef ZHW_DEBUG_SGTV_MSG
PRINTF1("PIP is On,so Headphone output audio from input %d \n", ucPPSource);
#endif
}
else
{
SGTV58xx_SSSIOConfig(SSSInput_I2SAin_DIn, SSSOutput_DAP_SGTLDP); // I2SA to SGTL_DP
SGTV58xx_SSSIOConfig(SSSInput_Null, SSSOutput_DAC0); // Mute DAC0 output
#ifdef ZHW_DEBUG_SGTV_MSG
PRINTF("Mute Headphone output when Multi-Window active \n");
#endif
}
}
else
{
SGTV58xx_SSSIOConfig(SSSInput_I2SAin_DIn, SSSOutput_DAP_SGTLDP); // I2SA to SGTL_DP
SGTV58xx_SSSIOConfig(SSSInput_I2SAin_DIn, SSSOutput_DAC0); // I2SA to DAC0
#ifdef ZHW_DEBUG_SGTV_MSG
PRINTF("PIP is Off,Headphone output audio same as Main\n");
#endif
}
/** // Tenny at 2k61024: The config for main is same
#ifdef SGTV_SUPPORT_SRS
if(UserPrefAudioEffect==AUDIO_SURROUND_OFF)
{
// SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_DAP_SRSBBE); // SGTL_DP to SRS
SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_DAC_Main); // SRS to BM
}
else
{
SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_DAP_SRSBBE); // SGTL_DP to SRS
SGTV58xx_SSSIOConfig(SSSInput_DAP_SRS_BBE_In, SSSOutput_DAC_Main); // SRS to BM
}
// SGTV58xx_SSSIOConfig(SSSInput_DAP_BM_Main_In, SSSOutput_DAC_Main); // BM to Speaker
#else
SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_DAC_Main); // SGTL_DP to Speaker
#endif
*/
SGTV58xx_ScartxOutputConfig(SCARTInput_DAC0, SCARTOutput_AOUT0); // DAC0 to Headphone
SGTV58xx_SSSIOConfig(SSSInput_I2SAin_DIn, SSSOutput_DAC1); // SIF to DAC1
SGTV58xx_ScartxOutputConfig(SCARTInput_DAC1, SCARTOutput_AOUT1); // DAC1 to AV Out
SGTV58xx_ScartxOutputConfig(SCARTInput_DAC1, SCARTOutput_AOUT2); // DAC1 to SC Out
break;
}
#ifdef SGTV_SUPPORT_SRS
if(g_Data.bSRSEnble==AUDIO_SURROUND_OFF)
{
// SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_DAP_SRSBBE); // SGTL_DP to SRS
SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_DAC_Main); // SGTL_DP to Main output
// SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_PeakDetect); // SGTL_DP to Peak Detector, Tenny at 2k61024
}
else
{
SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_DAP_SRSBBE); // SGTL_DP to SRS
SGTV58xx_SSSIOConfig(SSSInput_DAP_SRS_BBE_In, SSSOutput_DAC_Main); // SRS to Main
// SGTV58xx_SSSIOConfig(SSSInput_DAP_SRS_BBE_In, SSSOutput_PeakDetect); // SRS to Peak Detector, Tenny at 2k61024
}
// SGTV58xx_SSSIOConfig(SSSInput_DAP_BM_Main_In, SSSOutput_DAC_Main); // BM to Speaker
#else
SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_DAC_Main); // SGTL_DP to Speaker
SGTV58xx_SSSIOConfig(SSSInput_DAP_SGTLDP_In, SSSOutput_PeakDetect); // SGTL_DP to Peak Detector, Tenny at 2k61024
#endif
// SGTV58xx_VolumeSet(SGTVVolume_DAC0, 0xffff);
// SGTV58xx_VolumeSet(SGTVVolume_DAC1, 0xffff); // lsz 060612
// SGTV58xx_I2C_Write(SGTV58XX_REG__DAC_AOS1, 0x00);// lsz 060612
#ifdef ZHW_DEBUG_SGTV_MSG
if(bSwitch)
PRINTF("Speaker output audio from PP \n");
#endif
#endif
}
//////////////////////////////////// DAP control ///////////////////////////////////
void SGTV58xx_LoudnessEnable(BOOL bEnable)
{
UWORD32 wTemp;
if(bEnable)
wTemp = SGTV58XX_DAP_CTRL__LOUDNESS_EN__ENABLED_VALUE;
else
wTemp = SGTV58XX_DAP_CTRL__LOUDNESS_EN__BYPASS_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_CTRL,
SGTV58XX_DAP_CTRL__LOUDNESS_EN__GETMASK,
wTemp);
}
// ucLoudnessGain: Loudness gain should be 0 to 0x2f
void SGTV58xx_LoudnessGainSet(BYTE ucLoudnessGain)
{
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_CTRL,
SGTV58XX_DAP_CTRL__LOUDNESS_BOOST__GETMASK,
((UWORD32)(ucLoudnessGain)) << 10);
}
/*
00 - Bypass
01 - GEQ Mode(5 Band)
10 - PEQ Mode(10 Band)
*/
void SGTV58xx_EQModeSelect(ESGTV58xxEQMode eEQMode)
{
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_CTRL,
SGTV58XX_DAP_CTRL__EQ_EN__GETMASK,
((UWORD32)(eEQMode)) << 4);
}
void SGTV58xx_ToneControl_Enable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_CTRL__TONE_CONTROL_EN__BYPASS_VALUE;
if(bEnable)
wTemp = SGTV58XX_DAP_CTRL__TONE_CONTROL_EN__ENABLED_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_CTRL,
SGTV58XX_DAP_CTRL__TONE_CONTROL_EN__GETMASK,
wTemp);
}
void SGTV58xx_SGTLDAP_Enable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_CTRL__SGTL_EN__DISABLE_VALUE;
if(bEnable)
wTemp = SGTV58XX_DAP_CTRL__SGTL_EN__ENABLE_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_CTRL,
SGTV58XX_DAP_CTRL__SGTL_EN__GETMASK,
wTemp);
}
////////////////////////////////////// AVC ///////////////////////////////////////////
void SGTV58xx_AVC_Enable(BOOL bEnable)
{
UWORD32 wTemp = 0;
if(bEnable)
wTemp = SGTV58XX_DAP_AVC_CTRL__AVC_EN__ENABLE_VALUE; // |SGTV58XX_DAP_AVC_CTRL__THRESHOLD__MINUS_18_DB_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_AVC_CTRL,
SGTV58XX_DAP_AVC_CTRL__AVC_EN__GETMASK,// | SGTV58XX_DAP_AVC_CTRL__THRESHOLD__GETMASK,
wTemp);
}
/////////////////////////////////////// Bass&Treble ///////////////////////////////////
void SGTV58xx_BassSet(BOOL bMainChannel, UWORD32 wValue )
{
UWORD32 wRegister;
/*
if(wValue > SGTV58XX_DAP_TC__12_DB_VALUE)
wValue = SGTV58XX_DAP_TC_BASS__0_DB_VALUE;
*/
if(bMainChannel)
wRegister = SGTV58XX_REG__DAP_TC_BASS;
else
wRegister = SGTV58XX_REG__DAP_HP_TC_BASS;
SGTV58xx_I2C_Write(wRegister, wValue);
}
void SGTV58xx_TrebleSet(BOOL bMainChannel, UWORD32 wValue )
{
UWORD32 wRegister;
/*
if(wValue > SGTV58XX_DAP_TC__12_DB_VALUE)
wValue = SGTV58XX_DAP_TC_BASS__0_DB_VALUE;
*/
if(bMainChannel)
wRegister = SGTV58XX_REG__DAP_TC_TREBLE;
else
wRegister = SGTV58XX_REG__DAP_HP_TC_TREBLE;
SGTV58xx_I2C_Write(wRegister, wValue);
}
///////////////////////////////// DAP EQ functions /////////////////////////////////////
// Function to set GEQ coefficients
void SGTV58xx_DAP_GEQ_BandsGainSet(ESGTV58xxGEQBands eBandIndex, UWORD32 wGain)
{
UWORD32 wReg = SGTV58XX_REG__DAP_GEQ0 + (eBandIndex << 1);
SGTV58xx_I2C_Write(wReg, wGain);
}
//////////////////////////// SRS or BBE //////////////////////////////////////////////
void SGTV58xx_SRS_BBE_Select(ESGTV58xxSRSBBESelect eSelect)
{
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_LIC_AUDIO_CTRL,
SGTV58XX_DAP_LIC_AUDIO_CTRL__ENABLE__GETMASK,
eSelect);
}
void SGTV58xx_SRSWowhd_HighBitRateEnable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_WOWHD__SRS_HIGH_BIT_RATE__OFF_VALUE;
if(bEnable)
wTemp = SGTV58XX_DAP_WOWHD__SRS_HIGH_BIT_RATE__ON_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_WOWHD,
SGTV58XX_DAP_WOWHD__SRS_HIGH_BIT_RATE__GETMASK,
wTemp);
}
// Speaker size should be 0 to 7
void SGTV58xx_SRSWowhd_SpeakSizeSelect(BYTE ucSize)
{
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_WOWHD,
SGTV58XX_DAP_WOWHD__SPEAKER_SIZE__GETMASK,
((UWORD32)(ucSize)) << 8);
}
void SGTV58xx_SRSWowhd_LimiterEnable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_WOWHD__LIMITER_EN__OFF_VALUE;
if(bEnable)
wTemp = SGTV58XX_DAP_WOWHD__LIMITER_EN__ON_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_WOWHD,
SGTV58XX_DAP_WOWHD__LIMITER_EN__GETMASK,
wTemp);
}
void SGTV58xx_SRSWowhd_DefinitionEnable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_WOWHD__DEFINITION_EN__OFF_VALUE;
if(bEnable)
wTemp = SGTV58XX_DAP_WOWHD__DEFINITION_EN__ON_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_WOWHD,
SGTV58XX_DAP_WOWHD__DEFINITION_EN__GETMASK,
wTemp);
}
void SGTV58xx_SRSWowhd_FocusEnable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_WOWHD__FOCUS_EN__OFF_VALUE;
if(bEnable)
wTemp = SGTV58XX_DAP_WOWHD__FOCUS_EN__ON_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_WOWHD,
SGTV58XX_DAP_WOWHD__FOCUS_EN__GETMASK,
wTemp);
}
void SGTV58xx_SRSWowhd_TruBassEnable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_WOWHD__TRUBASS_BC__BYPASS_VALUE;
if(bEnable)
wTemp = SGTV58XX_DAP_WOWHD__TRUBASS_BC__ON_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_WOWHD,
SGTV58XX_DAP_WOWHD__TRUBASS_BC__GETMASK,
wTemp);
}
// ucRate should be one of 0 - 32kHz, 1 - 44.1kHz and 2 - 48kHz
void SGTV58xx_SRSWowhd_SampleRateSelect(BYTE ucRate)
{
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_WOWHD,
SGTV58XX_DAP_WOWHD__SAMPLE_RATE__GETMASK,
((UWORD32)(ucRate)) << 2);
}
// _TRUE_ for SRS on Speaker while _FALSE_ for SRS on Headphone
void SGTV58xx_SRSWowhd_SpeakerEnable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_WOWHD__SPEAKER__HEADPHONE_MODE_VALUE;
if(bEnable)
wTemp = SGTV58XX_DAP_WOWHD__SPEAKER__SPEAKER_MODE_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_WOWHD,
SGTV58XX_DAP_WOWHD__SPEAKER__GETMASK,
wTemp);
}
void SGTV58xx_SRSWowhd_Enable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_WOWHD__ENABLE__WOWHD_OFF_VALUE;
if(bEnable)
{
wTemp = SGTV58XX_DAP_WOWHD__ENABLE__WOWHD_ON_VALUE;
// if( !t_TOE.bInitializing) //P020
// xMspDspCommand(AUDIO_VOL_MAIN, Sound_Menu_Struct.fnGetPersistentItemValue(Menus_Volume_Sub));
}
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_WOWHD,
SGTV58XX_DAP_WOWHD__ENABLE__GETMASK,
wTemp);
}
////////////////////////////////// DAP Bass Management /////////////////////////////////////
void SGTV58xx_BassManagement_Enable(BOOL bEnable)
{
UWORD32 wTemp = SGTV58XX_DAP_DAC_BM__ENABLE__DISABLE;
if(bEnable)
wTemp = SGTV58XX_DAP_DAC_BM__ENABLE__ENABLE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DAP_DAC_BM,
SGTV58XX_DAP_DAC_BM__ENABLE__GETMASK,
wTemp);
}
////////////////////////////////// Prescalar set /////////////////////////////////////////////
void SGTV58xx_PreScalarSet(ESGTV58xxPrescalar ePrescalar, BOOL bEnable, BYTE ucGain)
{
BYTE ucIndex;
if(ePrescalar == PreScalar_ADC)
ucIndex = ePrescalar - 1;
else if(ePrescalar == PreScalar_DAP_SRSBBE)
ucIndex = ePrescalar + 1;
else
ucIndex = ePrescalar;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__SSS_PSCLR_CTRL,
((UWORD32)1) << ucIndex,
((UWORD32)bEnable) << ucIndex);
#ifndef _OLD_CHIP_
SGTV58xx_I2C_Write(SGTV58XX_REG__SSS_I2SIN0_PSCLR + (((UWORD32)(ePrescalar)) << 1), ((UWORD32)(ucGain)) << 8); // Gain is UWORD32 type in new chip
#else
SGTV58xx_I2C_Write(SGTV58XX_REG__SSS_I2SIN0_PSCLR + (((UWORD32)(ePrescalar)) << 1), (UWORD32)ucGain);
#endif
}
////////////////////////////////// Analog block power control //////////////////////////////////
void SGTV58xx_AnalogPowerDown(ESGTV58xxPowerCtrlBlock eBlock, BOOL bPowerDown)
{
UWORD32 wMask;
UWORD32 wValue = 0;
switch(eBlock)
{
case ANAPOWER_AOUT_2:
wMask = SGTV58XX_ANA_CTRL_PWD_CNTRL__AOUT2_PWD__GETMASK;
if(bPowerDown)
wValue = SGTV58XX_ANA_CTRL_PWD_CNTRL__AOUT2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -