mirror of
https://github.com/marqs85/ossc
synced 2025-04-09 22:56:34 +03:00
it6613: add support for HDR Infoframe
This commit is contained in:
parent
0ce2809183
commit
4bc98224e4
@ -16,19 +16,19 @@ extern BOOL bHDMIMode;
|
||||
extern BOOL bAudioEnable;
|
||||
BOOL ParseEDID();
|
||||
|
||||
INSTANCE InitInstanceData =
|
||||
INSTANCE InitInstanceData =
|
||||
{
|
||||
0,0, //I2C_DEV, I2C_ADDR
|
||||
0, //bIntType (TxCLK active, Push-Pull Mode, INT active low)
|
||||
0,/* | T_MODE_CCIR656 | T_MODE_SYNCEMB | T_MODE_INDDR */ // bInputVideoSignalType
|
||||
|
||||
|
||||
B_AUDFMT_STD_I2S, // bOutputAudioMode, 0x00, standard i2s, rising edge to sample ws/i2s, not full packet mode REG[0xE1]
|
||||
|
||||
|
||||
0,// bAudioChannelSwap
|
||||
B_AUD_EN_I2S0 | B_AUD_I2S | M_AUD_16BIT, // bAudioChannelEnable, 0x01, REG[0xE0], defined in it6613_drv.h
|
||||
AUDFS_48KHz, //0, //bAudFs,
|
||||
0, // TMDSClock
|
||||
TRUE,//bAuthenticated
|
||||
TRUE,//bAuthenticated
|
||||
TRUE,// bHDMIMode
|
||||
FALSE,// bIntPOL
|
||||
FALSE // bHPD
|
||||
@ -38,19 +38,19 @@ bool HDMITX_ChipVerify(void){
|
||||
bool bPass = FALSE;
|
||||
alt_u8 szID[4];
|
||||
int i;
|
||||
|
||||
|
||||
|
||||
|
||||
for(i=0;i<4;i++)
|
||||
szID[i] = HDMITX_ReadI2C_Byte(i);
|
||||
|
||||
|
||||
// if (szID[0] == 0x00 && szID[1] == 0xCA && szID[1] == 0x13 && szID[1] == 0x06) szID[0] ???
|
||||
if ((szID[1] == 0xCA && szID[2] == 0x13 && szID[3] == 0x06) || (szID[1] == 0xCA && szID[2] == 0x13 && szID[3] == 0x16)){
|
||||
bPass = TRUE;
|
||||
printf("TX Chip Revision ID: %d\n", szID[0]);
|
||||
printf("TX Chip Revision ID: %d\n", szID[0]);
|
||||
}else{
|
||||
printf("NG, Read TX Chip ID:%02X%02X%02X%02Xh (expected:00CA1306h)\n", szID[0], szID[1], szID[2], szID[3]);
|
||||
printf("NG, Read TX Chip ID:%02X%02X%02X%02Xh (expected:00CA1306h)\n", szID[0], szID[1], szID[2], szID[3]);
|
||||
}
|
||||
|
||||
|
||||
return bPass;
|
||||
}
|
||||
|
||||
@ -62,19 +62,19 @@ bool HDMITX_Init(void){
|
||||
OS_PRINTF("Failed to find IT6613 HDMI-TX Chip.\n");
|
||||
bSuccess = FALSE;
|
||||
//return 0;
|
||||
}
|
||||
}
|
||||
|
||||
HDMITX_InitInstance(&InitInstanceData) ;
|
||||
InitIT6613() ;
|
||||
|
||||
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
bool HDMITX_HPD(void){
|
||||
if (TX_HDP)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@ -85,10 +85,10 @@ void HDMITX_SetAVIInfoFrame(alt_u8 VIC, alt_u8 OutputColorMode, bool b16x9, bool
|
||||
OS_PRINTF("HDMITX_SetAVIInfoFrame: VIC=%d, ColorMode=%d, Aspect-Ratio=%s, ITU709=%s, ITC=%s, pixelrep=%u\n",
|
||||
VIC, OutputColorMode, b16x9?"16:9":"4:3", ITU709?"Yes":"No", ITC?"Yes":"No", pixelrep);
|
||||
|
||||
AviInfo.pktbyte.AVI_HB[0] = AVI_INFOFRAME_TYPE|0x80 ;
|
||||
AviInfo.pktbyte.AVI_HB[1] = AVI_INFOFRAME_VER ;
|
||||
AviInfo.pktbyte.AVI_HB[2] = AVI_INFOFRAME_LEN ;
|
||||
|
||||
AviInfo.pktbyte.AVI_HB[0] = AVI_INFOFRAME_TYPE|0x80 ;
|
||||
AviInfo.pktbyte.AVI_HB[1] = AVI_INFOFRAME_VER ;
|
||||
AviInfo.pktbyte.AVI_HB[2] = AVI_INFOFRAME_LEN ;
|
||||
|
||||
switch(OutputColorMode)
|
||||
{
|
||||
case F_MODE_YUV444:
|
||||
@ -128,7 +128,7 @@ void HDMITX_SetAVIInfoFrame(alt_u8 VIC, alt_u8 OutputColorMode, bool b16x9, bool
|
||||
void HDMITX_ChangeVideoTiming(int VIC){
|
||||
int OutputVideoTiming = VIC;
|
||||
int HdmiColorMode;
|
||||
|
||||
|
||||
switch(bOutputColorMode)
|
||||
{
|
||||
case F_MODE_YUV444:
|
||||
@ -141,15 +141,15 @@ void HDMITX_ChangeVideoTiming(int VIC){
|
||||
default:
|
||||
HdmiColorMode = HDMI_RGB444;
|
||||
break ;
|
||||
}
|
||||
|
||||
HDMITX_ChangeDisplayOption(OutputVideoTiming, HdmiColorMode); // just modify variable. Take effect when HDMITX_SetOutput is called in HDMITX_DevLoopProc
|
||||
}
|
||||
|
||||
HDMITX_ChangeDisplayOption(OutputVideoTiming, HdmiColorMode); // just modify variable. Take effect when HDMITX_SetOutput is called in HDMITX_DevLoopProc
|
||||
}
|
||||
|
||||
void HDMITX_ChangeVideoTimingAndColor(int VIC, COLOR_TYPE Color){
|
||||
int OutputVideoTiming = VIC;
|
||||
int HdmiColorMode;
|
||||
|
||||
|
||||
switch(Color)
|
||||
{
|
||||
case COLOR_YUV444:
|
||||
@ -162,12 +162,12 @@ void HDMITX_ChangeVideoTimingAndColor(int VIC, COLOR_TYPE Color){
|
||||
default:
|
||||
HdmiColorMode = HDMI_RGB444;
|
||||
break ;
|
||||
}
|
||||
HDMITX_ChangeDisplayOption(OutputVideoTiming, HdmiColorMode);
|
||||
}
|
||||
HDMITX_ChangeDisplayOption(OutputVideoTiming, HdmiColorMode);
|
||||
}
|
||||
|
||||
void HDMITX_DisableVideoOutput(void){
|
||||
DisableVideoOutput();
|
||||
DisableVideoOutput();
|
||||
}
|
||||
|
||||
void HDMITX_EnableVideoOutput(void){
|
||||
@ -183,7 +183,7 @@ void HDMITX_SetColorSpace(COLOR_TYPE InputColor, COLOR_TYPE OutputColor){
|
||||
|
||||
bool HDMITX_IsSinkSupportYUV444(void){
|
||||
bool bSupport = FALSE;
|
||||
if (RxCapability.Valid && RxCapability.ValidHDMI && RxCapability.ValidCEA &&
|
||||
if (RxCapability.Valid && RxCapability.ValidHDMI && RxCapability.ValidCEA &&
|
||||
(RxCapability.VideoMode & CEA_SUPPORT_YUV444))
|
||||
bSupport = TRUE;
|
||||
return bSupport;
|
||||
@ -191,7 +191,7 @@ bool HDMITX_IsSinkSupportYUV444(void){
|
||||
|
||||
bool HDMITX_IsSinkSupportYUV422(void){
|
||||
bool bSupport = FALSE;
|
||||
if (RxCapability.Valid && RxCapability.ValidHDMI && RxCapability.ValidCEA &&
|
||||
if (RxCapability.Valid && RxCapability.ValidHDMI && RxCapability.ValidCEA &&
|
||||
(RxCapability.VideoMode & CEA_SUPPORT_YUV422))
|
||||
bSupport = TRUE;
|
||||
return bSupport;
|
||||
@ -199,19 +199,19 @@ bool HDMITX_IsSinkSupportYUV422(void){
|
||||
|
||||
bool HDMITX_IsSinkSupportColorDepth36(void){
|
||||
bool bSupport = FALSE;
|
||||
if (RxCapability.Valid && RxCapability.ValidHDMI && RxCapability.ValidCEA &&
|
||||
if (RxCapability.Valid && RxCapability.ValidHDMI && RxCapability.ValidCEA &&
|
||||
RxCapability.dc.info.DC_36Bit)
|
||||
bSupport = TRUE;
|
||||
return bSupport;
|
||||
return bSupport;
|
||||
}
|
||||
|
||||
|
||||
bool HDMITX_IsSinkSupportColorDepth30(void){
|
||||
bool bSupport = FALSE;
|
||||
if (RxCapability.Valid && RxCapability.ValidHDMI && RxCapability.ValidCEA &&
|
||||
if (RxCapability.Valid && RxCapability.ValidHDMI && RxCapability.ValidCEA &&
|
||||
RxCapability.dc.info.DC_30Bit)
|
||||
bSupport = TRUE;
|
||||
return bSupport;
|
||||
return bSupport;
|
||||
}
|
||||
|
||||
void HDMITX_SetOutputColorDepth(int ColorDepth){
|
||||
@ -228,36 +228,36 @@ bool HDMITX_DevLoopProc()
|
||||
|
||||
// Richard CheckHDMI(&HPD,&HPDChange) ;
|
||||
CheckHDMITX(&HPD,&HPDChange) ;
|
||||
|
||||
|
||||
if (HPD == PreHPD && HPDChange) // richard add
|
||||
return FALSE;
|
||||
|
||||
TX_HDP = HPD;
|
||||
PreHPD = HPD;
|
||||
PreHPDChange = HPDChange;
|
||||
|
||||
|
||||
TX_HDP = HPD;
|
||||
PreHPD = HPD;
|
||||
PreHPDChange = HPDChange;
|
||||
|
||||
if( HPDChange )
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
OS_PRINTF("HPDChange\n");
|
||||
if( HPD )
|
||||
{
|
||||
OS_PRINTF("HPD=ON\n");
|
||||
RxCapability.Valid = ParseEDID() ;
|
||||
//bOutputColorMode = F_MODE_YUV444; //F_MODE_RGB444; // richard node. users can change color space here according to HDMI sink
|
||||
|
||||
//bOutputColorMode = F_MODE_YUV444; //F_MODE_RGB444; // richard node. users can change color space here according to HDMI sink
|
||||
|
||||
if( RxCapability.Valid && RxCapability.ValidHDMI )
|
||||
{
|
||||
OS_PRINTF("HDMI Display found\n");
|
||||
bHDMIMode = TRUE ;
|
||||
|
||||
|
||||
if(RxCapability.VideoMode & (1<<6))
|
||||
{
|
||||
bAudioEnable = TRUE ;
|
||||
}
|
||||
|
||||
#if 0 // richard, don't care edid, the output always RGB444
|
||||
|
||||
#if 0 // richard, don't care edid, the output always RGB444
|
||||
if( RxCapability.VideoMode & (1<<5))
|
||||
{
|
||||
bOutputColorMode &= ~F_MODE_CLRMOD_MASK ;
|
||||
@ -268,17 +268,17 @@ bool HDMITX_DevLoopProc()
|
||||
bOutputColorMode &= ~F_MODE_CLRMOD_MASK ;
|
||||
bOutputColorMode |= F_MODE_YUV422 ;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else if (!RxCapability.Valid)
|
||||
{
|
||||
OS_PRINTF("Failed to read EDID\n");
|
||||
|
||||
|
||||
// enable it when edid fail
|
||||
bHDMIMode = TRUE ;
|
||||
bAudioEnable = TRUE ;
|
||||
}
|
||||
else
|
||||
}
|
||||
else
|
||||
{
|
||||
OS_PRINTF("Invalid HDMI Display\n");
|
||||
bHDMIMode = FALSE ;
|
||||
@ -287,7 +287,7 @@ bool HDMITX_DevLoopProc()
|
||||
|
||||
OS_PRINTF("HDMITX_SetOutput\n");
|
||||
//HDMITX_SetOutput() ;
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -308,7 +308,7 @@ bool HDMITX_DevLoopProc()
|
||||
HDMITX_SetOutput() ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return HPDChange;
|
||||
}
|
||||
|
||||
@ -339,3 +339,26 @@ void HDMITX_SetAudioInfoFrame(BYTE bAudioDwSampling)
|
||||
|
||||
EnableAudioInfoFrame(TRUE, (BYTE *) &AudioInfo);
|
||||
}
|
||||
|
||||
void HDMITX_SetHDRInfoFrame(BYTE HDR_TF)
|
||||
{
|
||||
int i;
|
||||
HDR_InfoFrame HDRInfo;
|
||||
|
||||
HDRInfo.info.Type = HDR_INFOFRAME_TYPE;
|
||||
HDRInfo.info.Ver = HDR_INFOFRAME_VER;
|
||||
HDRInfo.info.Len = HDR_INFOFRAME_LEN;
|
||||
|
||||
HDRInfo.info.TF = HDR_TF;
|
||||
|
||||
for (i=1; i<HDR_INFOFRAME_LEN; i++) {
|
||||
HDRInfo.pktbyte.HDR_DB[i] = 0;
|
||||
}
|
||||
|
||||
/*HDRInfo.pktbyte.HDR_DB[22] = 0xe8;
|
||||
HDRInfo.pktbyte.HDR_DB[23] = 0x03;
|
||||
HDRInfo.pktbyte.HDR_DB[24] = 0xfa;
|
||||
HDRInfo.pktbyte.HDR_DB[25] = 0x00;*/
|
||||
|
||||
EnableHDRInfoFrame(TRUE, (BYTE *) &HDRInfo);
|
||||
}
|
||||
|
@ -27,5 +27,6 @@ bool HDMITX_IsSinkSupportColorDepth30(void);
|
||||
void HDMITX_SetOutputColorDepth(int ColorDepth);
|
||||
|
||||
void HDMITX_SetAudioInfoFrame(BYTE bAudioDwSampling);
|
||||
void HDMITX_SetHDRInfoFrame(BYTE enableHDR);
|
||||
|
||||
#endif /*HDMI_TX_H_*/
|
||||
|
@ -80,6 +80,7 @@ static SYS_STATUS SetAVIInfoFrame(AVI_InfoFrame *pAVIInfoFrame) ;
|
||||
static SYS_STATUS SetAudioInfoFrame(Audio_InfoFrame *pAudioInfoFrame) ;
|
||||
static SYS_STATUS SetSPDInfoFrame(SPD_InfoFrame *pSPDInfoFrame) ;
|
||||
static SYS_STATUS SetMPEGInfoFrame(MPEG_InfoFrame *pMPGInfoFrame) ;
|
||||
static SYS_STATUS SetHDRInfoFrame(HDR_InfoFrame *pHDRInfoFrame) ;
|
||||
static SYS_STATUS ReadEDID(BYTE *pData,BYTE bSegment,BYTE offset,SHORT Count) ;
|
||||
static void AbortDDC() ;
|
||||
static void ClearDDCFIFO() ;
|
||||
@ -183,7 +184,7 @@ static _CODE BYTE bCSCOffset_0_255[] =
|
||||
0xCE,0x3C,0x83,0x03,0xAE,0x3F,
|
||||
0x49,0x3D,0x33,0x3F,0x83,0x03
|
||||
} ;
|
||||
#endif
|
||||
#endif
|
||||
/*
|
||||
#ifdef SUPPORT_INPUTYUV
|
||||
|
||||
@ -270,7 +271,7 @@ static BYTE InitIT6613_HDCPROM()
|
||||
HDMITX_WriteI2C_Byte(0xF8,0xA5) ; // password
|
||||
HDMITX_WriteI2C_Byte(REG_TX_LISTCTRL,0x60) ; // Richard, ????
|
||||
I2C_Read_ByteN(0xE0,0x00,uc,5) ; // richard note. internal rom is used
|
||||
|
||||
|
||||
if(uc[0] == 1 &&
|
||||
uc[1] == 1 &&
|
||||
uc[2] == 1 &&
|
||||
@ -288,7 +289,7 @@ static BYTE InitIT6613_HDCPROM()
|
||||
HDMITX_WriteI2C_Byte(REG_TX_LISTCTRL,0x00) ; // Richard, ????
|
||||
}
|
||||
HDMITX_WriteI2C_Byte(0xF8,0xFF) ; // password
|
||||
|
||||
|
||||
// richard add
|
||||
return ER_SUCCESS;
|
||||
}
|
||||
@ -299,26 +300,26 @@ void InitIT6613()
|
||||
HDMITX_WriteI2C_Byte(REG_TX_INT_CTRL,Instance[0].bIntType) ;
|
||||
Instance[0].bIntPOL = (Instance[0].bIntType&B_INTPOL_ACTH)?TRUE:FALSE ;
|
||||
|
||||
// Reset
|
||||
// Reset
|
||||
HDMITX_WriteI2C_Byte(REG_TX_SW_RST,B_REF_RST|B_VID_RST|B_AUD_RST|B_AREF_RST|B_HDCP_RST) ;
|
||||
DelayMS(1) ;
|
||||
HDMITX_WriteI2C_Byte(REG_TX_SW_RST,B_VID_RST|B_AUD_RST|B_AREF_RST|B_HDCP_RST) ;
|
||||
|
||||
#if 0
|
||||
|
||||
#if 0
|
||||
// Enable clock ring (richard add according toe programming guide)
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AFE_DRV_CTRL, 0x10);
|
||||
|
||||
|
||||
// Set default DVI mode (richard add according toe programming guide)
|
||||
// HDMITX_WriteI2C_Byte(REG_TX_HDMI_MODE, 0x01); // set HDMI mode
|
||||
HDMITX_WriteI2C_Byte(REG_TX_HDMI_MODE, 0x00); // set DVI mode
|
||||
#endif
|
||||
// HDMITX_WriteI2C_Byte(REG_TX_HDMI_MODE, 0x01); // set HDMI mode
|
||||
HDMITX_WriteI2C_Byte(REG_TX_HDMI_MODE, 0x00); // set DVI mode
|
||||
#endif
|
||||
|
||||
// Avoid power loading in un play status.
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AFE_DRV_CTRL,B_AFE_DRV_RST|B_AFE_DRV_PWD) ;
|
||||
|
||||
// set interrupt mask,mask value 0 is interrupt available.
|
||||
// richard HDMITX_WriteI2C_Byte(REG_TX_INT_MASK1,0xB2) ; // enable interrupt: HPD, DDCBusHangMask,
|
||||
HDMITX_WriteI2C_Byte(REG_TX_INT_MASK1,0xB2) ; // enable interrupt: HPD, DDCBusHangMask,
|
||||
// richard HDMITX_WriteI2C_Byte(REG_TX_INT_MASK1,0xB2) ; // enable interrupt: HPD, DDCBusHangMask,
|
||||
HDMITX_WriteI2C_Byte(REG_TX_INT_MASK1,0xB2) ; // enable interrupt: HPD, DDCBusHangMask,
|
||||
HDMITX_WriteI2C_Byte(REG_TX_INT_MASK2,0xF8) ; // enable interrupt: AuthFailMask, AUthDoneMask, KSVListChkMask
|
||||
HDMITX_WriteI2C_Byte(REG_TX_INT_MASK3,0x37) ; // enable interrupt: PktAudMask, PktDBDMask, PkMpgMask, AUdCTSMask, HDCPSynDetMask
|
||||
|
||||
@ -331,7 +332,7 @@ void InitIT6613()
|
||||
DISABLE_AUD_INFOFRM_PKT() ;
|
||||
DISABLE_SPD_INFOFRM_PKT() ;
|
||||
DISABLE_MPG_INFOFRM_PKT();
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// Setup Output Audio format.
|
||||
@ -396,7 +397,7 @@ BOOL EnableVideoOutput(VIDEOPCLKLEVEL level,BYTE inputColorMode,BYTE outputColor
|
||||
uc = HDMITX_ReadI2C_Byte(REG_TX_CLK_CTRL1) ;
|
||||
uc |= B_VDO_LATCH_EDGE ;
|
||||
HDMITX_WriteI2C_Byte(REG_TX_CLK_CTRL1, uc) ;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
HDMITX_WriteI2C_Byte(REG_TX_SW_RST, B_AUD_RST|B_AREF_RST|B_HDCP_RST) ;
|
||||
|
||||
@ -442,7 +443,7 @@ BOOL EnableAudioOutput(ULONG VideoPixelClock,BYTE bAudioSampleFreq,BYTE ChannelN
|
||||
|
||||
Instance[0].TMDSClock = VideoPixelClock ;
|
||||
Instance[0].bAudFs = bAudioSampleFreq ;
|
||||
|
||||
|
||||
ErrorF("EnableAudioOutput(%d,%ld,%x,%d,%d,%d);\n",0,VideoPixelClock,bAudioSampleFreq,ChannelNumber,bAudSWL,bSPDIF) ;
|
||||
|
||||
switch(ChannelNumber)
|
||||
@ -474,12 +475,12 @@ BOOL EnableAudioOutput(ULONG VideoPixelClock,BYTE bAudioSampleFreq,BYTE ChannelN
|
||||
HDMITX_WriteI2C_Byte(REGPktAudCTS0,0x50) ;
|
||||
HDMITX_WriteI2C_Byte(REGPktAudCTS1,0x73) ;
|
||||
HDMITX_WriteI2C_Byte(REGPktAudCTS2,0x00) ;
|
||||
|
||||
|
||||
HDMITX_WriteI2C_Byte(REGPktAudN0,0) ;
|
||||
HDMITX_WriteI2C_Byte(REGPktAudN1,0x18) ;
|
||||
HDMITX_WriteI2C_Byte(REGPktAudN2,0) ;
|
||||
Switch_HDMITX_Bank(0) ;
|
||||
|
||||
|
||||
HDMITX_WriteI2C_Byte(0xC5, 2) ; // D[1] = 0, HW auto count CTS
|
||||
}
|
||||
else
|
||||
@ -615,15 +616,15 @@ EnableHDCP(BYTE bEnable)
|
||||
{
|
||||
if(ER_FAIL == HDCP_Authenticate())
|
||||
{
|
||||
|
||||
HDCP_ResetAuth() ;
|
||||
|
||||
HDCP_ResetAuth() ;
|
||||
return FALSE ;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
HDCP_ResetAuth() ;
|
||||
HDCP_ResetAuth() ;
|
||||
}
|
||||
return TRUE ;
|
||||
}
|
||||
@ -638,8 +639,8 @@ CheckHDMITX(BYTE *pHPD,BYTE *pHPDChange)
|
||||
BOOL HPD ;
|
||||
|
||||
sysstat = HDMITX_ReadI2C_Byte(REG_TX_SYS_STATUS) ; // read system status register
|
||||
|
||||
// OS_PRINTF("sysstat(REG[0x0E])=%02Xh\r\n", sysstat);
|
||||
|
||||
// OS_PRINTF("sysstat(REG[0x0E])=%02Xh\r\n", sysstat);
|
||||
|
||||
HPD = ((sysstat & (B_HPDETECT|B_RXSENDETECT)) == (B_HPDETECT|B_RXSENDETECT))?TRUE:FALSE ;
|
||||
|
||||
@ -751,7 +752,7 @@ CheckHDMITX(BYTE *pHPD,BYTE *pHPDChange)
|
||||
}
|
||||
|
||||
SetupAudioChannel() ; // 2007/12/12 added by jj_tseng
|
||||
|
||||
|
||||
if(pHPD)
|
||||
{
|
||||
*pHPD = HPD ? TRUE:FALSE ;
|
||||
@ -810,7 +811,7 @@ EnableAudioInfoFrame(BYTE bEnable,BYTE *pAudioInfoFrame)
|
||||
if(!bEnable)
|
||||
{
|
||||
// richard modify, DISABLE_AVI_INFOFRM_PKT() ;
|
||||
DISABLE_AUD_INFOFRM_PKT();
|
||||
DISABLE_AUD_INFOFRM_PKT();
|
||||
return TRUE ;
|
||||
}
|
||||
|
||||
@ -823,6 +824,22 @@ EnableAudioInfoFrame(BYTE bEnable,BYTE *pAudioInfoFrame)
|
||||
return FALSE ;
|
||||
}
|
||||
|
||||
BOOL
|
||||
EnableHDRInfoFrame(BYTE bEnable, BYTE *pHDRInfoFrame)
|
||||
{
|
||||
if (!bEnable) {
|
||||
DISABLE_NULL_PKT();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if(SetHDRInfoFrame((HDR_InfoFrame *)pHDRInfoFrame) == ER_SUCCESS)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE ;
|
||||
}
|
||||
|
||||
void
|
||||
SetAVMute(BYTE bEnable)
|
||||
{
|
||||
@ -1087,7 +1104,7 @@ BOOL ProgramDEGenModeByID(MODE_ID id,BYTE bInputSignalType)
|
||||
{
|
||||
return FALSE ;
|
||||
}
|
||||
|
||||
|
||||
Switch_HDMITX_Bank(0) ;
|
||||
HDMITX_WriteI2C_Byte(0x90,DeGen_Table[i].Reg90) ;
|
||||
HDMITX_WriteI2C_Byte(0x92,DeGen_Table[i].Reg92) ;
|
||||
@ -1100,7 +1117,7 @@ BOOL ProgramDEGenModeByID(MODE_ID id,BYTE bInputSignalType)
|
||||
HDMITX_WriteI2C_Byte(0x9E,DeGen_Table[i].Reg9E) ;
|
||||
HDMITX_WriteI2C_Byte(0x9F,DeGen_Table[i].Reg9F) ;
|
||||
return TRUE ;
|
||||
|
||||
|
||||
}
|
||||
return FALSE ;
|
||||
}
|
||||
@ -1181,21 +1198,21 @@ ProgramSyncEmbeddedVideoMode(BYTE VIC,BYTE bInputSignalType)
|
||||
break ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(SyncEmbTable[i].fmt == 0xFF)
|
||||
{
|
||||
return FALSE ;
|
||||
}
|
||||
|
||||
|
||||
HDMITX_WriteI2C_Byte(REG_TX_HVPol,SyncEmbTable[i].RegHVPol) ; // Reg90
|
||||
HDMITX_WriteI2C_Byte(REG_TX_HfPixel,SyncEmbTable[i].RegHfPixel) ; // Reg91
|
||||
|
||||
|
||||
HDMITX_WriteI2C_Byte(REG_TX_HSSL,SyncEmbTable[i].RegHSSL) ; // Reg95
|
||||
HDMITX_WriteI2C_Byte(REG_TX_HSEL,SyncEmbTable[i].RegHSEL) ; // Reg96
|
||||
HDMITX_WriteI2C_Byte(REG_TX_HSH,SyncEmbTable[i].RegHSH) ; // Reg97
|
||||
HDMITX_WriteI2C_Byte(REG_TX_VSS1,SyncEmbTable[i].RegVSS1) ; // RegA0
|
||||
HDMITX_WriteI2C_Byte(REG_TX_VSE1,SyncEmbTable[i].RegVSE1) ; // RegA1
|
||||
|
||||
|
||||
HDMITX_WriteI2C_Byte(REG_TX_VSS2,SyncEmbTable[i].RegVSS2) ; // RegA2
|
||||
HDMITX_WriteI2C_Byte(REG_TX_VSE2,SyncEmbTable[i].RegVSE2) ; // RegA3
|
||||
}
|
||||
@ -1441,7 +1458,7 @@ SetCSCScale(BYTE bInputMode,BYTE bOutputMode)
|
||||
case F_MODE_ITU601|F_MODE_0_255:
|
||||
default:
|
||||
ErrorF("ITU601 0-255 ") ;
|
||||
|
||||
|
||||
HDMITX_WriteI2C_ByteN(REG_TX_CSC_YOFF,bCSCOffset_0_255,SIZEOF_CSCOFFSET) ;
|
||||
HDMITX_WriteI2C_ByteN(REG_TX_CSC_MTX11_L,bCSCMtx_RGB2YUV_ITU601_0_255,SIZEOF_CSCMTX) ;
|
||||
break ;
|
||||
@ -1685,7 +1702,7 @@ SetAudioFormat(BYTE NumChannel,BYTE AudioEnable,BYTE bSampleFreq,BYTE AudSWL,BYT
|
||||
fs = ~fs ; // OFS is the one's complement of FS
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDCHST_OFS_WL,(fs<<4)|SWL) ;
|
||||
Switch_HDMITX_Bank(0) ;
|
||||
|
||||
|
||||
// richard modify (could be bug), if(!(AudioEnable | B_AUD_SPDIF))
|
||||
if(!(AudioEnable & B_AUD_SPDIF))
|
||||
{
|
||||
@ -1693,7 +1710,7 @@ SetAudioFormat(BYTE NumChannel,BYTE AudioEnable,BYTE bSampleFreq,BYTE AudSWL,BYT
|
||||
}
|
||||
|
||||
Instance[0].bAudioChannelEnable = AudioEnable ;
|
||||
|
||||
|
||||
// HDMITX_AndREG_Byte(REG_TX_SW_RST,B_AUD_RST) ; // enable Audio
|
||||
return ER_SUCCESS;
|
||||
}
|
||||
@ -1717,30 +1734,30 @@ AutoAdjustAudio()
|
||||
// return ;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
Switch_HDMITX_Bank(1) ;
|
||||
|
||||
|
||||
N = ((unsigned long)HDMITX_ReadI2C_Byte(REGPktAudN2)&0xF) << 16 ;
|
||||
N |= ((unsigned long)HDMITX_ReadI2C_Byte(REGPktAudN1)) <<8 ;
|
||||
N |= ((unsigned long)HDMITX_ReadI2C_Byte(REGPktAudN0)) ;
|
||||
|
||||
|
||||
CTS = ((unsigned long)HDMITX_ReadI2C_Byte(REGPktAudCTSCnt2)&0xF) << 16 ;
|
||||
CTS |= ((unsigned long)HDMITX_ReadI2C_Byte(REGPktAudCTSCnt1)) <<8 ;
|
||||
CTS |= ((unsigned long)HDMITX_ReadI2C_Byte(REGPktAudCTSCnt0)) ;
|
||||
Switch_HDMITX_Bank(0) ;
|
||||
|
||||
// CTS = TMDSCLK * N / ( 128 * SampleFreq )
|
||||
// SampleFreq = TMDSCLK * N / (128*CTS)
|
||||
|
||||
if( CTS == 0 )
|
||||
|
||||
// CTS = TMDSCLK * N / ( 128 * SampleFreq )
|
||||
// SampleFreq = TMDSCLK * N / (128*CTS)
|
||||
|
||||
if( CTS == 0 )
|
||||
{
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
SampleFreq = Instance[0].TMDSClock/CTS ;
|
||||
SampleFreq *= N ;
|
||||
SampleFreq /= 128 ;
|
||||
|
||||
|
||||
if( SampleFreq>31000 && SampleFreq<=38050 )
|
||||
{
|
||||
Instance[0].bAudFs = AUDFS_32KHz ;
|
||||
@ -1776,16 +1793,16 @@ AutoAdjustAudio()
|
||||
Instance[0].bAudFs = AUDFS_192KHz ;
|
||||
fs = AUDFS_192KHz ;;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
Instance[0].bAudFs = AUDFS_OTHER;
|
||||
fs = AUDFS_OTHER;;
|
||||
}
|
||||
|
||||
// bPendingAdjustAudioFreq = FALSE ;
|
||||
|
||||
|
||||
SetNCTS(Instance[0].TMDSClock, Instance[0].bAudFs) ; // set N, CTS by new generated clock.
|
||||
|
||||
|
||||
Switch_HDMITX_Bank(1) ; // adjust the new fs in channel status registers
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDCHST_CA_FS,0x00|fs) ; // choose clock
|
||||
fs = ~fs ; // OFS is the one's complement of FS
|
||||
@ -1793,7 +1810,7 @@ AutoAdjustAudio()
|
||||
uc &= 0xF ;
|
||||
uc |= fs << 4 ;
|
||||
HDMITX_WriteI2C_Byte(REG_TX_AUDCHST_OFS_WL,uc) ;
|
||||
|
||||
|
||||
Switch_HDMITX_Bank(0) ;
|
||||
|
||||
}
|
||||
@ -1994,7 +2011,7 @@ AbortDDC()
|
||||
{
|
||||
break ; // success
|
||||
}
|
||||
|
||||
|
||||
if( uc & (B_DDC_NOACK|B_DDC_WAITBUS|B_DDC_ARBILOSE) )
|
||||
{
|
||||
ErrorF("AbortDDC Fail by reg16=%02X\n",uc) ;
|
||||
@ -2100,12 +2117,12 @@ ReadEDID(BYTE *pData,BYTE bSegment,BYTE offset,SHORT Count)
|
||||
for(TimeOut = 0 ; TimeOut < 200 ; TimeOut++)
|
||||
{
|
||||
ucdata = HDMITX_ReadI2C_Byte(REG_TX_DDC_STATUS) ;
|
||||
|
||||
|
||||
if(ucdata&B_DDC_DONE)
|
||||
{
|
||||
break ;
|
||||
break ;
|
||||
}
|
||||
|
||||
|
||||
if((ucdata & B_DDC_ERROR)||(HDMITX_ReadI2C_Byte(REG_TX_INT_STAT1) & B_INT_DDC_BUS_HANG))
|
||||
{
|
||||
ErrorF("Called AboutDDC()\n") ;
|
||||
@ -2458,14 +2475,14 @@ HDCP_Authenticate()
|
||||
|
||||
HDCP_GetBKSV(BKSV) ;
|
||||
ErrorF("BKSV %02X %02X %02X %02X %02X\n",BKSV[0],BKSV[1],BKSV[2],BKSV[3],BKSV[4]) ;
|
||||
|
||||
|
||||
for(TimeOut = 0, ucdata = 0 ; TimeOut < 5 ; TimeOut ++)
|
||||
{
|
||||
ucdata += countbit(BKSV[TimeOut]) ;
|
||||
}
|
||||
if( ucdata != 20 ) return ER_FAIL ;
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef SUPPORT_REVOKE_KSV
|
||||
HDCP_VerifyRevocationList(SRM1,BKSV,&revoked) ;
|
||||
if(revoked)
|
||||
@ -2513,7 +2530,7 @@ HDCP_Authenticate()
|
||||
{
|
||||
HDCP_Auth_Fire();
|
||||
// wait for status ;
|
||||
|
||||
|
||||
for(TimeOut = 250 ; TimeOut > 0 ; TimeOut --)
|
||||
{
|
||||
DelayMS(5) ; // delay 1ms
|
||||
@ -2525,7 +2542,7 @@ HDCP_Authenticate()
|
||||
Instance[0].bAuthenticated = TRUE ;
|
||||
break ;
|
||||
}
|
||||
|
||||
|
||||
ucdata = HDMITX_ReadI2C_Byte(REG_TX_INT_STAT2) ;
|
||||
if(ucdata & B_INT_AUTH_FAIL)
|
||||
{
|
||||
@ -2616,12 +2633,12 @@ HDCP_GetKSVList(BYTE *pKSVList,BYTE cDownStream)
|
||||
{
|
||||
BYTE TimeOut = 100 ;
|
||||
BYTE ucdata ;
|
||||
|
||||
|
||||
if(cDownStream == 0 || pKSVList == NULL)
|
||||
{
|
||||
return ER_FAIL ;
|
||||
}
|
||||
|
||||
|
||||
HDMITX_WriteI2C_Byte(REG_TX_DDC_MASTER_CTRL,B_MASTERHOST) ;
|
||||
HDMITX_WriteI2C_Byte(REG_TX_DDC_HEADER,0x74) ;
|
||||
HDMITX_WriteI2C_Byte(REG_TX_DDC_REQOFF,0x43) ;
|
||||
@ -2667,13 +2684,13 @@ HDCP_GetVr(BYTE *pVr)
|
||||
{
|
||||
BYTE TimeOut ;
|
||||
BYTE ucdata ;
|
||||
|
||||
|
||||
if(pVr == NULL)
|
||||
{
|
||||
// richard return NULL ;
|
||||
return ER_FAIL;
|
||||
}
|
||||
|
||||
|
||||
HDMITX_WriteI2C_Byte(REG_TX_DDC_MASTER_CTRL,B_MASTERHOST) ;
|
||||
HDMITX_WriteI2C_Byte(REG_TX_DDC_HEADER,0x74) ;
|
||||
HDMITX_WriteI2C_Byte(REG_TX_DDC_REQOFF,0x20) ;
|
||||
@ -2713,9 +2730,9 @@ HDCP_GetVr(BYTE *pVr)
|
||||
pVr[TimeOut*4+2] = (ULONG)HDMITX_ReadI2C_Byte(REG_TX_SHA_RD_BYTE2) ;
|
||||
pVr[TimeOut*4+1] = (ULONG)HDMITX_ReadI2C_Byte(REG_TX_SHA_RD_BYTE3) ;
|
||||
pVr[TimeOut*4] = (ULONG)HDMITX_ReadI2C_Byte(REG_TX_SHA_RD_BYTE4) ;
|
||||
ErrorF("V' = %02X %02X %02X %02X\n",pVr[TimeOut*4],pVr[TimeOut*4+1],pVr[TimeOut*4+2],pVr[TimeOut*4+3]) ;
|
||||
ErrorF("V' = %02X %02X %02X %02X\n",pVr[TimeOut*4],pVr[TimeOut*4+1],pVr[TimeOut*4+2],pVr[TimeOut*4+3]) ;
|
||||
}
|
||||
|
||||
|
||||
return ER_SUCCESS ;
|
||||
}
|
||||
|
||||
@ -2728,7 +2745,7 @@ HDCP_GetM0(BYTE *pM0)
|
||||
{
|
||||
return ER_FAIL ;
|
||||
}
|
||||
|
||||
|
||||
HDMITX_WriteI2C_Byte(REG_TX_SHA_SEL,5) ; // read m0[31:0] from reg51~reg54
|
||||
pM0[0] = HDMITX_ReadI2C_Byte(REG_TX_SHA_RD_BYTE1) ;
|
||||
pM0[1] = HDMITX_ReadI2C_Byte(REG_TX_SHA_RD_BYTE2) ;
|
||||
@ -2764,7 +2781,7 @@ void SHATransform(ULONG * h)
|
||||
{
|
||||
LONG t;
|
||||
|
||||
|
||||
|
||||
for (t = 16; t < 80; t++) {
|
||||
ULONG tmp = w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16];
|
||||
w[t] = rol(tmp,1);
|
||||
@ -2787,7 +2804,7 @@ void SHATransform(ULONG * h)
|
||||
h[2] = rol(h[1],30);
|
||||
h[1] = h[0];
|
||||
h[0] = tmp;
|
||||
|
||||
|
||||
}
|
||||
for (t = 20; t < 40; t++) {
|
||||
ULONG tmp = rol(h[0],5) + (h[1] ^ h[2] ^ h[3]) + h[4] + w[t] + 0x6ed9eba1;
|
||||
@ -2841,8 +2858,8 @@ void SHA_Simple(void *p,LONG len,BYTE *output)
|
||||
int i, t ;
|
||||
ULONG c ;
|
||||
char *pBuff = p ;
|
||||
|
||||
|
||||
|
||||
|
||||
for( i = 0 ; i < len ; i++ )
|
||||
{
|
||||
t = i/4 ;
|
||||
@ -2867,14 +2884,14 @@ void SHA_Simple(void *p,LONG len,BYTE *output)
|
||||
w[t] = 0 ;
|
||||
}
|
||||
w[15] = len*8 ;
|
||||
|
||||
|
||||
for( t = 0 ; t< 16 ; t++ )
|
||||
{
|
||||
printf("w[%2d] = %08lX\n",t,w[t]) ;
|
||||
}
|
||||
|
||||
SHATransform(sha) ;
|
||||
|
||||
|
||||
for( i = 0 ; i < 5 ; i++ )
|
||||
{
|
||||
output[i*4] = (BYTE)((sha[i]>>24)&0xFF) ;
|
||||
@ -2888,7 +2905,7 @@ static SYS_STATUS
|
||||
HDCP_CheckSHA(BYTE pM0[],USHORT BStatus,BYTE pKSVList[],int cDownStream,BYTE Vr[])
|
||||
{
|
||||
int i,n ;
|
||||
|
||||
|
||||
for(i = 0 ; i < cDownStream*5 ; i++)
|
||||
{
|
||||
SHABuff[i] = pKSVList[i] ;
|
||||
@ -2926,7 +2943,7 @@ HDCP_CheckSHA(BYTE pM0[],USHORT BStatus,BYTE pKSVList[],int cDownStream,BYTE Vr[
|
||||
{
|
||||
printf(" %02X",Vr[i]) ;
|
||||
}
|
||||
|
||||
|
||||
for(i = 0 ; i < 20 ; i++)
|
||||
{
|
||||
if(V[i] != Vr[i])
|
||||
@ -2941,7 +2958,7 @@ static SYS_STATUS
|
||||
HDCP_Authenticate_Repeater()
|
||||
{
|
||||
BYTE uc ;
|
||||
#ifdef SUPPORT_DSSSHA
|
||||
#ifdef SUPPORT_DSSSHA
|
||||
BYTE revoked ;
|
||||
int i ;
|
||||
#else
|
||||
@ -2978,7 +2995,7 @@ HDCP_Authenticate_Repeater()
|
||||
//////////////////////////////////////
|
||||
// Authenticate Fired
|
||||
//////////////////////////////////////
|
||||
|
||||
|
||||
HDCP_GetBCaps(&BCaps,&BStatus) ;
|
||||
DelayMS(2);
|
||||
HDCP_Auth_Fire();
|
||||
@ -3038,7 +3055,7 @@ HDCP_Authenticate_Repeater()
|
||||
{
|
||||
ErrorF("Wait KSV FIFO Ready %d\n",TimeOut) ;
|
||||
}
|
||||
|
||||
|
||||
if(HDCP_GetBCaps(&BCaps,&BStatus) == ER_FAIL)
|
||||
{
|
||||
ErrorF("Get BCaps fail\n") ;
|
||||
@ -3061,17 +3078,17 @@ HDCP_Authenticate_Repeater()
|
||||
}
|
||||
|
||||
ErrorF("Wait timeout = %d\n",TimeOut) ;
|
||||
|
||||
|
||||
ClearDDCFIFO() ;
|
||||
GenerateDDCSCLK() ;
|
||||
cDownStream = (BStatus & M_DOWNSTREAM_COUNT) ;
|
||||
|
||||
|
||||
if(cDownStream == 0 || cDownStream > 6 || BStatus & (B_MAX_CASCADE_EXCEEDED|B_DOWNSTREAM_OVER))
|
||||
{
|
||||
ErrorF("Invalid Down stream count,fail\n") ;
|
||||
goto HDCP_Repeater_Fail ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(HDCP_GetKSVList(KSVList,cDownStream) == ER_FAIL)
|
||||
{
|
||||
@ -3087,38 +3104,38 @@ HDCP_Authenticate_Repeater()
|
||||
uc += countbit(KSVList[i*5+TimeOut]) ;
|
||||
}
|
||||
if( uc != 20 ) revoked = TRUE ;
|
||||
#ifdef SUPPORT_REVOKE_KSV
|
||||
#ifdef SUPPORT_REVOKE_KSV
|
||||
HDCP_VerifyRevocationList(SRM1,&KSVList[i*5],&revoked) ;
|
||||
#endif
|
||||
if(revoked)
|
||||
{
|
||||
ErrorF("KSVFIFO[%d] = %02X %02X %02X %02X %02X is revoked\n",i,KSVList[i*5],KSVList[i*5+1],KSVList[i*5+2],KSVList[i*5+3],KSVList[i*5+4]) ;
|
||||
ErrorF("KSVFIFO[%d] = %02X %02X %02X %02X %02X is revoked\n",i,KSVList[i*5],KSVList[i*5+1],KSVList[i*5+2],KSVList[i*5+3],KSVList[i*5+4]) ;
|
||||
goto HDCP_Repeater_Fail ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(HDCP_GetVr(Vr) == ER_FAIL)
|
||||
{
|
||||
goto HDCP_Repeater_Fail ;
|
||||
goto HDCP_Repeater_Fail ;
|
||||
}
|
||||
|
||||
if(HDCP_GetM0(M0) == ER_FAIL)
|
||||
{
|
||||
goto HDCP_Repeater_Fail ;
|
||||
}
|
||||
|
||||
|
||||
// do check SHA
|
||||
if(HDCP_CheckSHA(M0,BStatus,KSVList,cDownStream,Vr) == ER_FAIL)
|
||||
{
|
||||
goto HDCP_Repeater_Fail ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
HDCP_ResumeRepeaterAuthenticate() ;
|
||||
Instance[0].bAuthenticated = TRUE ;
|
||||
return ER_SUCCESS ;
|
||||
|
||||
|
||||
HDCP_Repeater_Fail:
|
||||
HDCP_CancelRepeaterAuthenticate() ;
|
||||
return ER_FAIL ;
|
||||
@ -3388,6 +3405,38 @@ SetAudioInfoFrame(Audio_InfoFrame *pAudioInfoFrame)
|
||||
return ER_SUCCESS ;
|
||||
}
|
||||
|
||||
static SYS_STATUS
|
||||
SetHDRInfoFrame(HDR_InfoFrame *pHDRInfoFrame)
|
||||
{
|
||||
int i ;
|
||||
BYTE ucData ;
|
||||
|
||||
if(!pHDRInfoFrame)
|
||||
{
|
||||
return ER_FAIL ;
|
||||
}
|
||||
|
||||
Switch_HDMITX_Bank(1) ;
|
||||
|
||||
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB00, (0x80+pHDRInfoFrame->info.Type));
|
||||
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB01, pHDRInfoFrame->info.Ver);
|
||||
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB02, pHDRInfoFrame->info.Len);
|
||||
|
||||
for(i = 0; i < HDR_INFOFRAME_LEN ; i++)
|
||||
HDMITX_WriteI2C_Byte(REG_TX_PKT_PB01+i, pHDRInfoFrame->pktbyte.HDR_DB[i]);
|
||||
|
||||
for(i = 0,ucData = 0 ; i< HDR_INFOFRAME_LEN ; i++)
|
||||
{
|
||||
ucData -= pHDRInfoFrame->pktbyte.HDR_DB[i] ;
|
||||
}
|
||||
ucData -= 0x80+HDR_INFOFRAME_VER+HDR_INFOFRAME_TYPE+HDR_INFOFRAME_LEN ;
|
||||
HDMITX_WriteI2C_Byte(REG_TX_PKT_PB00, ucData);
|
||||
|
||||
Switch_HDMITX_Bank(0) ;
|
||||
ENABLE_NULL_PKT();
|
||||
return ER_SUCCESS ;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Function: SetSPDInfoFrame()
|
||||
// Parameter: pSPDInfoFrame - the pointer to HDMI SPD Infoframe ucData
|
||||
|
@ -277,7 +277,7 @@
|
||||
#define B_AFE_DRV_PDRXDET (1<<2)
|
||||
#define B_AFE_DRV_TERMON (1<<1)
|
||||
#define B_AFE_DRV_ENCAL (1<<0)
|
||||
|
||||
|
||||
#define REG_TX_AFE_XP_CTRL 0x62
|
||||
#define B_AFE_XP_GAINBIT (1<<7)
|
||||
#define B_AFE_XP_PWDPLL (1<<6)
|
||||
@ -287,7 +287,7 @@
|
||||
#define B_AFE_XP_PWDI (1<<2)
|
||||
#define B_AFE_XP_DEI (1<<1)
|
||||
#define B_AFE_XP_DER (1<<0)
|
||||
|
||||
|
||||
#define REG_TX_AFE_ISW_CTRL 0x63
|
||||
#define B_AFE_RTERM_SEL (1<<7)
|
||||
#define B_AFE_IP_BYPASS (1<<6)
|
||||
@ -296,7 +296,7 @@
|
||||
#define B_AFE_DRV_ISWK 7
|
||||
|
||||
#define REG_TX_AFE_IP_CTRL 0x64
|
||||
|
||||
|
||||
#define B_AFE_IP_GAINBIT (1<<7)
|
||||
#define B_AFE_IP_PWDPLL (1<<6)
|
||||
#define M_AFE_IP_CKSEL (3<<4)
|
||||
@ -315,15 +315,15 @@
|
||||
#define M_AFE_DRV_VSW (3<<2)
|
||||
#define B_AFE_RING_SLOW (1<<1)
|
||||
#define B_AFE_RING_FAST (1<<0)
|
||||
#define REG_TX_AFE_TEST 0x66
|
||||
#define REG_TX_AFE_TEST 0x66
|
||||
#define B_AFE_AFE_ENTEST (1<<6)
|
||||
#define B_AFE_AFE_ENBIST (1<<5)
|
||||
#define M_AFE_CAL_RTERM_MANUAL 0x1F
|
||||
#define REG_TX_AFE_LFSR 0x67
|
||||
#define REG_TX_AFE_LFSR 0x67
|
||||
#define B_AFE_AFELFSR_VAL (1<<7)
|
||||
#define B_AFE_DIS_AFELFSR (1<<6)
|
||||
#define M_AFE_RTERM_VAOUE 0xF
|
||||
|
||||
|
||||
//
|
||||
//#define REG_TX_AFE_DRV_CTRL 0x61
|
||||
// #define M_AFE_DRV_SR (3<<2)
|
||||
@ -448,7 +448,7 @@
|
||||
#define B_BLUE_SCR_MUTE (1<<1)
|
||||
#define B_NODEF_PHASE (1<<2)
|
||||
#define B_PHASE_RESYNC (1<<3)
|
||||
|
||||
|
||||
#define O_COLOR_DEPTH 4
|
||||
#define M_COLOR_DEPTH 7
|
||||
#define B_COLOR_DEPTH_MASK (M_COLOR_DEPTH<<O_COLOR_DEPTH)
|
||||
@ -688,12 +688,12 @@
|
||||
// data structure
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
typedef struct _INSTANCE_STRUCT {
|
||||
|
||||
|
||||
BYTE I2C_DEV ;
|
||||
BYTE I2C_ADDR ;
|
||||
|
||||
|
||||
/////////////////////////////////////////////////
|
||||
// Interrupt Type
|
||||
// Interrupt Type
|
||||
/////////////////////////////////////////////////
|
||||
BYTE bIntType ; // = 0 ;
|
||||
/////////////////////////////////////////////////
|
||||
@ -707,12 +707,12 @@ typedef struct _INSTANCE_STRUCT {
|
||||
BYTE bAudioChannelSwap ; // = 0 ;
|
||||
BYTE bAudioChannelEnable ;
|
||||
BYTE bAudFs ;
|
||||
unsigned long TMDSClock ;
|
||||
unsigned long TMDSClock ;
|
||||
BYTE bAuthenticated:1 ;
|
||||
BYTE bHDMIMode: 1;
|
||||
BYTE bIntPOL:1 ; // 0 = Low Active
|
||||
BYTE bIntPOL:1 ; // 0 = Low Active
|
||||
BYTE bHPD:1 ;
|
||||
|
||||
|
||||
} INSTANCE ;
|
||||
|
||||
|
||||
@ -828,6 +828,7 @@ BOOL CheckHDMITX(BYTE *pHPD,BYTE *pHPDChange) ;
|
||||
BOOL EnableHDCP(BYTE bEnable) ;
|
||||
BOOL EnableAVIInfoFrame(BYTE bEnable,BYTE *pAVIInfoFrame);
|
||||
BOOL EnableAudioInfoFrame(BYTE bEnable,BYTE *pAudioInfoFrame);
|
||||
BOOL EnableHDRInfoFrame(BYTE bEnable, BYTE *pHDRInfoFrame);
|
||||
// BOOL EnableVideoOutputIndirect(BYTE xCnt,BYTE inputColorMode,BYTE outputColorMode,BYTE bHDMI) ;
|
||||
void SetAVMute(BYTE bEnable) ;
|
||||
void SetOutputColorDepthPhase(BYTE ColorDepth,BYTE bPhase) ;
|
||||
|
@ -130,7 +130,7 @@ typedef enum {
|
||||
#define F_VIDMODE_16_235 F_MODE_16_235 // richard add
|
||||
|
||||
|
||||
typedef union _VideoFormatCode
|
||||
typedef union _VideoFormatCode
|
||||
{
|
||||
struct _VFC
|
||||
{
|
||||
@ -195,18 +195,21 @@ typedef union _VideoFormatCode
|
||||
#define SPD_INFOFRAME_TYPE 0x03
|
||||
#define AUDIO_INFOFRAME_TYPE 0x04
|
||||
#define MPEG_INFOFRAME_TYPE 0x05
|
||||
#define HDR_INFOFRAME_TYPE 0x07
|
||||
|
||||
#define VENDORSPEC_INFOFRAME_VER 0x01
|
||||
#define AVI_INFOFRAME_VER 0x02
|
||||
#define SPD_INFOFRAME_VER 0x01
|
||||
#define AUDIO_INFOFRAME_VER 0x01
|
||||
#define MPEG_INFOFRAME_VER 0x01
|
||||
#define HDR_INFOFRAME_VER 0x01
|
||||
|
||||
#define VENDORSPEC_INFOFRAME_LEN 8
|
||||
#define AVI_INFOFRAME_LEN 13
|
||||
#define SPD_INFOFRAME_LEN 25
|
||||
#define AUDIO_INFOFRAME_LEN 10
|
||||
#define MPEG_INFOFRAME_LEN 10
|
||||
#define HDR_INFOFRAME_LEN 26
|
||||
|
||||
#define ACP_PKT_LEN 9
|
||||
#define ISRC1_PKT_LEN 16
|
||||
@ -316,6 +319,23 @@ typedef union _SPD_InfoFrame {
|
||||
} pktbyte ;
|
||||
} SPD_InfoFrame ;
|
||||
|
||||
// HDR
|
||||
typedef union _HDR_InfoFrame {
|
||||
struct {
|
||||
BYTE Type ;
|
||||
BYTE Ver ;
|
||||
BYTE Len ;
|
||||
|
||||
BYTE TF ; // vendor name character in 7bit ascii characters
|
||||
BYTE DESC_ID ; // product description character in 7bit ascii characters
|
||||
BYTE DESC[24] ;
|
||||
} info ;
|
||||
struct {
|
||||
BYTE HDR_HB[3] ;
|
||||
BYTE HDR_DB[HDR_INFOFRAME_LEN] ;
|
||||
} pktbyte ;
|
||||
} HDR_InfoFrame ;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Using for interface.
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
Reference in New Issue
Block a user