__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_core_initial(void) { if(0 != sw_init_flag) { hdmi_state = HDMI_State_Playback; } else { hdmi_state = HDMI_State_Idle; video_mode = HDMI720P_50; } memset(&audio_info,0,sizeof(HDMI_AUDIO_INFO)); memset(Device_Support_VIC,0,sizeof(Device_Support_VIC)); sunxi_set_reg_base(0xf0000000); api_set_func(hdmi_delay_us); if(0 != sw_init_flag) { ParseEDID(); Hdmi_hpd_event(); } else { video_enter_lp(); } audio_info.data_raw = 1; /* default pcm */ return 0; }
__s32 Hdmi_early_suspend(void) { pr_info("[HDMI]Hdmi_early_suspend\n"); if(hdmi_used) { Hdmi_hpd_event(0); b_hdmi_suspend = 1; } return 0; }
__s32 hdmi_core_initial(bool sw_only) { memset(&audio_info,0,sizeof(HDMI_AUDIO_INFO)); mutex_init(&hdmi_lock); api_set_func(hdmi_delay_us); hdmi_para_init(); if(sw_only) { video_enable = 1; hdmi_state = HDMI_State_HPD_Done; if(bsp_hdmi_get_hpd()) { ParseEDID(); video_on = 1; Hdmi_hpd_event(); } } else { bsp_hdmi_init(); } 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_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; } }