⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 audio_api.c

📁 The driver of audio processor SGTV5830 音频处理芯片SGTV5830驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
				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 + -