1
0
mirror of https://github.com/marqs85/ossc.git synced 2024-06-19 11:29:46 +00:00

it6613: add support for Freesync infoframe

This commit is contained in:
marqs 2024-06-01 12:35:42 +03:00
parent 46a4f4450f
commit 1ba1779632
5 changed files with 65 additions and 14 deletions

View File

@ -360,5 +360,27 @@ void HDMITX_SetHDRInfoFrame(BYTE HDR_TF)
HDRInfo.pktbyte.HDR_DB[24] = 0xfa;
HDRInfo.pktbyte.HDR_DB[25] = 0x00;*/
EnableHDRInfoFrame(TRUE, (BYTE *) &HDRInfo);
EnableGPInfoFrame(TRUE, (BYTE *) &HDRInfo);
}
void HDMITX_SetVRRInfoFrame(BYTE enable)
{
int i;
Freesync_InfoFrame VRRInfo;
VRRInfo.info.Type = SPD_INFOFRAME_TYPE;
VRRInfo.info.Ver = VENDORSPEC_INFOFRAME_VER;
VRRInfo.info.Len = VENDORSPEC_INFOFRAME_LEN;
VRRInfo.info.Enable = enable ? 0x1a : 0;
VRRInfo.info.Mode2 = 0x07;
VRRInfo.info.min_rate = 40;
VRRInfo.info.max_rate = 144;
for (i=1; i<VENDORSPEC_INFOFRAME_LEN-3; i++) {
VRRInfo.pktbyte.FS_DB[i] = 0;
}
EnableGPInfoFrame(TRUE, (BYTE *) &VRRInfo);
}

View File

@ -28,5 +28,6 @@ void HDMITX_SetOutputColorDepth(int ColorDepth);
void HDMITX_SetAudioInfoFrame(BYTE bAudioDwSampling);
void HDMITX_SetHDRInfoFrame(BYTE enableHDR);
void HDMITX_SetVRRInfoFrame(BYTE enable);
#endif /*HDMI_TX_H_*/

View File

@ -80,7 +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 SetGPInfoFrame(BYTE *pInfoFrameData) ;
static SYS_STATUS ReadEDID(BYTE *pData,BYTE bSegment,BYTE offset,SHORT Count) ;
static void AbortDDC() ;
static void ClearDDCFIFO() ;
@ -825,14 +825,14 @@ EnableAudioInfoFrame(BYTE bEnable,BYTE *pAudioInfoFrame)
}
BOOL
EnableHDRInfoFrame(BYTE bEnable, BYTE *pHDRInfoFrame)
EnableGPInfoFrame(BYTE bEnable, BYTE *pInfoFrame)
{
if (!bEnable) {
DISABLE_NULL_PKT();
return TRUE;
}
if(SetHDRInfoFrame((HDR_InfoFrame *)pHDRInfoFrame) == ER_SUCCESS)
if(SetGPInfoFrame(pInfoFrame) == ER_SUCCESS)
{
return TRUE;
}
@ -3390,28 +3390,29 @@ SetAudioInfoFrame(Audio_InfoFrame *pAudioInfoFrame)
}
static SYS_STATUS
SetHDRInfoFrame(HDR_InfoFrame *pHDRInfoFrame)
SetGPInfoFrame(BYTE *pInfoFrameData)
{
int i ;
BYTE ucData ;
HDR_InfoFrame *pInfoFrame = (HDR_InfoFrame*)pInfoFrameData;
if(!pHDRInfoFrame)
if(!pInfoFrame)
{
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);
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB00, (0x80+pInfoFrame->info.Type));
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB01, pInfoFrame->info.Ver);
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB02, pInfoFrame->info.Len);
for(i = 0,ucData = 0 ; i< HDR_INFOFRAME_LEN ; i++)
for(i = 0,ucData = 0 ; i< pInfoFrame->info.Len ; i++)
{
HDMITX_WriteI2C_Byte(REG_TX_PKT_PB01+i, pHDRInfoFrame->pktbyte.HDR_DB[i]);
ucData -= pHDRInfoFrame->pktbyte.HDR_DB[i] ;
HDMITX_WriteI2C_Byte(REG_TX_PKT_PB01+i, pInfoFrame->pktbyte.HDR_DB[i]);
ucData -= pInfoFrame->pktbyte.HDR_DB[i] ;
}
ucData -= 0x80+HDR_INFOFRAME_VER+HDR_INFOFRAME_TYPE+HDR_INFOFRAME_LEN ;
ucData -= 0x80+pInfoFrame->info.Type+pInfoFrame->info.Ver+pInfoFrame->info.Len ;
HDMITX_WriteI2C_Byte(REG_TX_PKT_PB00, ucData);
Switch_HDMITX_Bank(0) ;

View File

@ -828,7 +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 EnableGPInfoFrame(BYTE bEnable, BYTE *pInfoFrame);
// BOOL EnableVideoOutputIndirect(BYTE xCnt,BYTE inputColorMode,BYTE outputColorMode,BYTE bHDMI) ;
void SetAVMute(BYTE bEnable) ;
void SetOutputColorDepthPhase(BYTE ColorDepth,BYTE bPhase) ;

View File

@ -252,6 +252,33 @@ typedef union _AVI_InfoFrame
} pktbyte ;
} AVI_InfoFrame ;
typedef union _Freesync_InfoFrame {
struct {
BYTE Type ;
BYTE Ver ;
BYTE Len ;
BYTE Enable ;
BYTE Rsvd1 ;
BYTE Rsvd2 ;
BYTE Rsvd3 ;
BYTE Rsvd4 ;
BYTE Mode2 ;
BYTE min_rate ;
BYTE max_rate ;
} info ;
struct {
BYTE FS_HB[3] ;
BYTE FS_DB[VENDORSPEC_INFOFRAME_LEN] ;
} pktbyte ;
} Freesync_InfoFrame ;
typedef union _Audio_InfoFrame {
struct {