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

📄 sync.c

📁 realtek LCD monitor, TV开发源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/********************************************************************************/
/*   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 + -