 //----------------------------------------------------------------------------------------------------
// ID Code      : YPbPr.c No.0001
// Update Note  :
//
//----------------------------------------------------------------------------------------------------

#define __YPBPR__

#include "Core\Header\Include.h"

#if(_YPBPR_SUPPORT == _ON)

BYTE code tYPBPR_TABLE_SET_SCALER[] =
{
#if(_SCALER_TYPE == _RTD2662)

    4,  _NON_AUTOINC,   _SYNC_PROC_ACCESS_PORT_5C,      _SYNC_G_CLAMP_START_00,
    7,  _NON_AUTOINC,   _SYNC_PROC_DATA_PORT_5D,        0x10,0x18,0x10,0x18,

    
    4,  _NON_AUTOINC,   _SYNC_PROC_ACCESS_PORT_5C,      _SYNC_CAPTURE_WINDOW_SET_07,
  #if (_YPBPR_NONE_CHECK_APLL)	 
    5,  _NON_AUTOINC,   _SYNC_PROC_DATA_PORT_5D,        0x21,0x14,	
  #else
    5,  _NON_AUTOINC,   _SYNC_PROC_DATA_PORT_5D,        0x21,0x04, 
  #endif

    4,  _NON_AUTOINC,   _CB_ACCESS_PORT_64,             0x80,
    9,  _NON_AUTOINC,   _CB_DATA_PORT_65,               0x7e,0x7e,0x7e,0x80,0x80,0x80,
    4,  _NON_AUTOINC,   _CB_ACCESS_PORT_64,             0x00,

    4,  _NON_AUTOINC,   _YUV2RGB_CTRL_9C,               0x08,
    21, _NON_AUTOINC,   _YUV_RGB_COEF_DATA_9D,          0x04,0x00,0x00,0x00,0x06,0x60,
                                                        0x04,0x00,0xfe,0x70,0xfc,0xc0,
                                                        0x04,0x00,0x08,0x10,0x00,0x00,

    4,  _NON_AUTOINC,   _YUV2RGB_CTRL_9C,               0x07,

    4,  _NON_AUTOINC,   _PAGE_SELECT_9F,                _PAGE0,
    9,  _AUTOINC,       _P0_RED_GAIN_C0,                0x80,0x80,0x80,0x80,0x80,0x80,
    // 4,  _NON_AUTOINC,   _P0_ADC_CLAMP_CTRL1_D5,         0x11,
  //20090601, add
    4,  _NON_AUTOINC,   _P0_ADC_V_BAIS0_CA,             0x01,	
#else

    4,  _NON_AUTOINC,   _PAGE_SELECT_A0,                _PAGE0,
  #if(_YPBPR_AUTO_SOY==_ENABLE)
    6,  _AUTOINC,       _P0_ADC_RED_CTL_A2,             0xc0,0x20,0xc0,	//Green clamp voltage:200mv
    4,  _NON_AUTOINC,   _P0_ADC_TEST_CTRL_AF,           0x04,			//SOG resistor:500k
  #else
    6,  _AUTOINC,       _P0_ADC_RED_CTL_A2,             0xc0,0x40,0xc0,	//Green clamp voltage:400mv
    4,  _NON_AUTOINC,   _P0_ADC_TEST_CTRL_AF,           0x08,			//SOG resistor:1M
  #endif
	4,  _NON_AUTOINC,   _P0_ADC_V_BAIS1_B2,             0x0d,

    4,  _NON_AUTOINC,   _SYNC_PROC_ACCESS_PORT_5C,      _SYNC_G_CLAMP_START_00,
    11,  _NON_AUTOINC,   _SYNC_PROC_DATA_PORT_5D,        0x08,0x0A,0x10,0x18,0x02,0x01,0x02,0x21,

//V304 modify
    4,  _NON_AUTOINC,   _CB_ACCESS_PORT_64,             0x80,
    9,  _NON_AUTOINC,   _CB_DATA_PORT_65,               0x7e,0x7e,0x7e,0x80,0x80,0x80,
    4,  _NON_AUTOINC,   _CB_ACCESS_PORT_64,             0x00,
    
	4,  _NON_AUTOINC,   _PAGE_SELECT_A0,                _PAGE0,
	9,  _AUTOINC,       _P0_RED_GAIN_A5,                0x80,0x80,0x80,0x80,0x80,0x80,
    

    4,  _NON_AUTOINC,   _YUV2RGB_CTRL_9C,               0x08,
    21, _NON_AUTOINC,   _YUV_RGB_COEF_DATA_9D,          0x04,0x00,0x00,0x00,0x05,0x80,
                                                        0x04,0x00,0xfe,0xa0,0xfd,0x40,
                                                        0x04,0x00,0x07,0x00,0x00,0x00,
/*    5,  _AUTOINC,       _YUV2RGB_CTRL_9C,               0x08,0x05,
    5,  _AUTOINC,       _YUV2RGB_CTRL_9C,               0x28,0x80,
    5,  _AUTOINC,       _YUV2RGB_CTRL_9C,               0x48,0x01,
    5,  _AUTOINC,       _YUV2RGB_CTRL_9C,               0x68,0x40,
    5,  _AUTOINC,       _YUV2RGB_CTRL_9C,               0x88,0x00,
    5,  _AUTOINC,       _YUV2RGB_CTRL_9C,               0xa8,0xa0,
    5,  _AUTOINC,       _YUV2RGB_CTRL_9C,               0xc8,0x07,
    5,  _AUTOINC,       _YUV2RGB_CTRL_9C,               0xe8,0x00,
*/
	4,  _NON_AUTOINC,   _YUV2RGB_CTRL_9C,               0x07,
#endif    
    _END
};

/**
 * CYPbPrSearchMode
 * Search mode for YPbPr
 * @param <none>
 * @return {_TRUE if there is a preset mode ;_FALSE if not}
 *
*/

//--------------------------------------------------
// Description  : Search mode for YPbPr
// Input Value  : None
// Output Value : YPbPr Mode number
//--------------------------------------------------
BYTE CYPbPrSearchMode(void)
{
    BYTE cnt, modetemp = _MODE_NOSUPPORT;

    for(cnt=0;cnt<_MAX_YPBPR_MODE;cnt++)
    {
        if(CYPbPrCompareMode(cnt) == _TRUE)
        {
            modetemp = cnt;
			//DebugPrintf("\n YPbPrMode = %x\n",modetemp);			
            break;
        }
    }

    return modetemp;
}

/**
 * CModeSearchDisplayMode
 * Search display mode according to the input source
 * called only by CModeDetectCommon
 * @param <none>
 * @return {_TRUE if there is a stable mode;_FALSE if not}
 *
*/
//--------------------------------------------------
// Description  : Compare mode in YPbPr mode table
// Input Value  : Mode number
// Output Value : Return _TRUE if get an available mode
//--------------------------------------------------
bit CYPbPrCompareMode(BYTE ucModeCnt)
{
    	//if(abs(stModeInfo.IVFreq - tYPBPR_MODE_TABLE[ucModeCnt].IVFreq) > tYPBPR_MODE_TABLE[ucModeCnt].IVFreqTolerance)
    	if(abs(stModeInfo.IVFreq - CYpbprGetTableData(ucModeCnt, sPC_IVFreq)) > CYpbprGetTableData(ucModeCnt, sPC_IVFreqTolerance))
    	{
        	return _FALSE;
    	}

    	//if(abs(stModeInfo.IHFreq - tYPBPR_MODE_TABLE[ucModeCnt].IHFreq) > tYPBPR_MODE_TABLE[ucModeCnt].IHFreqTolerance)
    	if(abs(stModeInfo.IHFreq - CYpbprGetTableData(ucModeCnt, sPC_IHFreq)) > CYpbprGetTableData(ucModeCnt, sPC_IHFreqTolerance))
    	{
        	return _FALSE;
    	}

    	return _TRUE;
}

/**
 * CYPbPrGetModeInfo
 * Get mode information for YPbPr
 * called only by CYPbPrSetupMode
 * @param <none>
 * @return {none}
 *
*/
//--------------------------------------------------
// Description  : Get mode information for YPbPr
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CYPbPrGetModeInfo(void)
{
/*
    stModeInfo.IHTotal = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IHTotal;
    stModeInfo.IHStartPos = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IHStartPos;
    stModeInfo.IHWidth = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IHWidth;

    stModeInfo.IVStartPos = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IVStartPos;
    stModeInfo.IVHeight = tYPBPR_MODE_TABLE[stModeInfo.ModeCurr].IVHeight;

    stModeUserData.Clock = stModeInfo.IHTotal;
    stModeUserData.Phase = 0;
    stModeUserData.HPosition = stModeInfo.IHStartPos;
    stModeUserData.VPosition = stModeInfo.IVStartPos;

    // Test
    stModeUserCenterData.CenterClock    = stModeInfo.IHTotal;
    stModeUserCenterData.CenterHPos     = stModeInfo.IHStartPos;
    stModeUserCenterData.CenterVPos     = stModeInfo.IVStartPos;
*/


    stModeInfo.IHTotal = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IHTotal);
#ifdef INNOLUX_AT090

 	if((stModeInfo.ModeCurr==3))	//ntsc		//alter 100123
	{
		stModeInfo.IHStartPos = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IHStartPos)+6;
		stModeInfo.IHWidth = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IHWidth)-8;

		stModeInfo.IVStartPos = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IVStartPos)+4;
		stModeInfo.IVHeight = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IVHeight);
}
else 	if((stModeInfo.ModeCurr==2))		// pal	//alter 100123
	{
		stModeInfo.IHStartPos = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IHStartPos)+2;
		stModeInfo.IHWidth = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IHWidth);

		stModeInfo.IVStartPos = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IVStartPos)+2;
		stModeInfo.IVHeight = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IVHeight);
}

#else
 	if((stModeInfo.ModeCurr==3)||(stModeInfo.ModeCurr==2))			//alter 100123
	{
		stModeInfo.IHStartPos = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IHStartPos);
		stModeInfo.IHWidth = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IHWidth);

		stModeInfo.IVStartPos = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IVStartPos);
		stModeInfo.IVHeight = CYpbprGetTableData(stModeInfo.ModeCurr, sPC_IVHeight);
}
#endif
    stModeUserData.Clock = stModeInfo.IHTotal;
    stModeUserData.Phase = 0;
    stModeUserData.HPosition = stModeInfo.IHStartPos;
    stModeUserData.VPosition = stModeInfo.IVStartPos;

    // Test
    stModeUserCenterData.CenterClock    = stModeInfo.IHTotal;
    stModeUserCenterData.CenterHPos     = stModeInfo.IHStartPos;
    stModeUserCenterData.CenterVPos     = stModeInfo.IVStartPos;
	
}

/**
 * CYPbPrStartUp
 * settings for YPbPr startup
 * @param <none>
 * @return {none}
 *
*/
//--------------------------------------------------
// Description  : Start up settings for YPbPr
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CYPbPrStartUp(void)
{
    CScalerCodeW(tYPBPR_TABLE_SET_SCALER);
#if 0//(_YPBPR_HW_AUTO_SOY == _ENABLE)
	if(stModeInfo.ModeCurr ==3)//for panasonic 480p
	{		
		CScalerPageSelect(_PAGEB);
		CScalerSetByte(0xc0, 0x1d);
	}
	else if(stModeInfo.ModeCurr ==1)//for panasonic 480i
	{		
		CScalerPageSelect(_PAGEB);
		CScalerSetByte(0xc0, 0x1d);
		CScalerSetByte(0xc2, 0x85);
	}
	
#endif	
}

/**
 * CYPbPrSetupMode
 * set YPbPr for display
 * @param <none>
 * @return {none}
 *
*/
//--------------------------------------------------
// Description  : Setup YPbPr mode
// Input Value  : None
// Output Value : None
//--------------------------------------------------
//RT SVN239
//void CYPbPrSetupMode(void)
bit CYPbPrSetupMode(void)
{
    BYTE option = 0;

#if(_YPBPR_NEW_SYNC_DETECT == _ON)
    static UINT8 code SOY_CLAMP[10][3] =	
    {	//Clamp Start,	Clamp End,	Compare Level
		0x10,0x18,0x2A,		//MODE_576i   (OK)    
		0x08,0x18,0x2A,		//MODE_480i   (OK)    
		
#if defined(DERUN_805_AT080)||defined(DERUN_1012_SHARPLQ104)
		0x17,0x34,0x18,		//MODE_576p   (OK)   
   		0x06,0x31,0x21,		//MODE_480p   (OK)   
#else
		0x10,0x18,0x2A,		//MODE_576p   (OK)   
   		0x08,0x16,0x2A,		//MODE_480p   (OK)   
#endif
   		0x22,0x3A,0x2A,		//MODE_720p60 (OK)    
   		0x22,0x3A,0x2A,		//MODE_1080i25(OK)    
   		0x22,0x3A,0x2A,		//MODE_1080i30(OK)    
   		0x22,0x3A,0x2A,		//MODE_720p50 (OK)    
   		0x22,0x3A,0x2A,		//MODE_1080p50(OK)
   		0x22,0x3A,0x2A,		//MODE_1080p60(OK)
     };

	//back up table from hill
	/*{ //Clamp Start, Clamp End, Compare Level
  		//Clamp Start, Clamp End,  Compare Level
  		0x00,   0x1B,   0x24,  	//MODE_576i 
     		0x00,   0x17,   0x24,  	//MODE_480i
     		0x00,   0x17,   0x24, 		//MODE_576p
     		0x00,   0x13,   0x24,  	//MODE_480p
     		0x14,   0x67,   0x24, 		//MODE_720p60
     		0x16,   0x4c,   0x24, 		//MODE_1080i25
     		0x16,   0x4c,   0x24,  	//MODE_1080i30
     		0x14,   0x67,   0x24, 		//MODE_720p50 
     		0x16,   0x44,   0x24,  	//MODE_1080p50
     		0x16,   0x44,   0x24, 		//MODE_1080p60
 	};*/

#endif

    // Get information from mode table, such as IHTotal, IHStartPos, IHWidth, IVStartPos, IVHeight.
    CYPbPrGetModeInfo();

    // Start up settings of VGA mode.
    CModeStartUpVGA();

    // Start up settings of YPbPR mode.
    CYPbPrStartUp();    

	if (GET_INPUTPORT_TYPE(stSystemData.InputSource)==_YPBPR_A0_PORT)	//for internal DVD
	{
		//do other thing while DVD YCBCR is used.
		CScalerPageSelect(_PAGE0);
		#if _YPBPR_AUTO_SOY
		CScalerSetBit(_P0_ADC_V_BAIS0_CA, ~(_BIT6|_BIT5|_BIT4), _BIT5);
		#else
		CScalerSetBit(_P0_ADC_V_BAIS0_CA, ~(_BIT6|_BIT5|_BIT4), _BIT6|_BIT4);
		#endif
				//modify by czl 100115
		//CScalerPageSelect(_PAGEB);
		//CScalerSetByte(0xc2, 0x88);

	}
	else// for VGA/YPbPr
	{
		CScalerPageSelect(_PAGE0);
		CScalerSetBit(_P0_ADC_V_BAIS0_CA, ~(_BIT6|_BIT5|_BIT4), _BIT5);
	}	
    // Get scaling option, Capture window setup, Scaling setup, Display setup
    CModeSetupDisplay();

	// Load mode user data from eeprom
	CEepromLoadModeDataYPbPr(stModeInfo.ModeCurr);

	// Setup color conversion
	//disable by czl 071203
	CModeSetupColorConversion();//jerry20070605
	
	CEepromLoadYPbPrData();
/*
       DebugPrintf("\n stModeInfo.IHWidth_H= %x\n", (stModeInfo.IHWidth&0xff00)>>8);
      DebugPrintf("\n stModeInfo.IHWidth_L= %x\n", (stModeInfo.IHWidth&0xff));
       DebugPrintf("\n stModeInfo.IHWidth_H= %x\n", (stModeInfo.IVHeight&0xff00)>>8);
      DebugPrintf("\n stModeInfo.IHWidth_L= %x\n", (stModeInfo.IVHeight&0xff));
       DebugPrintf("\n stModeInfo.IHWidth_H= %x\n", (stModeInfo.IVFreq&0xff00)>>8);
      DebugPrintf("\n stModeInfo.IHWidth_L= %x\n", (stModeInfo.IVFreq&0xff));
	  

	DebugPrintf("\nCYPbPrSetupMode():\n", 0);
	DebugPrintf("Gain[]=0x%x, ", stYPbPrData.YPbPrGain[0]);
	DebugPrintf("0x%x, ", stYPbPrData.YPbPrGain[1]);
	DebugPrintf("0x%x, ", stYPbPrData.YPbPrGain[2]);
	DebugPrintf("Offset[]=0x%x, ", stYPbPrData.YPbPrOffset[0]);
	DebugPrintf("0x%x, ", stYPbPrData.YPbPrOffset[1]);
	DebugPrintf("0x%x\n\n", stYPbPrData.YPbPrOffset[2]);

*/
    CAdjustAdcGainOffset(); //V304 modify
    CAdjustAdcClock(stModeUserData.Clock);
    CAdjustPhase(stModeUserData.Phase);
    CAdjustHPosition();
    CAdjustVPosition();
    CScalerSetByte(_P1_I_CODE_M_A1,0x00);//eric 20070613 for DVD player 	
    CScalerSetByte(_P1_I_CODE_L_A2,0x05);	 

#if _YPBPR_AUTO_SOY
#if(_YPBPR_NEW_SYNC_DETECT == _ON)
    //forster modified 061102
	//CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_BR_CLAMP_START_02, SOY_CLAMP[stModeInfo.ModeCurr][0]);
	//CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_BR_CLAMP_END_03, SOY_CLAMP[stModeInfo.ModeCurr][1]);
    CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_G_CLAMP_START_00, SOY_CLAMP[stModeInfo.ModeCurr][0]);
	CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_G_CLAMP_END_01, SOY_CLAMP[stModeInfo.ModeCurr][1]);
  #if(_SCALER_TYPE==_RTD2662)
    CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_BR_CLAMP_START_02, SOY_CLAMP[stModeInfo.ModeCurr][0]);
	CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_BR_CLAMP_END_03, SOY_CLAMP[stModeInfo.ModeCurr][1]);
  #endif	
    CScalerPageSelect(_PAGE0); //_P0_SOG0_CTRL_AB
  #if(_SCALER_TYPE!=_RTD2662)
    #if(_YPBPR_SYNC_SOURCE == _SOG0)
    	       CScalerSetByte(_P0_SOG0_CTRL_AB,SOY_CLAMP[stModeInfo.ModeCurr][2]);
    #else
	    	CScalerSetByte(_P0_SOG1_CTRL_AC,SOY_CLAMP[stModeInfo.ModeCurr][2]);
	#endif
  #endif
		 
    CScalerSetBit(_SYNC_INVERT_48, ~_BIT2, _BIT2|_BIT0);	//clamp output & HSFB						//Modify:2006.4.11A end Jerry
#endif

//20071228, 480i/576i vertical unstable, 
//write _P0_ADC_SOG0_CTRL_D2/_PB_SOYCH0_CFG3_C3 using "SOY_CLAMP"
#if 0//(_YPBPR_AUTO_SOY==_ENABLE)
    CScalerPageSelect(_PAGE0); //_P0_SOG0_CTRL_AB

  #if(_SCALER_TYPE==_RTD2662)//eric 20070530
  	#if(_YPBPR_SYNC_SOURCE == _SOG0)
		CScalerSetByte(_P0_ADC_SOG0_CTRL_D2,0x20);	
	#else
		CScalerPageSelect(_PAGEB);
		CScalerSetByte(_PB_SOYCH0_CFG3_C3,0x20);	
	#endif	
  #else
    #if(_YPBPR_SYNC_SOURCE == _SOG0)
    	CScalerSetByte(_P0_SOG0_CTRL_AB,0x20);
    #else
    	CScalerSetByte(_P0_SOG1_CTRL_AC,0x20);
    #endif
  #endif	
#endif
#if (_YPBPR_AUTO_SOY==_ENABLE)

	CScalerPageSelect(_PAGE0); //_P0_SOG0_CTRL_AB

#if(_SCALER_TYPE==_RTD2662)//eric 20070530

	#if(_YPBPR_SYNC_SOURCE == _SOG0)
		//CScalerSetByte(_P0_ADC_SOG0_CTRL_D2,SOY_CLAMP[stModeInfo.ModeCurr][2]);	
		CScalerSetByte(_P0_ADC_SOG0_CTRL_D2,0x20);	//modified by xyw at 080521
	#else
		CScalerPageSelect(_PAGEB);
		//CScalerSetByte(_PB_SOYCH0_CFG3_C3,SOY_CLAMP[stModeInfo.ModeCurr][2]);
		CScalerSetByte(_PB_SOYCH0_CFG3_C3,0x20);	//modified by xyw at 080521
	#endif	

#else

	#if(_YPBPR_SYNC_SOURCE == _SOG0)
    	CScalerSetByte(_P0_SOG0_CTRL_AB,SOY_CLAMP[stModeInfo.ModeCurr][2]);
	#else
    	CScalerSetByte(_P0_SOG1_CTRL_AC,SOY_CLAMP[stModeInfo.ModeCurr][2]);
	#endif

#endif	//#if(_SCALER_TYPE==_RTD2662)//eric 20070530

#endif	//#if (_YPBPR_AUTO_SOY==_ENABLE)

#endif//#if _YPBPR_AUTO_SOY

#if _YPBPR_HW_AUTO_SOY
#if (_YPBPR_NEW_SYNC_DETECT == _ON)
    //forster modified 061102
	//CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_BR_CLAMP_START_02, SOY_CLAMP[stModeInfo.ModeCurr][0]);
	//CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_BR_CLAMP_END_03, SOY_CLAMP[stModeInfo.ModeCurr][1]);
	CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_G_CLAMP_START_00, SOY_CLAMP[stModeInfo.ModeCurr][0]);
	CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_G_CLAMP_END_01, SOY_CLAMP[stModeInfo.ModeCurr][1]);
	CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_BR_CLAMP_START_02, SOY_CLAMP[stModeInfo.ModeCurr][0]);
	CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_BR_CLAMP_END_03, SOY_CLAMP[stModeInfo.ModeCurr][1]);
  
#if (_YPBPR_HW_AUTO_SOY != _ENABLE)
    	CScalerPageSelect(_PAGE0); //_P0_SOG0_CTRL_AB
  	#if(_YPBPR_SYNC_SOURCE == _SOG0)
	CScalerSetByte(_P0_ADC_SOG0_CTRL_D2,SOY_CLAMP[stModeInfo.ModeCurr][2]);	
	#else
	CScalerPageSelect(_PAGEB);
	CScalerSetByte(_PB_SOYCH0_CFG3_C3,SOY_CLAMP[stModeInfo.ModeCurr][2]);//20071122	
	#endif	
#endif		 

 	CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_CLAMP_CTRL0_04, 0x02);
	CScalerSetDataPortByte(_SYNC_PROC_ACCESS_PORT_5C, _SYNC_CLAMP_CTRL1_05, 0x83);
		 
	CScalerSetBit(_SYNC_INVERT_48, ~_BIT2, _BIT2|_BIT0);	//clamp output & HSFB						//Modify:2006.4.11A end Jerry
#endif


	CScalerPageSelect(_PAGE0); 
  	#if(_YPBPR_SYNC_SOURCE == _SOG0)
		CScalerSetBit(_P0_ADC_CLAMP_CTRL0_D4, ~(_BIT7 | _BIT6 | _BIT5 | _BIT4), (_BIT7 | _BIT6 | _BIT5 | _BIT4));
		CTimerDelayXms(10);
		CScalerSetBit(_P0_ADC_DCR_CTRL_D3, ~_BIT4, 0x00);
	#else				
		CScalerSetBit(_P0_ADC_CLAMP_CTRL0_D4, ~(_BIT3 | _BIT2 | _BIT1 | _BIT0), (_BIT3 | _BIT2 | _BIT1 | _BIT0));
		CTimerDelayXms(10);
		CScalerSetBit(_P0_ADC_DCR_CTRL_D3, ~_BIT0, 0x00);
	#endif

//20071228, 480i/576i vertical unstable, 
//write _P0_ADC_SOG0_CTRL_D2/_PB_SOYCH0_CFG3_C3 using "SOY_CLAMP"
#if 1//(_YPBPR_AUTO_SOY==_ENABLE)
	CScalerSetBit(_P0_ADC_CLAMP_CTRL1_D5,~_BIT6,_BIT6);	
#endif
#if (_YPBPR_AUTO_SOY==_ENABLE)

	CScalerPageSelect(_PAGE0); //_P0_SOG0_CTRL_AB

#if(_SCALER_TYPE==_RTD2662)//eric 20070530

	#if(_YPBPR_SYNC_SOURCE == _SOG0)
		CScalerSetByte(_P0_ADC_SOG0_CTRL_D2,SOY_CLAMP[stModeInfo.ModeCurr][2]);	
	#else
		CScalerPageSelect(_PAGEB);
		CScalerSetByte(_PB_SOYCH0_CFG3_C3,SOY_CLAMP[stModeInfo.ModeCurr][2]);	
	#endif	

#else

	#if(_YPBPR_SYNC_SOURCE == _SOG0)
    	CScalerSetByte(_P0_SOG0_CTRL_AB,SOY_CLAMP[stModeInfo.ModeCurr][2]);
	#else
    	CScalerSetByte(_P0_SOG1_CTRL_AC,SOY_CLAMP[stModeInfo.ModeCurr][2]);
	#endif

#endif	//#if(_SCALER_TYPE==_RTD2662)//eric 20070530

