AnsweredAssumed Answered

ADV7513 0x41 bit6 come back to 1 after initialization

Question asked by justin.sun730@gmail.com on Jul 4, 2016
Latest reply on Jul 5, 2016 by justin.sun730@gmail.com

We found ADV7513 has no HDMI output signals when power up or plug and unplug occasionally.

And finally we found that reg. 0x41 bit 6 comes back to 1 when the HDMI has no output.

At this situation, the HPD detection is normal, and we set reg 0x41 bit 6 to 0 manully, the HDMI output is come back to ok.

 

We drive the ADV7513 according to ADV7513 Programming Guide, and the initialization code is attached below:

and we can find reg 0x41 bit 6 comes back to 1 after " I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x98, 0x03);" or later when HDMI has no output.

 

What wrong is this problem?

 

-------------------------------------------------------------------------------------------------------------------------------------

void adv7513_init(u8 channel)
{
u8 Temp=0,Temp1;
I2CM_byte_read(0, ADV7513_I2C_ADDR, ADV7513_REG_CHIP_REVISION, &Temp);  /* 0x13 */
if(Temp==0x13)
{
I2CM_byte_write(0, ADV7513_I2C_ADDR, ADV7513_REG_POWER, 0x50);
msleep(10);
I2CM_byte_write(0, ADV7513_I2C_ADDR, ADV7513_REG_POWER, 0x10); /* 0x41 */
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x98, 0x03);
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x9a, 0xe0);
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x9c, 0x30);
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x9d, 0x61);
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0xa2, 0xa4);
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0xa3, 0xa4);
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0xe0, 0xd0);
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0xf9, 0x00); /* 0x00 */
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x55, 0x02);
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x15, ADV7513_INPUT_ID_24BIT_RGB444_YCbCr444); /* Input mode */
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x16, 0x30); /* Output mode RGB4:4:4 8bit Input style--Not Valid */
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x17, 0x02); /* Input video 16:9 */
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0x48, 0x10); /* left justified */
I2CM_byte_write(0, ADV7513_I2C_ADDR, 0xaf, 0x04); /* HDCP disabled, DVI mode */
//I2CM_byte_write(0, ADV7513_I2C_ADDR, 0xd0, 0x70); /* Invert Clock 默认0x30 */

 

I2CM_byte_write(0, ADV7513_I2C_ADDR, 0xe1, 0x66); /* CEC Memory Address is 0x78 与FPGA地址冲突,通过修改0xe1寄存器的值改变CEC的地址 */
printf("第%d片adv7513初始化完毕,Chip Revision:  0x%02x\r\n",channel+1, Temp);

 

I2CM_byte_write(0, ADV7513_I2C_ADDR, ADV7513_REG_POWER, 0x10);
I2CM_byte_read (0, ADV7513_I2C_ADDR, ADV7513_REG_POWER, &Temp1);
printf("配置0x41寄存器值:0x%02x.\r\n",Temp1);
printf("------------------------------------------------------\r\n");

 

}
else
{
printf("第%d片adv7513的Chip Revision读取失败.\r\n",channel+1);
}
}

Outcomes