__s32 hdmi_main_task_loop(void) { static __u32 times = 0; HPD = main_Hpd_Check(); if( 0 == HPD ) { if((hdmi_state > HDMI_State_Wait_Hpd) || (hdmi_state == HDMI_State_Idle)) { __inf("plugout\n"); hdmi_state = HDMI_State_Idle; video_on = 0; audio_on = 0; Hdmi_hpd_event(); } if((times++) >= 10) { times = 0; __inf("unplug state !!\n"); } } switch(hdmi_state) { case HDMI_State_Idle: __inf("HDMI_State_Idle\n"); bsp_hdmi_hrst(); bsp_hdmi_standby(); hdmi_state = HDMI_State_Wait_Hpd; case HDMI_State_Wait_Hpd: __inf("HDMI_State_Wait_Hpd\n"); //bsp_hdmi_init(); if(HPD) { hdmi_state = HDMI_State_EDID_Parse; __inf("plugin\n"); } else { return 0; } msleep(200); case HDMI_State_Rx_Sense: case HDMI_State_EDID_Parse: __inf("HDMI_State_EDID_Parse\n"); ParseEDID(); hdmi_state = HDMI_State_HPD_Done; Hdmi_hpd_event(); if(video_enable) set_video_enable(true); case HDMI_State_HPD_Done: //__inf("HDMI_State_HPD_Done\n"); if(video_on && hdcp_enable) bsp_hdmi_hdl(); return 0; default: __wrn(" unkonwn hdmi state, set to idle\n"); hdmi_state = HDMI_State_Idle; return 0; } }
__s32 hdmi_main_task_loop(void) { static __u32 times = 0; HPD = main_Hpd_Check(); if( !HPD ) { if((times++) >= 10) { times = 0; __inf("unplug state\n"); } if(hdmi_state > HDMI_State_Wait_Hpd) { __inf("plugout\n"); hdmi_state = HDMI_State_Wait_Hpd; Hdmi_hpd_event(); } } switch(hdmi_state) { case HDMI_State_Idle: hdmi_state = HDMI_State_Wait_Hpd; return 0; case HDMI_State_Wait_Hpd: if(HPD) { hdmi_state = HDMI_State_EDID_Parse; __inf("plugin\n"); }else { return 0; } case HDMI_State_Rx_Sense: case HDMI_State_EDID_Parse: HDMI_WUINT32(0x004,0x80000000); HDMI_WUINT32(0x208,(1<<31)+ (1<<30)+ (1<<29)+ (3<<27)+ (0<<26)+ (1<<25)+ (0<<24)+ (0<<23)+ (4<<20)+ (7<<17)+ (15<<12)+ (7<<8)+ (0x0f<<4)+(8<<0) ); HDMI_WUINT32(0x200,0xfe800000); //txen enable HDMI_WUINT32(0x204,0x00D8C850); //ckss = 1 HDMI_WUINT32(0x20c, 0 << 21); ParseEDID(); HDMI_RUINT32(0x5f0); hdmi_state = HDMI_State_Wait_Video_config; Hdmi_hpd_event(); case HDMI_State_Wait_Video_config: if(video_enable) { hdmi_state = HDMI_State_Video_config; }else { return 0; } case HDMI_State_Video_config: video_config(video_mode); hdmi_state = HDMI_State_Audio_config; case HDMI_State_Audio_config: audio_config(); hdmi_state = HDMI_State_Playback; case HDMI_State_Playback: return 0; default: __wrn(" unkonwn hdmi state, set to idle\n"); hdmi_state = HDMI_State_Idle; return 0; } }
__s32 hdmi_main_task_loop(void) { static __u32 times = 0; HPD = main_Hpd_Check(); if( !HPD ) { if((times++) >= 10) { times = 0; sunxi_hdcp_rst(); __inf("unplug state\n"); } if(hdmi_state > HDMI_State_Wait_Hpd) { __inf("plugout\n"); hdmi_state = HDMI_State_Wait_Hpd; sunxi_hdcp_rst(); Hdmi_hpd_event(); video_enter_lp(); } } if(hdmi_state > HDMI_State_Video_config) { if(hdcp_enable) sunxi_hdcp_hdl(); } switch(hdmi_state) { case HDMI_State_Idle: hdmi_state = HDMI_State_Wait_Hpd; case HDMI_State_Wait_Hpd: if(HPD) { hdmi_state = HDMI_State_EDID_Parse; __inf("plugin\n"); } else { return 0; } case HDMI_State_Rx_Sense: case HDMI_State_EDID_Parse: hdmi_state = HDMI_State_Wait_Video_config; ParseEDID(); Hdmi_hpd_event(); case HDMI_State_Wait_Video_config: if(video_enable) { hdmi_state = HDMI_State_Video_config; } else { return 0; } case HDMI_State_Video_config: sunxi_hdcp_rst(); video_config(video_mode); hdmi_state = HDMI_State_Audio_config; case HDMI_State_Audio_config: audio_config(); hdmi_state = HDMI_State_Playback; case HDMI_State_Playback: return 0; default: __wrn(" unkonwn hdmi state, set to idle\n"); hdmi_state = HDMI_State_Idle; return 0; } }
__s32 Hdmi_hal_get_HPD(void) { return main_Hpd_Check(); }