📄 chips.c
字号:
{ case CHIPS_UP : if (_bDualMode < DUAL_MIXEDMONO) _bDualMode ++ ; break ; case CHIPS_DOWN : if (_bDualMode > DUAL_STEREO) _bDualMode -- ; break ; case CHIPS_NORMAL : _bDualMode = 0 ; break ; case CHIPS_TOGGLE : _bDualMode ++ ; _bDualMode %= 4 ; break ; case CHIPS_LEVEL : return _bDualMode ; case CHIPS_SUPPORT : return TRUE ; default : break ; } CHIPS_OpenAudio(TRUE); //OSD_OUTPUT_MACRO(MSG_DUAL, _bDualMode, 3 ); return TRUE;}#endif// *********************************************************************// Function : _ChangeDSPCode// Description : It will load correct dsp code according to the desired audio type// This function is mainly called by _SetAudType function// Only BA5580 need to change dsp code// Arguments : bType: The type of command (Reference HAL_SetAudioType)// Return : None// Change :// Side Effect :// *********************************************************************void _ChangeDSPCode(BYTE bType){//Kevin909, runtime unzip separate Audio codes#ifdef RUNTIME_UNZIP_AUDIO_CODE DWORD dwTempReg; // LLY2.55, remove it since current using PROC2 code will be kept in __bCurProc2Code //static BYTE _bCurAudioType = HAL_AUDIO_NONE; switch(bType) { case HAL_AUDIO_MPG: case HAL_AUDIO_MP3: case HAL_AUDIO_MP2: bType = HAL_AUDIO_MPG; break; default: break; } // LLY2.55, don't compare desired PROC2 code w/ _bCurAudioType // Since, current F/W will call HAL_ReloadAudioDecoder() directly w/o keeping current using code // So, the comparsion statement maybe worng. // ex. DMP solution: LOGO (JPEG code) --> play MP3 + JPEG (load MP3 code by call HAL_ReloadAudioDecoder() directly) // --> KEY_FUNCTION to return main (it's JPEG logo) ==> will be think as same PROC2 code. /* if((bType == _bCurAudioType) || (bType == HAL_AUDIO_NONE)) return; */ if( (bType == __bCurProc2Code) || (bType == HAL_AUDIO_NONE) ) { return; }#if 0 switch(bType) { case HAL_AUDIO_MPG: case HAL_AUDIO_MP3: case HAL_AUDIO_MP2: HAL_WriteAM(HAL_AM_AUDIO_TYPE, 2); break; // MPEG case HAL_AUDIO_PCM: case HAL_AUDIO_LPCM: HAL_WriteAM(HAL_AM_AUDIO_TYPE, 3); break; // PCM case HAL_AUDIO_DTS: HAL_WriteAM(HAL_AM_AUDIO_TYPE, 4); if(__wDiscType & BOOK_DVD) { HAL_WriteAM(HAL_AM_DTS_MODE, 0); } else if(__wDiscType & BOOK_CDDA) { HAL_WriteAM(HAL_AM_DTS_MODE, 1); } break; // DTS case HAL_AUDIO_WMA: HAL_WriteAM(HAL_AM_AUDIO_TYPE, 6); break; // WMA // LLY2.17, add for AAC audio stream case HAL_AUDIO_AAC: break; // AAC case HAL_AUDIO_AC3: default: HAL_WriteAM(HAL_AM_AUDIO_TYPE, 1); break; // default audio code is AC3 }#endif // LLY2.55, remove it since current using PROC2 code will be kept in __bCurProc2Code // within HAL_ReloadAudioDecoder() //_bCurAudioType = bType; //for stop: may be removed if audio decoder doesn't check audio type HAL_Reset(HAL_RESET_AUDIO); //senshong2.38a: JPEG decoder use REG_AIU_GR(2) ~ REG_AIU_GR(17) to connect width processor 2 from processor 1 //So before playback audio, we need to reset REG_AIU_GR(2) ~ REG_AIU_GR(17).#ifdef SUPPORT_JPEGDEC_ON_PROC2 { BYTE bIndx; for ( bIndx=2; bIndx<17; bIndx++) { REG_AIU_GR(bIndx)= 0; } }#endif //reload audio decoder // Micky2.11a HAL_ReloadAudioDecoder(bType); //restart HAL_Reset(HAL_RESET_AUDIO);#if (AUDIO_ALIGN_FORMAT == I2S_ALIGN) dwTempReg = (BIT_RESOL_VALUE<<7) | (BIT_RESOL_VALUE<<4) | (ALIGN_VALUE<<2) | (1<<18) | (1<<1); //[31] timer#else dwTempReg = (BIT_RESOL_VALUE<<7) | (BIT_RESOL_VALUE<<4) | (ALIGN_VALUE<<2) | (1<<18); //[31] timer#endif // #if (AUDIO_ALIGN_FORMAT == I2S_ALIGN) // LLY2.61, re-modify the procedure for programming REG_AIU_SPORT_CONFG0 bit[16:13] // 1. only enable bit[13] (downmix L/R) while using internal audio DAC // 2. enable bit[16:13] (5.1 channel + downmix L/R) while internal + external audio DAC. // 3. enable bit[13] for 2 channel external audio DAC mode // 4. enable bit[16:14] for 5.1 channel external audio DAC mode // Notice: CT909P IC only support 2 channel only external audio DAC, so only can enable bit[13] // CT909R IC bit[16:13] must control together since H/W bug even internal audio DAC // or 2 channel only exteranl audio DAC // CT909G IC, bit[16:13] can be control indepentent. And, it's ok to enable all bit // even 2 channel only mode.#ifdef CT909P_IC_SYSTEM dwTempReg |= (0x1L<<13);#else // #ifdef CT909P_IC_SYSTEM dwTempReg |= (0xfL<<13);#endif // #ifdef CT909P_IC_SYSTEM if(REG_AIU_SPORT_CONFG0 != dwTempReg) { DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "\nREG_AIU_SPORT_CONFG0 Setting Wrong"); // LLY2.56, do key lock first since AIU_SPORT_CONFG0 will be accessed by PROC2 together MACRO_PLAT_KEY_LOCK( ); REG_AIU_SPORT_CONFG0 = dwTempReg; MACRO_PLAT_KEY_UNLOCK( ); }#endif // RUNTIME_UNZIP_AUDIO_CODE}// Kevin1.10, create// *********************************************************************// Function : CHIPS_ControlAnalogOutput// Description : Control Analog Output on/off// Arguments : None// Return : None// Side Effect : None// *********************************************************************//#pragma NOAREGS // may be called in ISR (CHIPS_ControlAnalogOutput() -> CHIPS_OpenAudio()-> ISRvoid CHIPS_ControlAnalogOutput(void){ //kevin0.91, fix DTS still has analog output for the part No. that doesn't support DTS if((__SetupInfo.bAudioAnalogOut == SETUP_AUDIO_ANALOG_OUT_OFF) || ((__bAudioType == HAL_AUDIO_DTS) && !(__dwSupportFeature&SUPPORT_FEATURE_DTS))) HAL_WriteAM(HAL_AM_PCM_MUTE, 1); else HAL_WriteAM(HAL_AM_PCM_MUTE, 0);}// *********************************************************************// Function : _SetAudType// Description : It will set audio type to register according to the parameter// This function is mainly called by HAL_SetAudioType function// Arguments : bType: The type of command (Reference HAL_SetAudioType)// Return : None// Change :// Side Effect :// *********************************************************************void _SetAudType(BYTE bType){ //WORD wTemp; BYTE bOldAudType, bOldSpdifMode; // TCC171, Backup old audio type and spdif mode. Only these 2 value change need reset dsp. bOldAudType = _bAudType; bOldSpdifMode = _bSpDifMode; //kevin0.67, change Proc2 code will take effect since the following HAL_RESET_AUDIO //Kevin2.31, move from below here. Run-time unzip DSP ucode will destroy audio config regs/DMs _ChangeDSPCode(bType);#ifndef DOLBY_CERTIFICATION //Kevin0.76a, keep acmod settings // TCC031, reference setup module for current setting CHIPS_Initial(CHIPS_INIT_CHANNELMODE);#endif // TCC274, move to a function _SetAudio(bType); // TCC171, only these 2 types change need reset dsp. // Brian.276p, JPEG mode (HAL_AUDIO_NONE) doesn't need reset //Kevin1.07, fix "Setup->Audio->Digital out->SPDIF PCM/RAW->exit setup, audio will be unsmooth" //if ((bOldAudType != _bAudType || bOldSpdifMode != _bSpDifMode) && bType != HAL_AUDIO_NONE) if((bOldAudType != _bAudType) && (bType != HAL_AUDIO_NONE)) { // TCC046, need to reset dsp before set register & dm HAL_Reset (HAL_RESET_AUDIO); } //Kevin1.24a, add //Kevin1.10, Control Analog Output on/off CHIPS_ControlAnalogOutput(); //Kevin1.24a, uncomment to fix SPDIF: mute->prestop->resume => auto mute off _dwACR2[14] //Kevin1.10, comment CHIPS_ControlSPDIFOutput(); //Kevin1.08, set ProLogic|| DM CHIPS_ProLogicControl(); //Kevin0.80 CHIPS_ControlHDCD();}// *********************************************************************// Function : CHIPS_SPDIF_OnOff// Description : Turn on/off SPDIF via AND gate hardware since BE chip// Arguments : bOn: 1: Turn on SPDIF (SPDIF carrier signal)// 0: Turn off SPDIF (grounding)// Return : None// Side Effect : None// *********************************************************************//#pragma NOAREGS // may be called in ISRvoid CHIPS_SPDIF_OnOff(BYTE bOn){ // Joey_238: SPDIF rule. [D30:D29], 01: off, 00: on, 02: on and mute if(bOn) { REG_PLAT_SYSTEM_CONFIGURATION1 &= ~(3 << 29); // set D30-D29 = 0 REG_AIU_AIUEN |= AIU_DMA_ENABLE_SPDIF_OUT; } else { REG_PLAT_SYSTEM_CONFIGURATION1 = (REG_PLAT_SYSTEM_CONFIGURATION1 & ~(3 << 29)) | (1 << 29); // set D30-D29 = 1 }}// Kevin2.80, create// *********************************************************************// Function : CHIPS_SPDIF_Mute// Description : enable/disable SPDIF// Arguments : bEnable: 1: enable SPDIF// 0: disable SPDIF// Return : None// Side Effect : None// *********************************************************************//#pragma NOAREGS // may be called in ISRvoid CHIPS_SPDIF_Mute(BYTE bEnable){ // Joey_238: SPDIF rule. [D30:D29], 01: off, 00: on, 02: on and mute if(((REG_PLAT_SYSTEM_CONFIGURATION1 >> 29) & 3) != 1) { if(bEnable) { REG_PLAT_SYSTEM_CONFIGURATION1 &= ~(3 << 29); // set D30-D29 = 0 REG_AIU_AIUEN |= AIU_DMA_ENABLE_SPDIF_OUT; } else { REG_PLAT_SYSTEM_CONFIGURATION1 = (REG_PLAT_SYSTEM_CONFIGURATION1 & ~(3 << 29)) | (2 << 29); // set D30-D29 = 2 } }}// *********************************************************************// Function : CHIPS_ControlSPDIFOutput// Description : Control SPDIF enable/disable// Arguments : None// Return : None// Side Effect :// *********************************************************************// because CHIP_ControlSPDIFOutput() --> CHIPS_OpenAudio() --> ISR//#pragma NOAREGS // may be called in ISRvoid CHIPS_ControlSPDIFOutput(void){//kevin1.10, avoid PROC2 performance is not enough when doing language study// wyc2.17-909S, for language study // Joey2.60: SPDIF PCM without volume control. HAL_WriteAM(HAL_AM_DO_SPDIF_PCM_SCALE, 1);#if (SLOW_MODE_CONFIG != NORMAL_SLOW_MODE) if((__bLangStudyFlag == TRUE) && (_bSpDifMode ==1)) { CHIPS_SPDIF_Mute(0); //disable spdif CHIPS_SPDIF_OnOff(0); //turn off SPDIF via AND gate } else#endif if(_bSpDifMode == 2) { CHIPS_SPDIF_Mute(0); //disable spdif CHIPS_SPDIF_OnOff(0); //turn off SPDIF via AND gate } else { if(__btMute) // In mute state CHIPS_SPDIF_Mute(0); else CHIPS_SPDIF_Mute(1); //enable spdif CHIPS_SPDIF_OnOff(1); //turn on SPDIF via AND gate }}// *********************************************************************// Function : CHIPS_OpenAudio// Description : It will set dsp related registers according to the// global variables set by almost all above functions// Arguments : bParam: The type of command// TRUE : Turn on audio// FALSE : Turn off audio// Return : None// Change :// Side Effect :// *********************************************************************// when not using karaoke chip// function is called automatically when playing each item// so it must open the volume by channel, mute, key control status//#pragma NOAREGS // may be called in ISR//Kevin0.87, modify//void CHIPS_OpenAudio(BYTE bParam)BYTE CHIPS_OpenAudio(BYTE bParam){ if(bParam == FALSE) // Turn on audio { // Brian.173, Mute the MIC input first CHIPS_MICEnable(FALSE); // LLY.273, use "soft-mute" to replace original method CHIPS_SoftMute(); CHIPS_SPDIF_Mute(0); // LLY2.16, do H/W mute while mute to pass 瓣夹 mute testing (909R bug??) //HAL_IOMute(TRUE); } else { if(__btMute) // watch out for this break, 'casue the following function will not be called. return TRUE; if(__bSurround != CHIPS_SURROUND_NONE) { HAL_WriteAM(HAL_AM_SURR_EN, 1); if(__bSurround == CHIPS_SURROUND_LIVE) // live { HAL_WriteAM(HAL_AM_SURR_0, SURROUND_TYPE_LIVE); } else if(__bSurround == CHIPS_SURROUND_THEATER) { HAL_WriteAM(HAL_AM_SURR_0, SURROUND_TYPE_THEATER); } // TCC028, add surround type for future usage else if(__bSurround == CHIPS_SURROUND_STEREO) { HAL_WriteAM(HAL_AM_SURR_0, SURROUND_TYPE_STEREO); } else if(__bSurround == CHIPS_SURROUND_MOVIE) { HAL_WriteAM(HAL_AM_SURR_0, SURROUND_TYPE_MOVIE); } else if(__bSurround == CHIPS_SURROUND_KARAOKE) { HAL_WriteAM(HAL_AM_SURR_0, SURROUND_TYPE_KARAOKE); } } else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -