📄 dvhdmirxr8j66030ft.c
字号:
if (ret == HDMIDRV_OK) {
// 儈儔乕儗僕僗僞峏怴
gHdmiRxDrvR8J66030FTReg.GeneralControlReg2 = reg[1];
} else {
HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTSetVideoPath failed %d\n", ret);
}
return ret;
}
//*******************************************************************
//! @brief R8J66030FT 塮憸宱楬愝掕忣曬庢摼
//! @retval 張棟寢壥
//! @param VideoPath(O):塮憸宱楬愝掕張棟忣曬<BR>
//! @note 儈儔乕 GeneralControl儗僕僗僞2偺庢摼傪峴偆<BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/03/22
//*******************************************************************
IW _dvHdmiRxR8J66030FTGetVideoPath(UB * VideoPath)
{
// 儈儔乕儗僕僗僞偺GeneralControl儗僕僗僞2忣曬傪庢摼
*VideoPath = gHdmiRxDrvR8J66030FTReg.GeneralControlReg2;
return HDMIDRV_OK;
}
//*******************************************************************
//! @brief R8J66030FT 塮憸夝憸搙忣曬庢摼
//! @retval 張棟寢壥
//! @param HRes(O):悈暯夝憸搙<BR>
//! @param VRes(O):悅捈夝憸搙<BR>
//! @param Interlace(O):憖嶌曽幃<BR>
//! @note 僞僀儈儞僌儗僕僗僞偺撉崬傒傪峴偆<BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/03/22
//*******************************************************************
IW _dvHdmiRxR8J66030FTGetInputVideoRes(UH * HRes, UH * VRes, UB * Interlace)
{
IW ret = HDMIDRV_OK;
UB reg[13];
memset(reg, 0x00, sizeof(reg));
reg[0] = 0x3B;
// 僞僀儈儞僌 儗僕僗僞撉崬傒
ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
if (ret == HDMIDRV_OK) {
*HRes = ((UH)reg[1] << 8) + (UH)reg[0]; // 悈暯夝憸搙 //L4_Modify
*VRes = ((UH)reg[9] << 8) + (UH)reg[8]; // 悅捈夝憸搙 //L4_Modify
if (reg[12] & 0x80) {
*Interlace = 1; // 憖嶌曽幃 僀儞僞乕儗僗
} else {
*Interlace = 0; // 憖嶌曽幃 僾儘僌儗僢僔僽
}
// 儈儔乕儗僕僗僞峏怴
memcpy(&gHdmiRxDrvR8J66030FTReg.TimingReg, reg, sizeof(reg));
} else {
HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTGetInputVideoRes failed %d\n", ret);
}
return ret;
}
//*******************************************************************
//! @brief R8J66030FT 壒惡PLL愝掕張棟
//! @retval 張棟寢壥
//! @param UseCrystal(I):PLL庬暿<BR>
//! @note GeneralControl儗僕僗僞4(0x44)偺彂崬傒傪峴偆
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/07/31
//*******************************************************************
IW _dvHdmiRxSetR8J66030FTSetAudioCrystal(UB UseCrystal)
{
IW ret = HDMIDRV_OK;
UB reg[2];
// GeneralControl儗僕僗僞4愝掕
reg[0] = GENERAL_CONTROL_REG4_ADDR;
reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 & ~X_POT;
reg[1] |= UseCrystal;
// 儗僕僗僞彂崬傒
ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
if (ret == HDMIDRV_OK) {
// 儈儔乕儗僕僗僞峏怴
gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 = reg[1];
} else {
HdmiRxDrvErrCatch("_dvHdmiRxSetR8J66030FTSetAudioPath failed %d\n", ret);
return ret;
}
return ret;
}
/* #AUDIO_PLL ADD S 2007/11/01 Y.Takeuchi */
//*******************************************************************
//! @brief R8J66030FT 壒惡PLL愝掕張棟
//! @retval 張棟寢壥
//! @param UseCrystal(I):PLL庬暿<BR>
//! @note GeneralControl儗僕僗僞4(0x44)偺彂崬傒傪峴偆
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/07/31
//*******************************************************************
IW _dvHdmiRxSetR8J66030FTSetCTSAutoAdjustMode(UB Mode)
{
IW ret = HDMIDRV_OK;
UB reg[2];
// GeneralControl儗僕僗僞4愝掕
reg[0] = GENERAL_CONTROL_REG4_ADDR;
reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 & ~CTS_ADJ_DIS;
reg[1] |= Mode;
// 儗僕僗僞彂崬傒
ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
if (ret == HDMIDRV_OK) {
// 儈儔乕儗僕僗僞峏怴
gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 = reg[1];
} else {
HdmiRxDrvErrCatch("_dvHdmiRxSetR8J66030FTSetCTSAutoAdjustMode failed %d\n", ret);
return ret;
}
return ret;
}
/* #AUDIO_PLL ADD E 2007/11/01 Y.Takeuchi */
//*******************************************************************
//! @brief R8J66030FT 壒惡宱楬愝掕張棟
//! @retval 張棟寢壥
//! @param AudioPath1(I):宱楬愝掕張棟忣曬1<BR>
//! @param AudioPath2(I):宱楬愝掕張棟忣曬2<BR>
//! @note GeneralControl儗僕僗僞4(0x44)偺彂崬傒偲
//! GeneralControl儗僕僗僞5(0x45)偺彂崬傒傪峴偆
//! @attention X_OPT偲SF_MODE偺椉曽偑桳岠偱側偄偲僒儞僾儕儞僌廃攇悢
//! 偺愝掕偑 峴偊側偄偨傔杮娭悢偱偼X_POT偼忢偵桳岠
//! 働乕僽儖枹愙懕専弌帪摍偱X_POT傪柍岠偵偡傞応崌偼
//! _dvHdmiRxSetR8J66030FTSetAudioCrystal()傪幚峴偡傞偙偲
//! @author Y.Takeuchi
//! @date 07/03/22
//*******************************************************************
IW _dvHdmiRxSetR8J66030FTSetAudioPath(UB AudioPath1, UB AudioPath2)
{
IW ret = HDMIDRV_OK;
UB reg[2];
// GeneralControl儗僕僗僞4愝掕
reg[0] = GENERAL_CONTROL_REG4_ADDR;
/* #AUDIO_PLL CHG S 2007/11/01 Y.Takeuchi */
// 儈儔乕儗僕僗僞偐傜X_Opt CTS_ADJ_DIS偺抣傪庢摼
reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 & (X_POT | CTS_ADJ_DIS);
reg[1] |= AudioPath1 | SF_MODE;
/* #AUDIO_PLL CHG E 2007/11/01 Y.Takeuchi */
// 儗僕僗僞彂崬傒
ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
if (ret == HDMIDRV_OK) {
// 儈儔乕儗僕僗僞峏怴
gHdmiRxDrvR8J66030FTReg.GeneralControlReg4 = reg[1];
} else {
HdmiRxDrvErrCatch("_dvHdmiRxSetR8J66030FTSetAudioPath failed %d\n", ret);
return ret;
}
// 擮偺偨傔10ms懸偪
WAIT(IIC_WAIT_TIME);
// GeneralControl儗僕僗僞5愝掕
reg[0] = GENERAL_CONTROL_REG5_ADDR;
reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg5;
// MCLK_SEL價僢僩傪棊偲偡
reg[1] &= ~0x03;
// MCLK_SEL價僢僩傪愝掕
reg[1] |= AudioPath2;
// 儗僕僗僞彂崬傒
ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
if (ret == HDMIDRV_OK) {
// 儈儔乕儗僕僗僞峏怴
gHdmiRxDrvR8J66030FTReg.GeneralControlReg5 = reg[1];
} else {
HdmiRxDrvErrCatch("_dvHdmiRxSetR8J66030FTSetAudioPath failed %d\n", ret);
}
return ret;
}
//*******************************************************************
//! @brief R8J66030FT 壒惡宱楬愝掕忣曬庢摼
//! @retval 張棟寢壥
//! @param AudioPath1(O):宱楬愝掕張棟忣曬1<BR>
//! @param AudioPath2(O):宱楬愝掕張棟忣曬2<BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/03/22
//*******************************************************************
IW _dvHdmiRxR8J66030FTGetAudioPath(UB * AudioPath1, UB * AudioPath2)
{
IW ret = HDMIDRV_OK;
*AudioPath1 = gHdmiRxDrvR8J66030FTReg.GeneralControlReg4;
*AudioPath2 = gHdmiRxDrvR8J66030FTReg.GeneralControlReg5;
return ret;
}
//*******************************************************************
//! @brief R8J66030FT 壒惡怣崋僒儞僾儕儞僌廃攇悢偺庢摼
//! @retval 張棟寢壥
//! @param AudioPath1(O):宱楬愝掕張棟忣曬1<BR>
//! @note GeneralControl儗僕僗僞4(0x44)偺SF_R傪撉傒崬傓
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/04/18
//*******************************************************************
IW _dvHdmiRxR8J66030FTGetAudioSampleFreq(UB * SampleFreq)
{
IW ret = HDMIDRV_OK;
UB reg = GENERAL_CONTROL_REG4_ADDR;
*SampleFreq = 0xFF;
// General Control Reg4撉崬傒
ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), ®);
if (ret == HDMIDRV_OK) {
reg = reg & 0x07;
// Audio InfoFrame偺宍幃偵偁傢偣傞偨傔偵僀儞僋儕儊儞僩偟偰偍偔
// InfoFrame 32kHz:"1" General Control Reg4 32kHz:"0"
reg++;
*SampleFreq = reg;
}
return ret;
}
//*******************************************************************
//! @brief R8J66030FT SPDIF僠儍儞僱儖儗僕僗僞忣曬偺庢摼
//! @retval 張棟寢壥
//! @param Size(I)丗撉崬傒儗僕僗僞僒僀僘<BR>
//! @param OutParam(O)丗SPDIF僠儍儞僱儖儗僕僗僞忣曬<BR>
//! @note GeneralControl儗僕僗僞4(0x44)偺SF_R傪撉傒崬傓
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/04/18
//*******************************************************************
IW _dvHdmiRxR8J66030FTGetAudioChannelStsReg(UB Size, UB* OutReg)
{
IW ret;
UB reg[5];
reg[0] = 0x3E;
// SPDIF 僠儍儞僱儖 儗僕僗僞撉崬傒
ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, Size, reg);
if (ret == HDMIDRV_OK) {
// SPDIF 僠儍儞僱儖 儗僕僗僞忣曬奿擺
memcpy(OutReg, reg, Size);
}
return ret;
}
//*******************************************************************
//! @brief R8J66030FT AVMute愝掕張棟
//! @retval 張棟寢壥
//! @param AVMute(I):AVMute巜帵僼儔僌<BR>
//! @note GeneralControl儗僕僗僞3(0x43)偺彂崬傒傪峴偆
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/03/22
//*******************************************************************
IW _dvHdmiRxR8J66030FTSetAudioVideoMute(UB AVMute)
{
IW ret = HDMIDRV_OK;
UB reg[2] = {0, 0};
// AV Mute愝掕
// GeneralControl儗僕僗僞3 愝掕
reg[0] = GENERAL_CONTROL_REG3_ADDR;
reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg3;
// AVMute儗僕僗僞偺壓埵2bit傪棊偲偡
reg[1] &= AV_MUTE_MASK; // 0xFC;
// AVMute儗僕僗僞偺壓埵2bit愝掕
reg[1] |= AVMute;
// 儗僕僗僞彂崬傒
ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
if (ret == HDMIDRV_OK) {
// 儈儔乕儗僕僗僞峏怴
gHdmiRxDrvR8J66030FTReg.GeneralControlReg3 = reg[1];
} else {
HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTSetAudioVideoMute failed %d\n", ret);
return ret;
}
return ret;
}
//*******************************************************************
//! @brief R8J66030FT AVMute忣曬庢摼張棟
//! @retval 張棟寢壥
//! @param AV Mute(O):AV Mute巜帵僼儔僌<BR>
//! @note 儈儔乕 GeneralControl儗僕僗僞3(0x43)偺庢摼傪峴偆
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/03/22
//*******************************************************************
IW _dvHdmiRxR8J66030FTGetAudioVideoMute(UB * AVMute)
{
IW ret = HDMIDRV_OK;
* AVMute = gHdmiRxDrvR8J66030FTReg.GeneralControlReg3;
return ret;
}
/* #HDCP_RESET ADD S 2007/11/07 Y.Takeuchi */
//*******************************************************************
//! @brief R8J66030FT HDCP Bcap 儕僙僢僩
//! @retval 張棟寢壥
//! @param void<BR>
//! @note 0x30 Bcap/Bstatus reg 偺弶婜壔傪峴偆
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/11/07
//*******************************************************************
IW _dvHdmiRxR8J66030FTHdcpBcapReset(void)
{
IW ret = HDMIDRV_OK;
UB w_reg[4] = {0x30, 0x91, 0x00, 0x00};
UB r_reg[3] = {0x30, 0x00, 0x00};
// 儗僕僗僞彂崬傒
ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(w_reg), w_reg);
if (ret != HDMIDRV_OK) {
HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTHdcpBcapReset failed %d\n", ret);
return ret;
}
// 擮偺偨傔10ms懸偪
WAIT(IIC_WAIT_TIME);
// 儗僕僗僞撉傒崬傒
ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(r_reg), r_reg);
#if 0
// 彂崬傒僨乕僞偲撉傒崬傒僨乕僞偺堦抳傪妋擣
if (memcmp(r_reg, &w_reg[1], sizeof(r_reg))) {
HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTHdcpBcapReset write failed \n");
}
#endif
return ret;
}
//*******************************************************************
//! @brief R8J66030FT HDCP KSV 儕僙僢僩
//! @retval 張棟寢壥
//! @param void<BR>
//! @note 0x32 乣 0x33 KSV[0 - 7] reg 偺弶婜壔傪峴偆
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/11/07
//*******************************************************************
IW _dvHdmiRxR8J66030FTHdcpKSVReset(void)
{
IW ret = HDMIDRV_OK;
UB w_reg[6];
UB r_reg[5];
UB i;
for (i=0; i<8; i++) {
memset(w_reg, 0x00, sizeof(w_reg));
w_reg[0] = i + 0x32;
// 儗僕僗僞彂崬傒
ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(w_reg), w_reg);
if (ret != HDMIDRV_OK) {
HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTHdcpKSVReset failed %d\n", ret);
return ret;
}
// 擮偺偨傔10ms懸偪
WAIT(IIC_WAIT_TIME);
memset(r_reg, 0x00, sizeof(r_reg));
r_reg[0] = i + 0x32;
// 儗僕僗僞撉傒崬傒
ret = _HdmiRxDrvRegRead(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(r_reg), r_reg);
if (memcmp(r_reg, &w_reg[1], sizeof(r_reg))) {
HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTHdcpKSVReset write failed \n");
}
// 擮偺偨傔10ms懸偪
WAIT(IIC_WAIT_TIME);
}
return ret;
}
/* #HDCP_RESET ADD E 2007/11/07 Y.Takeuchi */
//L4_Add
//*******************************************************************
//! @brief R8J66030FT TMDS Sampling Logic Control Parameters愝掕張棟
//! @retval 張棟寢壥
//! @param Param(I):TMDS Sampling Logic Control Parameters<BR>
//! @note GeneralControl儗僕僗僞8(0x48)偺彂崬傒傪峴偆
//! @attention <BR>
//! @author
//! @date
//*******************************************************************
IW _dvHdmiRxR8J66030FTSetTMDSCtrl(UB Param)
{
IW ret = HDMIDRV_OK;
UB reg[2] = {0, 0};
// TMDS_SAMP愝掕
// GeneralControl儗僕僗僞8 愝掕
reg[0] = GENERAL_CONTROL_REG8_ADDR;
reg[1] = gHdmiRxDrvR8J66030FTReg.GeneralControlReg8;
// TMDS_SAMP儗僕僗僞偺4bit傪棊偲偡
reg[1] &= TMDS_SAMP_MASK; // 0xC3;
// TMDS_SAMP儗僕僗僞偺4bit愝掕
reg[1] |= Param;
// 儗僕僗僞彂崬傒
ret = _HdmiRxDrvRegWrite(DV_HDMIRX_DEF_SLAVE_ADDR, sizeof(reg), reg);
if (ret == HDMIDRV_OK) {
// 儈儔乕儗僕僗僞峏怴
gHdmiRxDrvR8J66030FTReg.GeneralControlReg8 = reg[1];
} else {
HdmiRxDrvErrCatch("_dvHdmiRxR8J66030FTSetTMDSCtrl failed %d\n", ret);
return ret;
}
return ret;
}
//L4_Add
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -