Пример #1
0
//------------------------------------------------------------------------------
// Function Name: SiI_918x_Start
// Function Description: Intilize Stream Switch Device
// CEC Software Connection #1
//------------------------------------------------------------------------------
//void SiI_918x_Start( void )
void CEC_Init( void )
{

//  uint8_t cec_phyAddr[2];
#if(CONF__CEC_ENABLE == ENABLE)


    DEBUG_PRINT(("\nStream switch start\n"));
  //CEC workaround for ES0
    GPIO_ClearCecD();
    RegisterModify(REG__CEC_CONFIG_CPI,BIT__CEC_PASS_THROUGH,CLEAR);
    if((RegisterRead(DEV_REV_RX)& 0x0F)==VAL__REV_1_2) //if rev1.2 CEC by default reset
		RegisterModify(REG__C0_SRST2, BIT__CEC_SRST, SET); //0 is reset, 1 is normal
    else
		RegisterBitToggle(REG__C0_SRST2,BIT__CEC_SRST);


    RegisterWrite(REG__SLAVE_ADDR_EDID,CONF__I2C_SLAVE_PAGE_9);
    RegisterWrite(REG__SLAVE_ADDR_CEC,CONF__I2C_SLAVE_PAGE_8);


      // Set CEC device type = TV and logical address to capture.
     InitiatorAddress = CEC_LOGADDR_UNREGORBC_MSG ;
     if( CEC_CAPTURE_ID_Set( InitiatorAddress ) )
          {
              DEBUG_PRINT(("\n Cannot init CEC"));
          }
	
	  //
	  // 4. Initialize Event Descriptor
	  //
	  CEC_event_descriptor_clear();
	
	  // Enumirate as an TV
	  bCECTask  = SiI_CEC_Enumiration;
	  bEnumType = SiI_EnumTV;

#endif  // #if(CONF__CEC_ENABLE == ENABLE)

      //====================
      // 5. Program EDID and set port specific address space.
      //    Program (a) EDID and (b) Physical address
      //====================

      ProgramEDID();

}
Пример #2
0
static void ConfigureDeepColor(void)
{
    uint8_t abDcCtlVal1x[] = { VAL__DC_CTL_8BPP_1X, VAL__DC_CTL_10BPP_1X, VAL__DC_CTL_12BPP_1X, 0 };
    uint8_t abDcCtlVal2x[] = { VAL__DC_CTL_8BPP_2X, VAL__DC_CTL_10BPP_2X, VAL__DC_CTL_12BPP_2X, 0 };
    uint8_t bColorDepth;
    uint8_t bDcCtlValue;
    uint8_t vStatus;

    bColorDepth = RegisterRead(REG__DC_STAT) & MSK__PIXEL_DEPTH;


    if (bColorDepth != CurrentStatus.ColorDepth)
    {
        if(CurrentStatus.VideoState == STATE_VIDEO__ON)
            vStatus = ON;
        CurrentStatus.ColorDepth = bColorDepth;

        if(vStatus == ON)
            TurnVideoMute(ON);

        //value is 2x if muxYC output is enabled
        if (RegisterRead(REG__VID_AOF) & BIT__MUXYC)
        {
            bDcCtlValue = abDcCtlVal2x[ bColorDepth ];
        }
        else
        {
            bDcCtlValue = abDcCtlVal1x[ bColorDepth ];
        }
        RegisterModify(REG__TMDS_CCTRL2, MSK__DC_CTL, bDcCtlValue);
        RegisterBitToggle(REG__SRST2, BIT__DCFIFO_RST);  //reset the deep color FIFO

        DEBUG_PRINT(("DC stat=%02X ctl=%02X\n", (int)bColorDepth, (int)bDcCtlValue));

        if(vStatus == ON)
            TurnVideoMute(OFF);
    }
}
Пример #3
0
//------------------------------------------------------------------------------
// Function: AudioUnmuteHandler
// Description: State machine for performing audio unmute in firmware.
//------------------------------------------------------------------------------
void AudioUnmuteHandler(void)
{
    uint8_t bIntrStatus2;
    uint8_t bIntrStatus4;

    RegisterModify(REG__ECC_CTRL, BIT__CAPCNT, SET);        //clear the error cont
    switch (CurrentStatus.AudioState)
    {
        case STATE_AUDIO__REQUEST_AUDIO:
        {
            bIntrStatus2 = RegisterRead(REG__INTR2);
            bIntrStatus4 = RegisterRead(REG__INTR4);

            if ((bIntrStatus2 & BIT__GOTAUD) && (bIntrStatus2 & BIT__GOTCTS))        //audio stable
            {
                if(bIntrStatus4 & MSK__CTS_ERROR)
                    // reset ACR
                    RegisterBitToggle(REG__SRST, BIT__ACRRST);
                else
                {
                    // init ACR
                    RegisterWrite(REG__ACR_CTRL1, BIT__ACR_INIT);

                    DEBUG_PRINT(("aud rdy\n"));

                    SetUpAudioOutput();
                    CurrentStatus.AudioState = STATE_AUDIO__AUDIO_READY;
                }
            }


                // clear all the audio interrupts
                RegisterWrite(REG__INTR2, (BIT__GOTAUD    | BIT__GOTCTS));
                RegisterWrite(REG__INTR4, (MSK__CTS_ERROR | MSK__FIFO_ERROR));

                TIMER_Set(TIMER__AUDIO, 20);  // delay 20ms before request audio again

        }
        break;

        case STATE_AUDIO__AUDIO_READY:
        {
            bIntrStatus4 = RegisterRead(REG__INTR4);
            if(bIntrStatus4 & MSK__CTS_ERROR)
                CurrentStatus.AudioState = STATE_AUDIO__REQUEST_AUDIO;

            else if (!(bIntrStatus4 & MSK__FIFO_ERROR))      // no audio FIFO error
            {
                if ((CurrentStatus.VideoState == STATE_VIDEO__ON)
                    ||(CurrentStatus.VideoState == STATE_VIDEO__CHECKED))
                    //||ResetVideoControl())//video unmute status ok
                {
                    if(CurrentStatus.AudioMode==AUDIO_MODE__DSD)
                        HAL_SetAudioDACMode(AUDIO_MODE__DSD);
                    else
                        HAL_SetAudioDACMode(AUDIO_MODE__PCM);

                    RegisterWrite(REG__INTR5, MSK__AUDIO_INTR);// clear all audio interrupts
                    CurrentStatus.AudioState = STATE_AUDIO__ON;
                    TurnAudioMute(OFF);
                }
            }
            else
            {
                // reset audio FIFO
                RegisterBitToggle(REG__SRST, BIT__FIFORST);

                // clear audio FIFO interrupts
                RegisterWrite(REG__INTR4, MSK__FIFO_ERROR);

                TIMER_Set(TIMER__AUDIO, 20);  // delay 20ms before ready audio again
            }
        }
    }
}