void cat66121_InterruptClr(void)
{
	char intclr3,intdata4;
	intdata4= HDMITX_ReadI2C_Byte(0xEE);
	HDMITX_DEBUG_PRINTF(("REG_TX_INT_STAT4=%x \n",intdata4));
	intclr3 = (HDMITX_ReadI2C_Byte(REG_TX_SYS_STATUS))|B_TX_CLR_AUD_CTS | B_TX_INTACTDONE ;
	if( intdata4 )
	{
		HDMITX_WriteI2C_Byte(0xEE,intdata4); // clear ext interrupt ;
		HDMITX_DEBUG_PRINTF(("%s%s%s%s%s%s%s\n",
					(intdata4&0x40)?"video parameter change \n":"",
					(intdata4&0x20)?"HDCP Pj check done \n":"",
					(intdata4&0x10)?"HDCP Ri check done \n":"",
					(intdata4&0x8)? "DDC bus hang \n":"",
					(intdata4&0x4)? "Video input FIFO auto reset \n":"",
					(intdata4&0x2)? "No audio input interrupt  \n":"",
					(intdata4&0x1)? "Audio decode error interrupt \n":""));
	}
	
	HDMITX_WriteI2C_Byte(REG_TX_INT_CLR0,0xFF);
	HDMITX_WriteI2C_Byte(REG_TX_INT_CLR1,0xFF);
	HDMITX_WriteI2C_Byte(REG_TX_SYS_STATUS,intclr3); // clear interrupt.
	intclr3 &= ~(B_TX_INTACTDONE);
	HDMITX_WriteI2C_Byte(REG_TX_SYS_STATUS,intclr3); // INTACTDONE reset to zero.
}
Пример #2
0
SYS_STATUS HDMITX_SetI2C_Byte(BYTE Reg,BYTE Mask,BYTE Value)
{
	BYTE Temp;
	if( Mask != 0xFF )
	{
		Temp=HDMITX_ReadI2C_Byte(Reg);
		Temp&=(~Mask);
		Temp|=Value&Mask;
	}
	else
	{
		Temp=Value;
	}
	return HDMITX_WriteI2C_Byte(Reg,Temp);
}
Пример #3
0
LONG CalcPCLK()
{
	BYTE uc, div ;
	int i ;
	long sum , count, PCLK   ;

	Switch_HDMITX_Bank(0);
	uc = HDMITX_ReadI2C_Byte(0x5F) & 0x80 ;

	if( ! uc )
	{
	    return 0 ;
	}
    // InitCEC();
    // // uc = CEC_ReadI2C_Byte(0x09) & 0xFE ;
    // CEC_WriteI2C_Byte(0x09, 1);
    // delay1ms(100);
    // CEC_WriteI2C_Byte(0x09, 0);
    // RCLK = CEC_ReadI2C_Byte(0x47);
    // RCLK <<= 8 ;
    // RCLK |= CEC_ReadI2C_Byte(0x46);
    // RCLK <<= 8 ;
    // RCLK |= CEC_ReadI2C_Byte(0x45);
    // DisableCEC();
    // // RCLK *= 160 ; // RCLK /= 100 ;
    // // RCLK in KHz.

	HDMITX_SetI2C_Byte(0xD7, 0xF0, 0x80);
	delay1ms(1);
	HDMITX_SetI2C_Byte(0xD7, 0x80, 0x00);

	count = HDMITX_ReadI2C_Byte(0xD7) & 0xF ;
	count <<= 8 ;
	count |= HDMITX_ReadI2C_Byte(0xD8);

	for( div = 7 ; div > 0 ; div-- )
	{
	    // printf("div = %d\n",(int)div) ;
		if(count < (1<<(11-div)) )
		{
			break ;
		}
	}
	HDMITX_SetI2C_Byte(0xD7, 0x70, div<<4);

    uc = HDMITX_ReadI2C_Byte(0xD7) & 0x7F ;
	for( i = 0 , sum = 0 ; i < 100 ; i ++ )
	{
		HDMITX_WriteI2C_Byte(0xD7, uc|0x80) ;
		delay1ms(1);
		HDMITX_WriteI2C_Byte(0xD7, uc) ;

		count = HDMITX_ReadI2C_Byte(0xD7) & 0xF ;
		count <<= 8 ;
		count |= HDMITX_ReadI2C_Byte(0xD8);
		sum += count ;
	}
	sum /= 100 ; count = sum ;

    HDMITX_DEBUG_PRINTF1(("RCLK(in GetPCLK) = %ld\n",hdmiTxDev[0].RCLK));
	HDMITX_DEBUG_PRINTF1(("div = %d, count = %d\n",(int)div,(int)count) );
	HDMITX_DEBUG_PRINTF1(("count = %ld\n",count) );

	PCLK = hdmiTxDev[0].RCLK * 128 / count * 16 ;
	PCLK *= (1<<div);

	if( HDMITX_ReadI2C_Byte(0x70) & 0x10 )
	{
		PCLK /= 2 ;
	}

	HDMITX_DEBUG_PRINTF1(("PCLK = %ld\n",PCLK) );
	return PCLK ;
}