1
0
mirror of https://github.com/marqs85/ossc.git synced 2024-06-26 17:29:57 +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[24] = 0xfa;
HDRInfo.pktbyte.HDR_DB[25] = 0x00;*/ 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_SetAudioInfoFrame(BYTE bAudioDwSampling);
void HDMITX_SetHDRInfoFrame(BYTE enableHDR); void HDMITX_SetHDRInfoFrame(BYTE enableHDR);
void HDMITX_SetVRRInfoFrame(BYTE enable);
#endif /*HDMI_TX_H_*/ #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 SetAudioInfoFrame(Audio_InfoFrame *pAudioInfoFrame) ;
static SYS_STATUS SetSPDInfoFrame(SPD_InfoFrame *pSPDInfoFrame) ; static SYS_STATUS SetSPDInfoFrame(SPD_InfoFrame *pSPDInfoFrame) ;
static SYS_STATUS SetMPEGInfoFrame(MPEG_InfoFrame *pMPGInfoFrame) ; 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 SYS_STATUS ReadEDID(BYTE *pData,BYTE bSegment,BYTE offset,SHORT Count) ;
static void AbortDDC() ; static void AbortDDC() ;
static void ClearDDCFIFO() ; static void ClearDDCFIFO() ;
@ -825,14 +825,14 @@ EnableAudioInfoFrame(BYTE bEnable,BYTE *pAudioInfoFrame)
} }
BOOL BOOL
EnableHDRInfoFrame(BYTE bEnable, BYTE *pHDRInfoFrame) EnableGPInfoFrame(BYTE bEnable, BYTE *pInfoFrame)
{ {
if (!bEnable) { if (!bEnable) {
DISABLE_NULL_PKT(); DISABLE_NULL_PKT();
return TRUE; return TRUE;
} }
if(SetHDRInfoFrame((HDR_InfoFrame *)pHDRInfoFrame) == ER_SUCCESS) if(SetGPInfoFrame(pInfoFrame) == ER_SUCCESS)
{ {
return TRUE; return TRUE;
} }
@ -3390,28 +3390,29 @@ SetAudioInfoFrame(Audio_InfoFrame *pAudioInfoFrame)
} }
static SYS_STATUS static SYS_STATUS
SetHDRInfoFrame(HDR_InfoFrame *pHDRInfoFrame) SetGPInfoFrame(BYTE *pInfoFrameData)
{ {
int i ; int i ;
BYTE ucData ; BYTE ucData ;
HDR_InfoFrame *pInfoFrame = (HDR_InfoFrame*)pInfoFrameData;
if(!pHDRInfoFrame) if(!pInfoFrame)
{ {
return ER_FAIL ; return ER_FAIL ;
} }
Switch_HDMITX_Bank(1) ; Switch_HDMITX_Bank(1) ;
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB00, (0x80+pHDRInfoFrame->info.Type)); HDMITX_WriteI2C_Byte(REG_TX_PKT_HB00, (0x80+pInfoFrame->info.Type));
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB01, pHDRInfoFrame->info.Ver); HDMITX_WriteI2C_Byte(REG_TX_PKT_HB01, pInfoFrame->info.Ver);
HDMITX_WriteI2C_Byte(REG_TX_PKT_HB02, pHDRInfoFrame->info.Len); 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]); HDMITX_WriteI2C_Byte(REG_TX_PKT_PB01+i, pInfoFrame->pktbyte.HDR_DB[i]);
ucData -= pHDRInfoFrame->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); HDMITX_WriteI2C_Byte(REG_TX_PKT_PB00, ucData);
Switch_HDMITX_Bank(0) ; Switch_HDMITX_Bank(0) ;

View File

@ -828,7 +828,7 @@ BOOL CheckHDMITX(BYTE *pHPD,BYTE *pHPDChange) ;
BOOL EnableHDCP(BYTE bEnable) ; BOOL EnableHDCP(BYTE bEnable) ;
BOOL EnableAVIInfoFrame(BYTE bEnable,BYTE *pAVIInfoFrame); BOOL EnableAVIInfoFrame(BYTE bEnable,BYTE *pAVIInfoFrame);
BOOL EnableAudioInfoFrame(BYTE bEnable,BYTE *pAudioInfoFrame); 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) ; // BOOL EnableVideoOutputIndirect(BYTE xCnt,BYTE inputColorMode,BYTE outputColorMode,BYTE bHDMI) ;
void SetAVMute(BYTE bEnable) ; void SetAVMute(BYTE bEnable) ;
void SetOutputColorDepthPhase(BYTE ColorDepth,BYTE bPhase) ; void SetOutputColorDepthPhase(BYTE ColorDepth,BYTE bPhase) ;

View File

@ -252,6 +252,33 @@ typedef union _AVI_InfoFrame
} pktbyte ; } pktbyte ;
} AVI_InfoFrame ; } 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 { typedef union _Audio_InfoFrame {
struct { struct {