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

📄 audio_api.c

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