#endif	//#if (_YPBPR_AUTO_SOY==_ENABLE)
#endif	//#if _YPBPR_HW_AUTO_SOY
	CAdjustYpbprSaturation(GET_SATURATION());
	CAdjustYpbprhue(GET_HUE());

	CEepromLoadBriConData();

#if _BACKLIGHT_SUPPORT
	CEepromLoadBacklightData();
	CAdjustBacklight();
#endif

	CEepromLoadColorTempData();

	CAdjustBrightness();
	CAdjustContrast();
	CScalerSetByte(_COLOR_CTRL_62, 0x03);

	CScalerSetBit(_COLOR_CTRL_62,~_BIT2,_BIT2);   	//  Enable SRGB
	CAccAdjust(_DISABLE);  // set DCC mode

	CAdjustPeakingCoding();
#if(_AdjustCustomerColorMode == _ENABLE)
	CAdjustCustomerColorMode();
#endif


//20081126, PQ finetune to reset gamma port
#if _PQ_FINETUNE
	if (GET_GAMMA())
		CScalerSetBit(_GAMMA_CTRL_67, ~_BIT6, _BIT6);
	else
		CScalerSetBit(_GAMMA_CTRL_67, ~_BIT6, 0);
#endif

#if _DEBUG_USE_ICM
	//enable icm	
	if (GET_ICM_on_off())
	{
		CLR_ICM_on_off();
		COsdCtrlSetICMswitch();
	}
#endif	//#if _DEBUG_USE_ICM


	CScalerPageSelect(_PAGE0);
	CScalerSetBit(_P0_ADC_RBG_CTRL_CE, 0x0F, (1/*ucAdcPGA*/ << 4) & 0xF0);
	CScalerPageSelect(_PAGE2);
	CScalerSetBit(_P2_POWER_ON_OFF_CTRL_A7, ~(_BIT3 | _BIT2 | _BIT1 | _BIT0), 0x00);
	CScalerPageSelect(_PAGE6);
	CScalerSetBit(_P6_ENABLE_BIST_CTRL_A0, ~_BIT3, 0x00);		//Disable De-interlace Mode		

//20080418,update start...
#if (_DE_INTERLACE_SUPPORT == _ON)
	if(stModeInfo.ModeCurr <= 1)	// Only for 480i/576i
		CModeDeInterlaceSetting();
#endif
	CAdjustInterlaceIVS2DVSDelay();
	pData[0] = CFrameSyncDo();
   	 if(pData[0] == 2)
	{
        	return _FALSE;
    	}
//20080418,update end...
		

#if(_YPBPR_AUTO_TYPE==_NEW_TYPE)
	//eric 20070710 YPbPr chage ratio blink red,philips DVP 5965K  
	if(ucSyncProcessState == _SEARCH_STATE)
		CYPbPrPorch_LevelCheck();
#endif
/*
     /////////////////////
     CScalerRead(_STATUS0_02, LENGTH(1), pData, _NON_AUTOINC);
     DebugPrintf("\nStatus = 0x%x",pData[0]);
     DebugPrintf("\nMode = 0x%x",stModeInfo.ModeCurr);
     /////////////////////////	 
 */
	CAdjustInterlaceIVS2DVSProtection();
    CTimerDelayXms(30);
    CModeSetupEtcs(_FUNCTION_ENABLE);

	//eric 20070709 sound before video 1 sec
	CAudioSetSource(GET_INPUTPORT_TYPE(stSystemData.InputSource)); 

	CAdjustEnableHLWindow();
		//modify by czl 100115
	//CScalerPageSelect(_PAGEB);
	//CScalerSetByte(0xc2, 0xc8);


	return _TRUE;
}

#if(_YPBPR_HW_AUTO_SOY == _ENABLE)
void CYPbPrHWAutoSOY(void)
{
	CScalerPageSelect(_PAGEB);
	CScalerSetByte(0xc0, 0x11);
	CScalerSetByte(0xc2, 0x88);
	CScalerSetByte(0xc5, 0x06);
	CScalerSetByte(0xc6, 0x40);
	CScalerSetByte(0xc7, 0x00);
	CScalerSetByte(0xc8, 0x20);
	CScalerSetByte(0xc9, 0x00);
	CScalerSetByte(0xc3, 0x9E);
	CScalerSetByte(0xc4, 0x08);
}
#endif

#endif  // End of #if(_YPBPR_SUPPORT == _ON)

