📄 sync.c
字号:
/********************************************************************************/
/* The Software is proprietary, confidential, and valuable to Realtek */
/* Semiconductor Corporation ("Realtek"). All rights, including but not */
/* limited to copyrights, patents, trademarks, trade secrets, mask work */
/* rights, and other similar rights and interests, are reserved to Realtek. */
/* Without prior written consent from Realtek, copying, reproduction, */
/* modification, distribution, or otherwise is strictly prohibited. The */
/* Software shall be kept strictly in confidence, and shall not be */
/* disclosed to or otherwise accessed by any third party. */
/* c<2003> - <2008> */
/* The Software is provided "AS IS" without any warranty of any kind, */
/* express, implied, statutory or otherwise. */
/********************************************************************************/
//----------------------------------------------------------------------------------------------------
// ID Code : Sync.c No.0000
// Update Note :
//----------------------------------------------------------------------------------------------------
#define __SYNC__
#include "Common\Header\Include.h"
#if(_SCALER_SERIES_TYPE == _RTD2472D_SERIES)
#if((_TMDS_SUPPORT == _ON) || (_HDMI_SUPPORT == _ON) ||(_DP_SUPPORT == _ON))
//--------------------------------------------------
// Description : PHY set
// Input Value : None
// Output Value : None
//--------------------------------------------------
void CSyncScanInputPortResetPhy(void)
{
#if(0)
CScalerSetByte(_PB_DP_PWR_CTL_B4,0x7f);
CTimerDelayXms(10);
CScalerSetByte(_PB_DP_OOBS_RXAMP_B0,0x0d);
CTimerDelayXms(10);
#endif
CScalerSetByte(_PB_DP_OOBS_RXAMP_B0,0x8d);
CTimerDelayXms(10);
CScalerSetByte(_PB_DP_OOBS_RXAMP_B0,0x0d);
CTimerDelayXms(10);
}
//--------------------------------------------------
// Description : Scan DVI input port to obtain if the signal is available
// Input Value : None
// Output Value : Return _TRUE if the signal is available
//--------------------------------------------------
bit CSyncScanInputPortDVI(void)
{
BYTE cnt0, cnt1;
bit flag =1;
// V010 Patch Note (20) : Modify for DE Only Mode
#if(_DVI_DE_ONLY_SUPPORT == _ON)
bit bDeSel = _DVI_DE_SUPPORT_OFF;
if(g_ucSearchTimes < 4)
{
bDeSel = _DVI_DE_SUPPORT_ON;
}
else
{
bDeSel = _DVI_DE_SUPPORT_OFF;
}
#endif
g_ucPhyFreq = 0;
// V010 Patch Note (19) : Modify Source Scan Handler.
if(GET_TMDS_INITIAL() == _TRUE)
{
CScalerPageSelect(_PAGE2);
CScalerSetBit(_P2_TMDS_RPS_AE, ~_BIT7, _BIT7); //cyyeh V008_20080806 Setting for Ignore Avmute flag , enable When Active State
CPowerADCAPLLOff();
#if(((_TMDS_SUPPORT == _ON) || (_HDMI_SUPPORT == _ON)) && (_DVI_LONG_CABLE_SUPPORT == _ON))
if(CAdjustTMDSEqualizer() == _FALSE)
return _FALSE;
#endif
CScalerPageSelect(_PAGE2);
CScalerSetBit(_SYNC_CTRL_49, ~(_BIT1 | _BIT0), 0x00);
if(GET_INPUT_PORT(g_ucSearchIndex) == _D0_INPUT_PORT)
CScalerSetBit(_P2_HDCP_PORT_CTRL_C2, ~_BIT1, (_DDC_CHANNEL_FOR_D0<<1));
else if(GET_INPUT_PORT(g_ucSearchIndex) == _D1_INPUT_PORT)
CScalerSetBit(_P2_HDCP_PORT_CTRL_C2, ~_BIT1, (_DDC_CHANNEL_FOR_D1<<1));
if((GET_INPUTPORT_TYPE(g_ucSearchIndex) == _D0_HDMI_PORT) || (GET_INPUTPORT_TYPE(g_ucSearchIndex) == _D1_HDMI_PORT))
{
SET_INPUTSOURCE_TYPE(_SOURCE_HDMI);
CScalerSetBit(_P2_POWER_ON_OFF_CTRL_A7, ~(_BIT6 | _BIT5), ((_HDMI_BR_SWAP << 6) | (_HDMI_PN_SWAP << 5)));
}
else
{
SET_INPUTSOURCE_TYPE(_SOURCE_DVI);
CScalerSetBit(_P2_POWER_ON_OFF_CTRL_A7, ~(_BIT6 | _BIT5), ((_DVI_BR_SWAP << 6) | (_DVI_PN_SWAP << 5)));
}
#if(_HDCP_SUPPORT == _ON)
CScalerSetBit(_P2_HDCP_CTRL_C0, ~_BIT0, _BIT0);
#endif
// V010 Patch Note (20) : Modify for DE Only Mode
#if(_DVI_DE_ONLY_SUPPORT == _ON)
if(bDeSel == _DVI_DE_SUPPORT_ON)
{
CScalerSetBit(_P2_POWER_ON_OFF_CTRL_A7, ~_BIT7, _BIT7);
}
else
{
CScalerSetBit(_P2_POWER_ON_OFF_CTRL_A7, ~_BIT7, 0x00);
}
#else
CScalerSetBit(_P2_POWER_ON_OFF_CTRL_A7, ~_BIT7, 0x00);
#endif
CTimerDelayXms(20);
CScalerPageSelect(_PAGEB);
#if((_SCALER_TYPE == _RTD2472D)||(_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
if(GET_INPUT_PORT(g_ucSearchIndex) == _D0_INPUT_PORT)
CScalerSetByte(_PB_DP_2D_SWITCH_B5,0x00);
else if(GET_INPUT_PORT(g_ucSearchIndex) == _D1_INPUT_PORT)
CScalerSetByte(_PB_DP_2D_SWITCH_B5,0x04);
#endif
#if(_SCALER_TYPE == _RTD2545LR)
if(GET_INPUT_PORT(g_ucSearchIndex) == _D0_INPUT_PORT)
CScalerSetByte(_PB_DP_2D_SWITCH_B5,0x02); //use auto calibration only for 2545LR
else if(GET_INPUT_PORT(g_ucSearchIndex) == _D1_INPUT_PORT)
CScalerSetByte(_PB_DP_2D_SWITCH_B5,0x06); //use auto calibration only for 2545LR
#endif
}
//if((GET_INPUTPORT_TYPE(ucSearchIndex) == _D0_HDMI_PORT)||(GET_INPUTPORT_TYPE(ucSearchIndex) == _D1_HDMI_PORT)||(GET_INPUTPORT_TYPE(ucSearchIndex) == _D0_DVI_PORT)||(GET_INPUTPORT_TYPE(ucSearchIndex) == _D1_DVI_PORT)||(GET_INPUTPORT_TYPE(ucSearchIndex) == _D0_DVI_I_PORT)||(GET_INPUTPORT_TYPE(ucSearchIndex) == _D1_DVI_I_PORT))
{
CTimerDelayXms(20);
if((ucCurrState == _SEARCH_STATE) || (ucCurrState == _NOSIGNAL_STATE) || ((ucCurrState == _SLEEP_STATE) && (bSleepByOverRange)))//1212 sephinroth
{
CScalerPageSelect(_PAGEC);
CScalerSetByte(_PC_DP_CTL_A1,0xE0);
CTimerDelayXms(2);
CScalerSetByte(_PC_DP_CTL_A1,0x60);
CScalerPageSelect(_PAGEB);
CScalerSetByte(_PB_DIG00_E0, 0xD0);
CScalerPageSelect(_PAGEB);
CScalerSetByte(_PB_DP_Z0_CALIBRATION_B6,0xf4); // 0xf8
CScalerSetByte(_PB_DP_RXMISC_02_AF,0x87);
CScalerSetByte(_PB_DP_PWR_CTL_B4,0x7f);
CScalerSetByte(_PB_DP_ADP_EQ_B2,0x76);
CScalerSetByte(_PB_DP_AUX_00_B3,0x92);
#if((_SCALER_TYPE == _RTD2472D) ||(_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
CScalerSetByte(_PB_DP_FLD_05_A9,0x3b);
CScalerSetByte(_PB_DP_FLD_06_AA,0x76);
CScalerSetByte(_PB_DP_FLD_07_AB,0xED);
#elif(_SCALER_TYPE == _RTD2545LR)
CScalerSetByte(_PB_DP_FLD_05_A9,0xc2);
CScalerSetByte(_PB_DP_FLD_06_AA,0x85);
CScalerSetByte(_PB_DP_FLD_07_AB,0x0a);
#else
No Setting !!
#endif //End of #if((_SCALER_TYPE == _RTD2472D) ||(_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
CSyncScanInputPortResetPhy();
// ****************************************************
// HDMI Front End Phy Parameter Seeting :
// _PB_DP_CDR_01_A1 : KVCO's divider, PFD, Rate
// _PB_DP_CDR_02_A2 : Icp, Cp, R, KVCO
// _PB_DP_CDR_03_A3 : SEL_IB90
// _PB_DP_FLD_09_AD : Icp's MSB, CSOP
// _PB_DP_ADP_EQ_B2 : enable boost2
// _PB_DP_RESERVED_05_BF : SEL_AMPR2, more HPF
// *****************************************************
#if(_SCALER_TYPE == _RTD2472D)
CScalerRead(_PB_DP_FLD_03_A7, 1, pData, _NON_AUTOINC);
pData[0] &= 0xf0;
if(pData[0] == 0x80) // 25~50MHz
{
CScalerSetByte(_PB_DP_CDR_01_A1,0x82);
CScalerSetByte(_PB_DP_CDR_02_A2,0x39);
CScalerSetByte(_PB_DP_CDR_03_A3,0x94);
CScalerSetByte(_PB_DP_FLD_09_AD,0x2F);
CScalerSetByte(_PB_DP_RESERVED_05_BF,0xF1);
CScalerSetByte(_PB_DP_RXMISC_01_AE,0x01);
// V010 Patch Note (21) : Add PHY Frequency Detection in TMDS mode.
g_ucPhyFreq = _PHY_FREQUENCY_25_50;
}
else if(pData[0] == 0xb0) // 50~100MHz
{
CScalerSetByte(_PB_DP_FLD_05_A9,0x2c);
CScalerSetByte(_PB_DP_FLD_06_AA,0x4B);
CScalerSetByte(_PB_DP_FLD_07_AB,0xb2);
CSyncScanInputPortResetPhy();
CScalerRead(_PB_DP_FLD_03_A7, 1, pData, _NON_AUTOINC);
pData[0] &= 0xf0;
if(pData[0] == 0xb0) //50~62.5MHz
{
CScalerSetByte(_PB_DP_CDR_01_A1,0x42);
CScalerSetByte(_PB_DP_CDR_02_A2,0x5a);
CScalerSetByte(_PB_DP_CDR_03_A3,0x94);
CScalerSetByte(_PB_DP_FLD_09_AD,0x2F);
CScalerSetByte(_PB_DP_RESERVED_05_BF,0xF1);
CScalerSetByte(_PB_DP_RXMISC_01_AE,0x01);
// V010 Patch Note (21) : Add PHY Frequency Detection in TMDS mode.
g_ucPhyFreq = _PHY_FREQUENCY_50_62;
}
else if(pData[0] == 0x70) //62.5~100MHz
{
CScalerSetByte(_PB_DP_CDR_01_A1,0x42);
CScalerSetByte(_PB_DP_CDR_02_A2,0x5a);
CScalerSetByte(_PB_DP_CDR_03_A3,0x94);
CScalerSetByte(_PB_DP_FLD_09_AD,0x2F);
CScalerSetByte(_PB_DP_RXMISC_01_AE,0x01);
CScalerSetByte(_PB_DP_RESERVED_05_BF,0xF1);
// V010 Patch Note (21) : Add PHY Frequency Detection in TMDS mode.
g_ucPhyFreq = _PHY_FREQUENCY_62_100;
}
}
else if(pData[0] == 0x70) // 100~200MHz
{
CScalerSetByte(_PB_DP_FLD_05_A9,0x2c);
CScalerSetByte(_PB_DP_FLD_06_AA,0x59);
CScalerSetByte(_PB_DP_FLD_07_AB,0xb2);
CSyncScanInputPortResetPhy();
CScalerRead(_PB_DP_FLD_03_A7, 1, pData, _NON_AUTOINC);
pData[0] &= 0xf0;
if(pData[0] == 0x70) //100~150MHz
{
CScalerSetByte(_PB_DP_CDR_01_A1,0x72);
CScalerSetByte(_PB_DP_CDR_02_A2,0x21);
CScalerSetByte(_PB_DP_CDR_03_A3,0x8c);
CScalerSetByte(_PB_DP_FLD_09_AD,0x07);
CScalerSetByte(_PB_DP_RESERVED_05_BF,0xF0);
CScalerSetByte(_PB_DP_RXMISC_01_AE,0x01);
// V010 Patch Note (21) : Add PHY Frequency Detection in TMDS mode.
g_ucPhyFreq = _PHY_FREQUENCY_100_150;
}
else if(pData[0] == 0x30) //150~200MHz
{
CScalerSetByte(_PB_DP_CDR_01_A1,0x72);
CScalerSetByte(_PB_DP_CDR_02_A2,0x21);
CScalerSetByte(_PB_DP_CDR_03_A3,0x8c);
CScalerSetByte(_PB_DP_FLD_09_AD,0x07);
CScalerSetByte(_PB_DP_RESERVED_05_BF,0xF0);
CScalerSetByte(_PB_DP_RXMISC_01_AE,0x01);
// V010 Patch Note (21) : Add PHY Frequency Detection in TMDS mode.
g_ucPhyFreq = _PHY_FREQUENCY_150_200;
}
}
else if(pData[0] == 0x30) // 200~340MHz
{
CScalerSetByte(_PB_DP_CDR_01_A1,0x32);
CScalerSetByte(_PB_DP_CDR_02_A2,0x21);
CScalerSetByte(_PB_DP_CDR_03_A3,0x8c);
CScalerSetByte(_PB_DP_FLD_09_AD,0x07);
CScalerSetByte(_PB_DP_RESERVED_05_BF,0xF0);
CScalerSetByte(_PB_DP_RXMISC_01_AE,0x01);
// V010 Patch Note (21) : Add PHY Frequency Detection in TMDS mode.
g_ucPhyFreq = _PHY_FREQUENCY_200_340;
}
CScalerSetByte(_PB_DP_ADP_EQ_B2,0x76);
CScalerSetByte(_PB_DP_RXMISC_02_AF,0xC7);
CScalerSetByte(_PB_DIG01_E1,0xf0);
CSyncScanInputPortResetPhy();
//CTimerDelayXms(100);
CScalerSetByte(_PB_DP_PWR_CTL_B4,0x7f);
#elif((_SCALER_TYPE == _RTD247xRD) || (_SCALER_TYPE == _RTD248xRD))
CScalerRead(_PB_DP_FLD_03_A7, 1, pData, _NON_AUTOINC);
pData[0] &= 0xf0;
if(pData[0] == 0x80) // 25~50MHz
{
CScalerSetByte(_PB_DP_CDR_01_A1,0x82);
CScalerSetByte(_PB_DP_CDR_02_A2,0x39); // 0x7a
CScalerSetByte(_PB_DP_CDR_03_A3,0x94);
CScalerSetByte(_PB_DP_FLD_09_AD,0x2F);
CScalerSetByte(_PB_DP_RESERVED_05_BF,0xF1);
CScalerSetByte(_PB_DP_RXMISC_01_AE,0x01);
CScalerSetByte(_PB_DP_ADP_EQ_B2,0x76);
// V010 Patch Note (21) : Add PHY Frequency Detection in TMDS mode.
g_ucPhyFreq = _PHY_FREQUENCY_25_50;
}
else if(pData[0] == 0xb0) // 50~100MHz
{
CScalerSetByte(_PB_DP_FLD_05_A9,0x2c);
CScalerSetByte(_PB_DP_FLD_06_AA,0x4B);
CScalerSetByte(_PB_DP_FLD_07_AB,0xb2);
CSyncScanInputPortResetPhy();
CScalerRead(_PB_DP_FLD_03_A7, 1, pData, _NON_AUTOINC);
pData[0] &= 0xf0;
if(pData[0] == 0xb0) //50~62.5MHz
{
CScalerSetByte(_PB_DP_CDR_01_A1,0x42);
CScalerSetByte(_PB_DP_CDR_02_A2,0xba);
CScalerSetByte(_PB_DP_CDR_03_A3,0x94);
CScalerSetByte(_PB_DP_FLD_09_AD,0x2F);
CScalerSetByte(_PB_DP_RESERVED_05_BF,0xF1);
CScalerSetByte(_PB_DP_RXMISC_01_AE,0x01);
CScalerSetByte(_PB_DP_ADP_EQ_B2,0x76);
// V010 Patch Note (21) : Add PHY Frequency Detection in TMDS mode.
g_ucPhyFreq = _PHY_FREQUENCY_50_62;
}
else if(pData[0] == 0x70) //62.5~100MHz
{
CScalerSetByte(_PB_DP_CDR_01_A1,0xB2);
CScalerSetByte(_PB_DP_CDR_02_A2,0x21);
CScalerSetByte(_PB_DP_CDR_03_A3,0x8c);
CScalerSetByte(_PB_DP_FLD_09_AD,0x07);
CScalerSetByte(_PB_DP_RESERVED_05_BF,0xF0);
CScalerSetByte(_PB_DP_RXMISC_01_AE,0x01);
CScalerSetByte(_PB_DP_ADP_EQ_B2,0x76);
// V010 Patch Note (21) : Add PHY Frequency Detection in TMDS mode.
g_ucPhyFreq = _PHY_FREQUENCY_62_100;
}
}
else if(pData[0] == 0x70) // 100~200MHz
{
CScalerSetByte(_PB_DP_FLD_05_A9,0x2c);
CScalerSetByte(_PB_DP_FLD_06_AA,0x59);
CScalerSetByte(_PB_DP_FLD_07_AB,0xb2);
CSyncScanInputPortResetPhy();
CScalerRead(_PB_DP_FLD_03_A7, 1, pData, _NON_AUTOINC);
pData[0] &= 0xf0;
if(pData[0] == 0x70) //100~150MHz
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -