📄 displayport.c
字号:
Adjust_Request_L01 = (Adjust_Request_L01 & 0xF0) | (Training_Lane_Set & 0x03) | ((Training_Lane_Set & 0x18)<<1); // whhsiao-added.20080506
if ( ((Training_Lane_Set&0x20)==0x00) && ((Adjust_Request_L01&0x0C)!=0x0C) )
Adjust_Request_L01 = Adjust_Request_L01 + 0x04;
else if ( ((Training_Lane_Set&0x04)==0x00) && ((Adjust_Request_L01&0x03)!=0x03) )
Adjust_Request_L01 = Adjust_Request_L01 + 0x01;
}
if ( (buf&0x04)==0x00 ) // Lane1 : EQ_CRC OK
Lane01_Status |= 0x60;
else // Lane1 : EQ_CRC Not OK
{
Lane01_Status &= 0x9F;
CScalerSetByteInt(0xc1, 0x00);
CScalerSetByteInt(0xc2, 0x01);
CScalerSetByteInt(0xc3, 0x04);
CScalerReadByteInt(0xc4, &Training_Lane_Set);
Adjust_Request_L01 = (Adjust_Request_L01 & 0x0F) | ((Training_Lane_Set & 0x03)<<4) | ((Training_Lane_Set & 0x18)<<3); // whhsiao-added.20080506
if ( ((Training_Lane_Set&0x20)==0x00) && ((Adjust_Request_L01&0xC0)!=0xC0) )
Adjust_Request_L01 = Adjust_Request_L01 + 0x40;
else if ( ((Training_Lane_Set&0x04)==0x00) && ((Adjust_Request_L01&0x30)!=0x30) )
Adjust_Request_L01 = Adjust_Request_L01 + 0x10;
}
if ( (Lane01_Status&0x66)==0x66 )
{
CScalerSetByteInt(0xA8, 0x99); //enable de-skew, bit 7 msut be 1
CScalerSetByteInt(0xA9, 0x03);
CScalerReadByteInt(0xA9, &buf); //read align status
if ((buf&0x03)==0x00 )
Align_Status = 0x81;
else
Align_Status = 0x80;
}
else
Align_Status = 0x80;
#if (_DP_LT_Proc == _AMD_CARD)
if (Lane01_Status==0x77) // for AMD card
#else
if ( (Lane01_Status==0x77) && (Align_Status==0x81) ) // for CTS process
#endif // End of #if (_DP_SOURCE == AMD_CARD)
ucDisplayPortLtPreStatus = _TRAINING_PATTERN2_PASS;
else
ucDisplayPortLtPreStatus = _TRAINING_PATTERN2_FAIL;
CScalerSetByteInt(0xc1, 0x00);
CScalerSetByteInt(0xc2, 0x02);
CScalerSetByteInt(0xc3, 0x02);
CScalerSetByteInt(0xc4, Lane01_Status);
CScalerSetByteInt(0xc3, 0x03);
CScalerSetByteInt(0xc4, 0x00);
CScalerSetByteInt(0xc3, 0x04);
#if (_DP_LT_Proc == _AMD_CARD)
CScalerSetByteInt(0xc4, 0x81); // for AMD card
#else
CScalerSetByteInt(0xc4, Align_Status); // for CTS process
#endif // End of #if (_DP_SOURCE == AMD_CARD)
}
else //if((dplane&0x04) == 0x04)
{
CScalerSetByteInt(0xb3, 0xb3);
CScalerSetByteInt(0xb4, 0x8F);
CScalerSetByteInt(0xb3, 0xb3);
CScalerSetByteInt(0xb4, 0x8F);
// for (buf=0;buf<=500;buf++)
// _nop_();
CScalerSetByteInt(0xb3, 0xb3);
CScalerReadByteInt(0xb4, &buf); //read EQ_Down Status
if ( (buf&0x08)==0x00 ) // Lane0 : EQ_CRC OK
Lane01_Status |= 0x06;
else // Lane0 : EQ_CRC Not OK
{
Lane01_Status &= 0xF9;
CScalerSetByteInt(0xc1, 0x00);
CScalerSetByteInt(0xc2, 0x01);
CScalerSetByteInt(0xc3, 0x03);
CScalerReadByteInt(0xc4, &Training_Lane_Set);
Adjust_Request_L01 = (Adjust_Request_L01 & 0xF0) | (Training_Lane_Set & 0x03) | ((Training_Lane_Set & 0x18)<<1); // whhsiao-added.20080506
if ( ((Training_Lane_Set&0x20)==0x00) && ((Adjust_Request_L01&0x0C)!=0x0C) )
Adjust_Request_L01 = Adjust_Request_L01 + 0x04;
else if ( ((Training_Lane_Set&0x04)==0x00) && ((Adjust_Request_L01&0x03)!=0x03) )
Adjust_Request_L01 = Adjust_Request_L01 + 0x01;
}
if ( (buf&0x04)==0x00 ) // Lane1 : EQ_CRC OK
Lane01_Status |= 0x60;
else // Lane1 : EQ_CRC Not OK
{
Lane01_Status &= 0x9F;
CScalerSetByteInt(0xc1, 0x00);
CScalerSetByteInt(0xc2, 0x01);
CScalerSetByteInt(0xc3, 0x04);
CScalerReadByteInt(0xc4, &Training_Lane_Set);
Adjust_Request_L01 = (Adjust_Request_L01 & 0x0F) | ((Training_Lane_Set & 0x03)<<4) | ((Training_Lane_Set & 0x18)<<3); // whhsiao-added.20080506
if ( ((Training_Lane_Set&0x20)==0x00) && ((Adjust_Request_L01&0xC0)!=0xC0) )
Adjust_Request_L01 = Adjust_Request_L01 + 0x40;
else if ( ((Training_Lane_Set&0x04)==0x00) && ((Adjust_Request_L01&0x30)!=0x30) )
Adjust_Request_L01 = Adjust_Request_L01 + 0x10;
}
if ( (buf&0x02)==0x00 ) // Lane2 : EQ_CRC OK
Lane23_Status |= 0x06;
else // Lane2 : EQ_CRC Not OK
{
Lane23_Status &= 0xF9;
CScalerSetByteInt(0xc1, 0x00);
CScalerSetByteInt(0xc2, 0x01);
CScalerSetByteInt(0xc3, 0x05);
CScalerReadByteInt(0xc4, &Training_Lane_Set);
Adjust_Request_L23 = (Adjust_Request_L23 & 0xF0) | (Training_Lane_Set & 0x03) | ((Training_Lane_Set & 0x18)<<1); // whhsiao-added.20080506
if ( ((Training_Lane_Set&0x20)==0x00) && ((Adjust_Request_L23&0x0C)!=0x0C) )
Adjust_Request_L23 = Adjust_Request_L23 + 0x04;
else if ( ((Training_Lane_Set&0x04)==0x00) && ((Adjust_Request_L23&0x03)!=0x03) )
Adjust_Request_L23 = Adjust_Request_L23 + 0x01;
}
if ( (buf&0x01)==0x00 ) // Lane3 : EQ_CRC OK
Lane23_Status |= 0x60;
else // Lane3 : EQ_CRC Not OK
{
Lane23_Status &= 0x9F;
CScalerSetByteInt(0xc1, 0x00);
CScalerSetByteInt(0xc2, 0x01);
CScalerSetByteInt(0xc3, 0x06);
CScalerReadByteInt(0xc4, &Training_Lane_Set);
Adjust_Request_L23 = (Adjust_Request_L23 & 0x0F) | ((Training_Lane_Set & 0x03)<<4) | ((Training_Lane_Set & 0x18)<<3); // whhsiao-added.20080506
if ( ((Training_Lane_Set&0x20)==0x00) && ((Adjust_Request_L23&0xC0)!=0xC0) )
Adjust_Request_L23 = Adjust_Request_L23 + 0x40;
else if ( ((Training_Lane_Set&0x04)==0x00) && ((Adjust_Request_L23&0x30)!=0x30) )
Adjust_Request_L23 = Adjust_Request_L23 + 0x10;
}
if ( ((Lane01_Status&0x66)==0x66) && ((Lane23_Status&0x66)==0x66) )
{
CScalerSetByteInt(0xA8, 0x99); //enable de-skew, bit 7 msut be 1
CScalerSetByteInt(0xA9, 0x03);
CScalerReadByteInt(0xA9, &buf); //read align status
if ((buf&0x03)==0x00 )
Align_Status = 0x81;
else
Align_Status = 0x80;
}
else
Align_Status = 0x80;
#if (_DP_LT_Proc == _AMD_CARD)
if ( (Lane01_Status==0x77) && (Lane23_Status==0x77) ) // for AMD card
#else
if ( (Lane01_Status==0x77) && (Lane23_Status==0x77) && (Align_Status==0x81) ) // for CTS process
#endif // End of #if (_DP_SOURCE == AMD_CARD)
ucDisplayPortLtPreStatus = _TRAINING_PATTERN2_PASS;
else
ucDisplayPortLtPreStatus = _TRAINING_PATTERN2_FAIL;
CScalerSetByteInt(0xc1, 0x00);
CScalerSetByteInt(0xc2, 0x02);
CScalerSetByteInt(0xc3, 0x02);
CScalerSetByteInt(0xc4, Lane01_Status);
CScalerSetByteInt(0xc3, 0x03);
CScalerSetByteInt(0xc4, Lane23_Status);
CScalerSetByteInt(0xc3, 0x04);
#if (_DP_LT_Proc == _AMD_CARD)
CScalerSetByteInt(0xc4, 0x81); // for AMD card
#else
CScalerSetByteInt(0xc4, Align_Status); // for CTS process
#endif // End of #if (_DP_SOURCE == AMD_CARD)
}
///*
#if (_DP_DEBUG == _ON)
CScalerSetByteInt(_PAGE_SELECT_9F,_PAGEC);
CScalerSetByteInt(0xc1, 0x00);
CScalerSetByteInt(0xc2, 0x01);
CScalerSetByteInt(0xc3, 0x00);
CScalerReadByteInt(0xc4, &dpprate); //read
// CScalerSetByteInt(0x16,TP2_times);
/*
// if(TP2_times == 1)
// {
CScalerSetByteInt(_PAGE_SELECT_9F,_PAGEC);
CScalerSetByteInt(0xA4,0x1B);
// CScalerSetByteInt(0xA5,0xff);
// CScalerReadInt(0xA5, 1, &buf, _NON_AUTOINC); //Check ANSI 8B/10B Error
// CScalerSetByteInt(0x13,buf);
CScalerSetByteInt(0xb3, 0xb3);
CScalerSetByteInt(0xb4, 0x8f);
CScalerSetByteInt(0xb3, 0xb5);
// CScalerReadInt(0xb4, 1, &crcvalue, _NON_AUTOINC); //read lane0 EQ_CRC
CScalerReadByteInt(0xb4, &crcvalue); //read lane0 EQ_CRC
CScalerSetByteInt(0x15,crcvalue);
CScalerSetByteInt(0xb3, 0xb3);
CScalerSetByteInt(0xb4, 0xaf);
CScalerSetByteInt(0xb3, 0xb5);
// CScalerReadInt(0xb4, 1 , &crcvalue, _NON_AUTOINC); //read lane1 EQ_CRC
CScalerReadByteInt(0xb4, &crcvalue); //read lane1 EQ_CRC
CScalerSetByteInt(0x16,crcvalue);
// CScalerSetByteInt(0xb3, 0xb3);
// CScalerReadInt(0xb4, 1, &buf, _NON_AUTOINC); //read EQ_Down Status
// CScalerReadByteInt(0xb4, &buf); //read EQ_Down Status
// CScalerSetByteInt(0x1F,buf);
CScalerSetByteInt(0xb3, 0xb3);
CScalerSetByteInt(0xb4, 0xcf);
CScalerSetByteInt(0xb3, 0xb5);
// CScalerReadInt(0xb4, 1, &crcvalue, _NON_AUTOINC); //read lane2 EQ_CRC
CScalerReadByteInt(0xb4, &crcvalue); //read lane2 EQ_CRC
CScalerSetByteInt(0x17,crcvalue);
CScalerSetByteInt(0xb3, 0xb3);
CScalerSetByteInt(0xb4, 0xef);
CScalerSetByteInt(0xb3, 0xb5);
// CScalerReadInt(0xb4, 1, &crcvalue, _NON_AUTOINC); //read lane3 EQ_CRC
CScalerReadByteInt(0xb4, &crcvalue); //read lane3 EQ_CRC
CScalerSetByteInt(0x18,crcvalue);
CScalerSetByteInt(0x1B,Adjust_Request_L01);
CScalerSetByteInt(0x1C,Adjust_Request_L23);
CScalerSetByteInt(0x1D,Lane01_Status);
CScalerSetByteInt(0x1E,Align_Status);
CScalerSetByteInt(_PAGE_SELECT_9F,_PAGEB);
// CScalerReadInt(0xe2, 1, &buf, _NON_AUTOINC); //read EQ_Down Status
CScalerReadByteInt(0xe2, &buf); //read EQ_Down Status
CScalerSetByteInt(0x1F,buf);
// CScalerSetByteInt(0xb3, 0xb3);
// CScalerReadInt(0xb4, 1, &buf, _NON_AUTOINC); //read lane error
// CScalerReadByteInt(0xb4, &buf); //read lane error
// CScalerSetByteInt(0x19,buf);
// CScalerSetByteInt(0xA8, 0x99); //enable de-skew, bit 7 msut be 1
// CScalerSetByteInt(0xA9, 0x03);
// CScalerReadInt(0xA9, 1, &buf, _NON_AUTOINC); //read alignment
// CScalerReadByteInt(0xA9, &buf); //read alignment
// CScalerSetByteInt(0x13,buf);
// CScalerSetByteInt(_PAGE_SELECT_9F,_PAGEB);
// CScalerReadInt(0xe2, 1, &buf, _NON_AUTOINC); //read lane error
// CScalerReadByteInt(0xe2, &buf); //read lane error
// CScalerSetByteInt(0x19,buf);
// }
*/
#endif // end of #if (_DP_DEBUG == _ON)
CScalerSetByteInt(0xc1, 0x00);
CScalerSetByteInt(0xc2, 0x02);
CScalerSetByteInt(0xc3, 0x06);
CScalerSetByteInt(0xc4, Adjust_Request_L01);
CScalerSetByteInt(0xc3, 0x07);
CScalerSetByteInt(0xc4, Adjust_Request_L23);
// CScalerSetByteInt(0xb3, 0xb3);
// CScalerSetByteInt(0xb4, 0x00);
CScalerSetByteInt(_PAGE_SELECT_9F,_PAGEB);
CScalerSetByteInt(0xe2, 0x00);
}
//*/
//--------------------------------------------------
// Description : AUX Link Training Pattern End interrupt
// Input Value :
// Output Value :
//--------------------------------------------------
void CDpTrainPatternEnd(void)
{
BYTE xdata Align_Status;
Lane01_Status = 0;
Lane23_Status = 0;
Adjust_Request_L01 = 0;
Adjust_Request_L23 = 0;
ucDisplayPortLtPreStatus = _TRAINING_PATTERN_END;
CScalerSetByteInt(_PAGE_SELECT_9F,_PAGEC);
CScalerSetByteInt(0xc1,0x00);
CScalerSetByteInt(0xc2,0x02);
CScalerSetByteInt(0xc3,0x04);
CScalerReadByteInt(0xc4, &Align_Status);
Align_Status |=0x80;
CScalerSetByteInt(0xc4,Align_Status);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -