📄 proviewdtv_tda9975.c
字号:
videoin |= VIDEO_INPUT_AVI2;
}
if((vai_flag[0] & 0x04) == 0x04
|| (vai_flag[0] & 0x02) == 0x02
|| (vai_flag[0] & 0x01) == 0x01)
{
videoin |= VIDEO_INPUT_AVI1;
}
if((vai_flag[1] & 0x04) == 0x04
|| (vai_flag[1] & 0x02) == 0x02
|| (vai_flag[1] & 0x01) == 0x01)
{
videoin |= VIDEO_INPUT_AVI3;
}
}
/*judge the HDMI clock is detected*/
//if((vai_flag[3] & 0x20) == 0x20)
{
if((vai_flag[3] & 0x40) == 0x40)
{
videoin |= VIDEO_INPUT_HDMIA;
}
if((vai_flag[3] & 0x80) == 0x80)
{
videoin |= VIDEO_INPUT_HDMIB;
}
}
return videoin;
}
int TDA9975_VideoInFormatCheck(void)
{
unsigned char Check_Video_Buffer[5];
unsigned int STM_VS;
unsigned int STM_HS;
unsigned int STM_HW;
unsigned char i;
int videoin_format = VIDEO_INPUT_INVALID;
int ret = -1;
TDA9975_AVIPage();
/* Read Sync Timing Measurement registers */
ret = I2C_Read_TDA9975(V_PER_MSB, &Check_Video_Buffer[0], 1);
ret |= I2C_Read_TDA9975(V_PER_ISB, &Check_Video_Buffer[1], 1);
ret |= I2C_Read_TDA9975(H_PER_MSB, &Check_Video_Buffer[2], 1);
ret |= I2C_Read_TDA9975(HS_WIDTH_MSB, &Check_Video_Buffer[3], 1);
ret |= I2C_Read_TDA9975(STM_LSB, &Check_Video_Buffer[4], 1);
if(ret != 0)
{
return VIDEO_INPUT_INVALID;
}
//STM_VS = (Check_Video_Buffer[0] * 4096) + Check_Video_Buffer[1] * 16 + ((Check_Video_Buffer[4] & 0xF0) / 16);
STM_VS = (Check_Video_Buffer[0] * 256) + Check_Video_Buffer[1];
STM_HS = (Check_Video_Buffer[2] * 4) + ((Check_Video_Buffer[4] & 0x0C) / 4);
STM_HW = (Check_Video_Buffer[3] * 4) + (Check_Video_Buffer[4] & 0x03);
g_videoinfmtreg[0] = Check_Video_Buffer[0];
g_videoinfmtreg[1] = Check_Video_Buffer[1];
g_videoinfmtreg[2] = Check_Video_Buffer[2];
g_videoinfmtreg[3] = Check_Video_Buffer[3];
g_videoinfmtreg[4] = Check_Video_Buffer[4];
for(i = 0 ; i < VIDEO_NB ; i++)
{
if(TDA9975_Delta(TDA9975_VIDEOTIMINGS[i][0] , STM_VS) < VIDEO_VS_DELTA)
{
if(TDA9975_Delta(TDA9975_VIDEOTIMINGS[i][1] , STM_HS) < VIDEO_HS_DELTA)
{
//if(TDA9975_Delta(TDA9975_VIDEOTIMINGS[i][2] , STM_HW) < VIDEO_HW_DELTA)
{
videoin_format = i;
}
}
}
}
/*Avoiding compile warning*/
STM_HW++;
return videoin_format;
}
int TDA9975_AudioInFormatCheck(void)
{
unsigned char Check_Audio_Buffer[6];
unsigned long ACRP_N;
unsigned long ACRP_CTS;
unsigned char i;
int audioin = AUDIO_INPUT_INVALID;
int ret = -1;
TDA9975_HDMIPage() ;
ret = I2C_Read_TDA9975(ACRP_CTS_LSB, &Check_Audio_Buffer[0], 1);
ret |= I2C_Read_TDA9975(ACRP_CTS_ISB, &Check_Audio_Buffer[1], 1);
ret |= I2C_Read_TDA9975(ACRP_CTS_MSB, &Check_Audio_Buffer[2], 1);
ret |= I2C_Read_TDA9975(ACRP_N_LSB, &Check_Audio_Buffer[3], 1);
ret |= I2C_Read_TDA9975(ACRP_N_ISB, &Check_Audio_Buffer[4], 1);
ret |= I2C_Read_TDA9975(ACRP_N_MSB, &Check_Audio_Buffer[5], 1);
if(ret != 0)
{
return AUDIO_INPUT_INVALID;
}
ACRP_CTS = (Check_Audio_Buffer[2] * 65536) + (Check_Audio_Buffer[1] * 256) + Check_Audio_Buffer[0] ;
ACRP_N = (Check_Audio_Buffer[5] * 65536) + (Check_Audio_Buffer[4] * 256) + Check_Audio_Buffer[3] ;
for(i = 0; i < AUDIO_NB; i++)
{
if(TDA9975_Delta(TDA9975_AUDIOTIMINGS[i][0], ACRP_N) < AUDIO_N_DELTA)
{
audioin = i;
}
else if(TDA9975_Delta(TDA9975_AUDIOTIMINGS[i][1], ACRP_N) < AUDIO_N_DELTA)
{
audioin = i;
}
else
{
if(TDA9975_Delta(TDA9975_AUDIOTIMINGS[i][2], ACRP_N) < AUDIO_N_DELTA)
{
if(TDA9975_Delta(TDA9975_AUDIOTIMINGS[i][3], ACRP_CTS) < AUDIO_CTS_DELTA)
{
audioin = i;
}
}
}
}
return audioin;
}
int TDA9975_HDMIInCheck(void)
{
unsigned char buffer;
TDA9975_HDMIPage();
if(I2C_Read_TDA9975(0x20, &buffer, 1) == 0)
{
if((buffer & 0x40) == 0x40)
{
return TDA9975_SOURCE_HDMI;
}
else
{
return TDA9975_SOURCE_DVI;
}
}
return TDA9975_SOURCE_BUTT;
}
unsigned char TDA9975_HDMICheckPixelRepeat(void)
{
unsigned char pixel_repeat = 0;
unsigned char buffer[2];
TDA9975_HDMIPage();
I2C_Read_TDA9975(0x80, &buffer[0], 1);
I2C_Read_TDA9975(0x88, &buffer[1], 1);
if(buffer[0] == 0x82) /* Check valid AVI infoframe type */
{
pixel_repeat = buffer[1];
}
else
{
pixel_repeat = 0;
}
return pixel_repeat;
}
unsigned char TDA9975_HDMICheckAVIVIC(void)
{
unsigned char avi_vic = 0;
unsigned char buffer[2];
TDA9975_HDMIPage();
I2C_Read_TDA9975(0x80, &buffer[0], 1);
I2C_Read_TDA9975(0x87, &buffer[1], 1);
if(buffer[0] == 0x82) /* Check valid AVI infoframe type */
{
avi_vic = buffer[1];
}
else
{
avi_vic = 0;
}
return avi_vic;
}
unsigned char TDA9975_HDMICheckRGBorYCbCr(void)
{
unsigned char pixel_encoding = 0;
unsigned char buffer[2];
TDA9975_HDMIPage();
I2C_Read_TDA9975(0x80, &buffer[0], 1);
I2C_Read_TDA9975(0x84, &buffer[1], 1);
if(buffer[0] == 0x82) /* Check valid AVI infoframe type */
{
pixel_encoding = ((buffer[1] & 0x60) >> 5);
}
else
{
pixel_encoding = 0 ;
}
if(pixel_encoding)
{
return TDA9975_HDMI_IN_YCbCr; /* YCbCr pixel encoding */
}
else
{
return TDA9975_HDMI_IN_RGB; /* RGB pixel encoding */
}
}
int TDA9975_HDMICheck444Or422(void)
{
unsigned char pixel_encoding = 0;
unsigned char buffer[2];
TDA9975_HDMIPage();
I2C_Read_TDA9975(0x80, &buffer[0], 1);
I2C_Read_TDA9975(0x84, &buffer[1], 1);
if(buffer[0] == 0x82) /* Check valid AVI infoframe type */
{
pixel_encoding = ((buffer[1] & 0x60) >> 5);
}
else
{
pixel_encoding = 0 ;
}
if(pixel_encoding)
{
if(pixel_encoding == 0x01)
{
return 1; /* YCbCr4:2:2 pixel encoding */
}
else if(pixel_encoding == 0x02)
{
return 0; /* YCbCr4:4:4 pixel encoding */
}
else
{
return 1;
}
}
else
{
return 0; /* RGB pixel encoding */
}
}
void TDA9975_AVIInputSelect(int aviin)
{
unsigned char buffer[2];
buffer[0] = 0x01;
if(aviin == VIDEO_INPUT_AVI1)
{
buffer[1] = 0x00;
}
else if(aviin == VIDEO_INPUT_AVI2)
{
buffer[1] = 0x01;
}
else if(aviin == VIDEO_INPUT_AVI3)
{
buffer[1] = 0x02;
}
else
{
return;
}
TDA9975_AVIPage();
I2C_Write_TDA9975(buffer, 2);
}
void TDA9975_HDMIInputSelect(int hdmiin)
{
unsigned char buffer[2];
TDA9975_AVIPage();
//buffer[0] = 0x10; buffer[0] = 0xC0;
//I2C_Write_TDA9975(buffer, 2);
buffer[0] = 0x01;
if(hdmiin == VIDEO_INPUT_HDMIA)
{
buffer[1] = 0x2F;
}
else if(hdmiin == VIDEO_INPUT_HDMIB)
{
buffer[1] = 0x27;
}
else
{
return;
}
I2C_Write_TDA9975(buffer, 2);
}
void TDA9975_ResetHDMI(void)
{
unsigned char buffer[2];
TDA9975_HDMIPage();
buffer[0] = 0xF7;
buffer[1] = 0x01;
I2C_Write_TDA9975(buffer, 2);
buffer[1] = 0x00;
I2C_Write_TDA9975(buffer, 2);
}
void TDA9975_PixelClockGenerator(int videoin,
E_TDA9975_OUT_FORAMT outformat)
{
unsigned char buffer[2];
if(videoin != VIDEO_INPUT_AVI1
&& videoin != VIDEO_INPUT_AVI2
&& videoin != VIDEO_INPUT_AVI3
&& videoin != VIDEO_INPUT_HDMIA
&& videoin != VIDEO_INPUT_HDMIB)
{
return;
}
if(outformat >= TDA9975_OUT_FORAMT_BUTT)
{
return;
}
buffer[0] = 0x17;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -