📄 audio_api.c
字号:
else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
{
if(g_AudioInfo.ucUserPreSelect == StereoMode_STEREO)
{
g_AudioInfo.ucUserPreSelect = StereoMode_SAP;
g_AudioInfo.bForceMono_SAP = _TRUE_;
}
else if(g_AudioInfo.ucUserPreSelect == StereoMode_SAP)
{
g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
g_AudioInfo.bForceMono_SAP = _FALSE_;
}
else
{
g_AudioInfo.ucUserPreSelect = StereoMode_STEREO;
g_AudioInfo.bForceMono_SAP = _FALSE_;
}
}
// g_AudioInfo.bForceMono_SAP = !g_AudioInfo.bForceMono_SAP;
// M2k60720 with LSZ
// lsz 060713 SGTV58xx_SetToChannelB(g_AudioInfo.bForceMono_SAP);
}
else if(g_AudioInfo.bNicamLocked)
{
if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
{
if(g_AudioInfo.ucUserPreSelect== StereoMode_Nicam_MONO)
{
g_AudioInfo.bForceMono_SAP = _TRUE_;
g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
}
else// if(g_AudioInfo.ucStereoMode == StereoMode_MONO)
{
g_AudioInfo.ucUserPreSelect = StereoMode_Nicam_MONO;
g_AudioInfo.bForceMono_SAP = _FALSE_;
}
}
else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
{
if(g_AudioInfo.ucUserPreSelect== StereoMode_STEREO)
{
g_AudioInfo.bForceMono_SAP = _TRUE_;
g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
}
else// if(g_AudioInfo.ucStereoMode == StereoMode_MONO)
{
//
{
g_AudioInfo.bForceMono_SAP = _FALSE_;
g_AudioInfo.ucUserPreSelect = StereoMode_STEREO;
}
}
}
else
{
if(g_AudioInfo.ucUserPreSelect == StereoMode_DUALA)
{
g_AudioInfo.bForceMono_SAP = _FALSE_;
g_AudioInfo.ucUserPreSelect = StereoMode_DUALB;
}
else
{
if(g_AudioInfo.bForceMono_SAP)
{
g_AudioInfo.bForceMono_SAP = _FALSE_;
g_AudioInfo.ucUserPreSelect = StereoMode_DUALA;
}
else
{
g_AudioInfo.bForceMono_SAP = _TRUE_;
g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
}
}
}
}
else
{
g_AudioInfo.bForceMono_SAP = _FALSE_; // Tenny at 2k60913
if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
{
g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
}
else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
{
if(g_AudioInfo.ucUserPreSelect == StereoMode_STEREO)
g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
else
g_AudioInfo.ucUserPreSelect = StereoMode_STEREO;
}
else
{
if(g_AudioInfo.ucUserPreSelect == StereoMode_DUALA)
g_AudioInfo.ucUserPreSelect = StereoMode_DUALB;
else
g_AudioInfo.ucUserPreSelect= StereoMode_DUALA;
}
}
SGTV58xx_StereoModeSet(g_AudioInfo.ucUserPreSelect);
}
#ifdef ZHW_DEBUG_SGTV_MSG
if(g_AudioInfo.ucUserPreSelect == StereoMode_MONO)
PRINTF("g_AudioInfo.ucUserPreSelect = StereoMode_MONO \n");
else if(g_AudioInfo.ucUserPreSelect == StereoMode_STEREO)
PRINTF("g_AudioInfo.ucUserPreSelect = StereoMode_STEREO \n");
else if(g_AudioInfo.ucUserPreSelect == StereoMode_DUALA)
PRINTF("g_AudioInfo.ucUserPreSelect = StereoMode_DUALA\n");
else if(g_AudioInfo.ucUserPreSelect == StereoMode_DUALB)
PRINTF("g_AudioInfo.ucUserPreSelect = StereoMode_DUALB\n");
else if(g_AudioInfo.ucUserPreSelect == StereoMode_Nicam_MONO)
PRINTF("g_AudioInfo.ucUserPreSelect = StereoMode_Nicam_MONO\n");
else
PRINTF("g_AudioInfo.ucUserPreSelect = %x ,may be is wrong\n",g_AudioInfo.ucUserPreSelect);
#endif
}
//////////////////////////////// Input/Output Channel configure ///////////////////////////////////////
void SGTV58xx_DemodInputSelectSIF0(BOOL bSelectSIF0)
{
if(bSelectSIF0)
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_ANA_CTRL_1,
SGTV58XX_DEMOD_ANA_CTRL_1__AGC_SEL_SIF__GETMASK,
SGTV58XX_DEMOD_ANA_CTRL_1__AGC_SEL_SIF__SIF0_VALUE);
else
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_ANA_CTRL_1,
SGTV58XX_DEMOD_ANA_CTRL_1__AGC_SEL_SIF__GETMASK,
SGTV58XX_DEMOD_ANA_CTRL_1__AGC_SEL_SIF__SIF1_VALUE);
}
void SGTV58xx_AISxSelectInput(ESGTV58xxAnalogInput eAnalogInput, ESGTV58xxAISOutput eAisOutput)
{
UWORD32 wMask;
BYTE ucStartBit;
switch(eAisOutput)
{
case AIS_ADC:
wMask = SGTV58XX_ANA_CTRL_AIS_CNTRL__ADC_SEL__GETMASK;
ucStartBit = SGTV58XX_ANA_CTRL_AIS_CNTRL__ADC_SEL__STARTBIT;
break;
case AIS_ANA0:
wMask = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS0_SEL__GETMASK;
ucStartBit = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS0_SEL__STARTBIT;
break;
case AIS_ANA1:
wMask = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS1_SEL__GETMASK;
ucStartBit = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS1_SEL__STARTBIT;
break;
case AIS_ANA2:
wMask = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS2_SEL__GETMASK;
ucStartBit = SGTV58XX_ANA_CTRL_AIS_CNTRL__AIS2_SEL__STARTBIT;
break;
}
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__ANA_CTRL_AIS_CNTRL, wMask, (((UWORD32)(eAnalogInput)) << ucStartBit));
}
void SGTV58xx_SSSIOConfig(ESGTV58xxSSSInput eSSSInput, ESGTV58xxSSSOutput eSSSOutput)
{
UWORD32 wReg;
UWORD32 wMask;
BYTE ucStartBit;
UWORD32 wValue;
switch(eSSSOutput)
{
case SSSOutput_I2S_DOut0:
case SSSOutput_I2S_DOut1:
case SSSOutput_I2SA_DOut:
wReg = SGTV58XX_REG__SSS_I2SSOUT;
if(eSSSOutput == SSSOutput_I2S_DOut0)
{
wMask = SGTV58XX_SSS_I2SSOUT__I2SSOUT0__GETMASK;
ucStartBit = SGTV58XX_SSS_I2SSOUT__I2SSOUT0__STARTBIT;
}
else if(eSSSOutput == SSSOutput_I2S_DOut1)
{
wMask = SGTV58XX_SSS_I2SSOUT__I2SSOUT1__GETMASK;
ucStartBit = SGTV58XX_SSS_I2SSOUT__I2SSOUT1__STARTBIT;
}
else
{
wMask = SGTV58XX_SSS_I2SSOUT__I2SAOUT__GETMASK;
ucStartBit = SGTV58XX_SSS_I2SSOUT__I2SAOUT__STARTBIT;
}
break;
case SSSOutput_SPDIFOut:
wReg = SGTV58XX_REG__SSS_SPDIFOUT;
wMask = SGTV58XX_SSS_SPDIFOUT__SPDIFOUT__GETMASK;
ucStartBit = SGTV58XX_SSS_SPDIFOUT__SPDIFOUT__STARTBIT;
break;
case SSSOutput_DAC0:
wReg = SGTV58XX_REG__SSS_DACOUT;
wMask = SGTV58XX_SSS_DACOUT__DAC0__GETMASK;
ucStartBit = SGTV58XX_SSS_DACOUT__DAC0__STARTBIT;
break;
case SSSOutput_DAC1:
wReg = SGTV58XX_REG__SSS_DACOUT;
wMask = SGTV58XX_SSS_DACOUT__DAC1__GETMASK;
ucStartBit = SGTV58XX_SSS_DACOUT__DAC1__STARTBIT;
break;
case SSSOutput_DAC_HDPH:
wReg = SGTV58XX_REG__SSS_DACOUT;
wMask = SGTV58XX_SSS_DACOUT__DACHDPH__GETMASK;
ucStartBit = SGTV58XX_SSS_DACOUT__DACHDPH__STARTBIT;
break;
case SSSOutput_DAC_Main:
wReg = SGTV58XX_REG__SSS_DACOUT;
wMask = SGTV58XX_SSS_DACOUT__DACMAIN__GETMASK;
ucStartBit = SGTV58XX_SSS_DACOUT__DACMAIN__STARTBIT;
break;
case SSSOutput_DAC_Sub:
wReg = SGTV58XX_REG__SSS_DAC_MAIN_LF;
wMask = SGTV58XX_SSS_DAC__MAIN_LF__GETMASK;
ucStartBit = SGTV58XX_SSS_DAC__MAIN_LF__STARTBIT;
break;
case SSSOutput_SyncDelay_Out:
wReg = SGTV58XX_REG__SSS_MISC;
wMask = SGTV58XX_SSS_MISC__SYNC_DELAY__GETMASK;
ucStartBit = SGTV58XX_SSS_MISC__SYNC_DELAY__STARTBIT;
break;
case SSSOutput_ToneGen_Out:
wReg = SGTV58XX_REG__SSS_MISC;
wMask = SGTV58XX_SSS_MISC__TONE_GENERATOR__GETMASK;
ucStartBit = SGTV58XX_SSS_MISC__TONE_GENERATOR__STARTBIT;
break;
case SSSOutput_PeakDetect:
wReg = SGTV58XX_REG__SSS_MISC;
wMask = SGTV58XX_SSS_MISC__PEAK_DETECT__GETMASK;
ucStartBit = SGTV58XX_SSS_MISC__PEAK_DETECT__STARTBIT;
break;
case SSSOutput_DAP_SGTLDP:
wReg = SGTV58XX_REG__SSS_DAP;
wMask = SGTV58XX_SSS_DAP__SGTL_DP__GETMASK;
ucStartBit = SGTV58XX_SSS_DAP__SGTL_DP__STARTBIT;
break;
case SSSOutput_DAP_HPTC:
wReg = SGTV58XX_REG__SSS_DAP;
wMask = SGTV58XX_SSS_DAP__HP_TONE_CONTROL__GETMASK;
ucStartBit = SGTV58XX_SSS_DAP__HP_TONE_CONTROL__STARTBIT;
break;
case SSSOutput_DAP_BM:
wReg = SGTV58XX_REG__SSS_DAP;
wMask = SGTV58XX_SSS_DAP__BASS_MANAGEMENT__GETMASK;
ucStartBit = SGTV58XX_SSS_DAP__BASS_MANAGEMENT__STARTBIT;
break;
case SSSOutput_DAP_SRSBBE:
wReg = SGTV58XX_REG__SSS_DAP;
wMask = SGTV58XX_SSS_DAP__BBE_SRS__GETMASK;
ucStartBit = SGTV58XX_SSS_DAP__BBE_SRS__STARTBIT;
break;
}
wValue=((UWORD32)(eSSSInput)) << ucStartBit;
SGTV58xx_I2C_MaskWrite(wReg, wMask, wValue);
#ifdef ZHW_DEBUG_SGTV_MSG
// PRINTF3("wreg = 0x%4x , wMask = 0x %4x, eSSSInput = %4x \n" ,wReg,wMask,wValue);
// PRINTF2("wreg = 0x%4x , reg value = 0x%4x\n" ,wReg,(UWORD32)SGTV58xx_I2C_Read(wReg));
#endif
}
/*
ucSource: source select for Scartx output
= 0 : DAC0
= 1 : DAC1
= 2 : AIS_ANAx
*/
void SGTV58xx_ScartxOutputConfig(ESGTV58xxScartInput eSCInput, ESGTV58xxScartOutput eSCOutput)
{
UWORD32 wMask;
BYTE ucStartBit;
if(eSCOutput == SCARTOutput_AOUT2)
{
wMask = SGTV58XX_ANA_CTRL_AOS_DAC_CNTRL__AOUT2_SEL__GETMASK;
ucStartBit = SGTV58XX_ANA_CTRL_AOS_DAC_CNTRL__AOUT2_SEL__STARTBIT;
}
else if(eSCOutput == SCARTOutput_AOUT1)
{
wMask = SGTV58XX_ANA_CTRL_AOS_DAC_CNTRL__AOUT1_SEL__GETMASK;
ucStartBit = SGTV58XX_ANA_CTRL_AOS_DAC_CNTRL__AOUT1_SEL__STARTBIT;
}
else // if(eSCOutput == SCARTOutput_AOUT0)
{
wMask = SGTV58XX_ANA_CTRL_AOS_DAC_CNTRL__AOUT0_SEL__GETMASK;
ucStartBit = SGTV58XX_ANA_CTRL_AOS_DAC_CNTRL__AOUT0_SEL__STARTBIT;
}
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__ANA_CTRL_AOS_DAC_CNTRL, wMask, ((UWORD32)eSCInput << ucStartBit));
}
// UserPrefCurrentInputMain - Main Source
// UserPrefCurrentInputPip - Source
// bSwitch - _TRUE_ for speaker outpu PIP audio
void SGTV58xx_ChannelConfig(BYTE ucMPSource, BYTE ucPPSource, BOOL bSwitch)
{
// ESGTV58xxSSSInput eSSSInput;
ESGTV58xxAnalogInput eAnalogInputMP, eAnalogInputPP;
BOOL bI2SSignalChecked = _FALSE_;
// SGTV58xx_I2SAOut_Config();
// 1. Config for TV Out
// SGTV58xx_DemodInputSelectSIF0(_TRUE_);
//****************weifer debug add
SGTV58xx_SSSIOConfig(SSSInput_ADC, SSSOutput_DAC_Main); // lsz 060612
SGTV58xx_AISxSelectInput(Input_Analog6, AIS_ADC);//tuner input
SGTV58xx_SSSIOConfig(SSSInput_ADC, SSSOutput_DAC_Main); // lsz 060612
//****************weifer debug add end
#if 1//weifer debug
// if(IsSourceHDMIPort(ucMPSource))
if(tvMPSourceIsHDMI())
{
if(tdMPSourceIsHDMI())//tvHDMISignalCheck if HDMI OR DVI
{
bI2SSignalChecked = _TRUE_;
// gm_AvsSetSource(gm_HdmiGetAvsSource()); //zenghw remove for temp 20061108
}
else
{
// gm_AvsSetSource(gmd_AVS_SOURCE_I2S_PINS);
ucMPSource = SRC_MP_RGB;
}
}
// else if(IsSourceHDMIPort(ucPPSource) && UserPrefPipMode != NO_PIP && UserPrefPipMode != MULTI_PIP)
else if(tvPPSourceIsHDMI() && (g_Data.ucWinStatus >= _TV_WIN_PIP_SS_ || g_Data.ucWinStatus <= _TV_WIN_POP_FULL_))
{
if(tvMPSourceIsHDMI())//tvHDMISignalCheck if HDMI OR DVI
{
bI2SSignalChecked = _TRUE_;
// gm_AvsSetSource(gmd_AVS_SOURCE_HDMI_I2S_OUTPUT);//zenghw remove for temp 20061108
}
else
{
// gm_AvsSetSource(gmd_AVS_SOURCE_I2S_PINS);
ucPPSource = SRC_PIP_RGB;
}
}
// else //zenghw remove for temp 20061108
// gm_AvsSetSource(gmd_AVS_SOURCE_I2S_PINS);
// Tenny at 2k61023 { Disable I2S prescaler if HDMI is unused
if(bI2SSignalChecked)
{
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__SSS_PSCLR_CTRL,
SGTV58XX_SSS_PSCLR_CTRL__I2SAIN__GETMASK,
SGTV58XX_SSS_PSCLR_CTRL__I2SAIN__PRESCALER_ON_VALUE);
}
else
{
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__SSS_PSCLR_CTRL,
SGTV58XX_SSS_PSCLR_CTRL__I2SAIN__GETMASK,
SGTV58XX_SSS_PSCLR_CTRL__I2SAIN__PRESCALER_OFF_VALUE);
}
switch(ucMPSource)
{
case SRC_MP_TV:// TV
#if 0
if(UserPrefFactory_ExternSyncDelay) //2#ifdef USE_EXTERN_DELAY
{
//if(UserPrefPipMode != NO_PIP && UserPrefPipMode != MULTI_PIP && IsSourceHDMIPort(ucPPSource) && gm_HdmiCheckStatus())
if(bI2SSignalChecked)
{
SGTV58xx_SSSIOConfig(SSSInput_Demod, SSSOutput_DAP_SGTLDP); // SIF to SGTL_DP
}
else
{
SGTV58xx_SSSIOConfig(SSSInput_Demod, SSSOutput_I2SA_DOut); // SIF to SGTL_DP
SGTV58xx_SSSIOConfig(SSSInput_I2SAin_DIn, SSSOutput_DAP_SGTLDP); // SIF to SGTL_DP
}
}
else //2#else
{
SGTV58xx_SSSIOConfig(SSSInput_Demod, SSSOutput_DAP_SGTLDP); // SIF to SGTL_DP
} //2#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -