__s32 Hdmi_hal_set_audio_para(hdmi_audio_t * audio_para) { __u32 update_flag; __inf("Hdmi_hal_set_audio_para\n"); if(!audio_para) return -1; __inf("sample_bit:%d in Hdmi_hal_set_audio_para, audio_para->sample_bit:%d\n", audio_parameter.sample_bit, audio_para->sample_bit); if(audio_para->sample_bit != audio_parameter.sample_bit) { audio_parameter.sample_bit = audio_para->sample_bit; update_flag = 1; __inf("sample_bit:%d in Hdmi_hal_set_audio_para\n", audio_parameter.sample_bit); } if(audio_para->sample_rate != audio_parameter.sample_rate) { audio_parameter.sample_rate = audio_para->sample_rate; update_flag = 1; __inf("sample_rate:%d in Hdmi_hal_set_audio_para\n", audio_parameter.sample_rate); } if(audio_para->channel_num != audio_parameter.ch_num) { audio_parameter.ch_num = audio_para->channel_num; update_flag = 1; __inf("channel_num:%d in Hdmi_hal_set_audio_para\n", audio_parameter.ch_num); } if(audio_para->data_raw != audio_parameter.type) { audio_parameter.type = audio_para->data_raw; update_flag = 1; __inf("data_raw:%d in Hdmi_hal_set_audio_para\n", audio_parameter.type); } if(audio_para->ca != audio_parameter.ca) { audio_parameter.ca = audio_para->ca; update_flag = 1; __inf("ca:%d in Hdmi_hal_set_audio_para\n", audio_parameter.ca); } if(update_flag == 1) audio_config(&audio_parameter); 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; } }