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

📄 displayport.c

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