static int #else static void #endif hdmi_task_handle(void *data) { extern void hdmitx_edid_ram_buffer_clear(hdmitx_dev_t*); hdmitx_dev_t* hdmitx_device = (hdmitx_dev_t*)data; hdmitx_init_parameters(&hdmitx_device->hdmi_info); HDMITX_M1B_Init(hdmitx_device); //When init hdmi, clear the hdmitx module edid ram and edid buffer. hdmitx_edid_ram_buffer_clear(hdmitx_device); hdmitx_device->HWOp.SetupIRQ(hdmitx_device); if(hdmitx_device->HWOp.Cntl){ if(init_flag&INIT_FLAG_VDACOFF){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_VDAC_OFF, 0); } if(init_powermode&0x80){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_POWERMODE_SWITCH, init_powermode&0x1f); } } if(init_flag&INIT_FLAG_POWERDOWN){ hdmitx_device->HWOp.SetDispMode(NULL); //power down hdmitx_device->unplug_powerdown=1; if(hdmitx_device->HWOp.Cntl){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_TURNOFF_HDMIHW, (hpdmode!=0)?1:0); } } else{ if(hdmitx_device->HWOp.Cntl){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_MUX_HPD, 0); } } HDMI_DEBUG(); while (hdmitx_device->hpd_event != 0xff) { if((hdmitx_device->vic_count == 0)&&(hdmitx_device->mux_hpd_if_pin_high_flag)){ if(hdmitx_device->HWOp.Cntl){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_MUX_HPD_IF_PIN_HIGH, 0); } } if((!hdmi_audio_off_flag)&&(hdmitx_device->audio_param_update_flag)&& ((hdmitx_device->cur_VIC != HDMI_Unkown)||(hdmitx_device->force_audio_flag))){ hdmitx_set_audio(hdmitx_device, &(hdmitx_device->cur_audio_param)); hdmitx_device->audio_param_update_flag = 0; hdmi_print(1, "HDMI: set audio param\n"); } if (hdmitx_device->hpd_event == 1) { if(hdmitx_device->HWOp.GetEDIDData(hdmitx_device)){ hdmi_print(1,"HDMI: EDID Ready\n"); hdmitx_edid_clear(hdmitx_device); hdmitx_edid_parse(hdmitx_device); cec_node_init(hdmitx_device); set_disp_mode_auto(); switch_set_state(&sdev, 1); hdmitx_device->hpd_event = 0; } hdmitx_device->hpd_state = 1; } else if(hdmitx_device->hpd_event == 2) { //When unplug hdmi, clear the hdmitx module edid ram and edid buffer. hdmitx_edid_ram_buffer_clear(hdmitx_device); hdmitx_edid_clear(hdmitx_device); cec_node_uninit(hdmitx_device); if(hdmitx_device->unplug_powerdown){ hdmitx_set_display(hdmitx_device, HDMI_Unkown); if(hdmitx_device->HWOp.Cntl){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_TURNOFF_HDMIHW, (hpdmode!=0)?1:0); } } hdmitx_device->cur_VIC = HDMI_Unkown; hdmi_authenticated = -1; switch_set_state(&sdev, 0); hdmitx_device->hpd_event = 0; hdmitx_device->hpd_state = 0; } else{ } /* authentication process */ #ifdef CONFIG_AML_HDMI_TX_HDCP if(hdmitx_device->cur_VIC != HDMI_Unkown){ if(hdmitx_device->auth_process_timer>0){ hdmitx_device->auth_process_timer--; } else{ hdmi_authenticated = hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_GET_AUTHENTICATE_STATE, NULL); if(auth_output_auto_off){ if(hdmi_authenticated){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_OUTPUT_ENABLE, 1); } else{ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_OUTPUT_ENABLE, 0); } } else{ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_OUTPUT_ENABLE, hdmi_output_on); } } } #endif /**/ HDMI_PROCESS_DELAY; } #ifndef AVOS return 0; #endif }
static int #else static void #endif hdmi_task_handle(void *data) { extern void hdmitx_edid_ram_buffer_clear(hdmitx_dev_t*); hdmitx_dev_t* hdmitx_device = (hdmitx_dev_t*)data; hdmitx_init_parameters(&hdmitx_device->hdmi_info); HDMITX_M1B_Init(hdmitx_device); //When init hdmi, clear the hdmitx module edid ram and edid buffer. hdmitx_edid_ram_buffer_clear(hdmitx_device); hdmitx_device->HWOp.SetupIRQ(hdmitx_device); if(hdmitx_device->HWOp.Cntl){ if(init_flag&INIT_FLAG_VDACOFF){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_VDAC_OFF, 0); } if(init_powermode&0x80){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_POWERMODE_SWITCH, init_powermode&0x1f); } } if(init_flag&INIT_FLAG_POWERDOWN){ hdmitx_device->HWOp.SetDispMode(NULL); //power down hdmitx_device->unplug_powerdown=1; if(hdmitx_device->HWOp.Cntl){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_TURNOFF_HDMIHW, (hpdmode!=0)?1:0); } } else{ if(hdmitx_device->HWOp.Cntl){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_MUX_HPD, 0); } } HDMI_DEBUG(); while (hdmitx_device->hpd_event != 0xff) { if((hdmitx_device->vic_count == 0)&&(hdmitx_device->mux_hpd_if_pin_high_flag)){ if(hdmitx_device->HWOp.Cntl){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_MUX_HPD_IF_PIN_HIGH, 0); } } if((!hdmi_audio_off_flag)&&(hdmitx_device->audio_param_update_flag)&&(hdmitx_device->cur_VIC != HDMI_Unkown)){ hdmitx_set_audio(hdmitx_device, &(hdmitx_device->cur_audio_param)); hdmitx_device->audio_param_update_flag = 0; hdmi_print(1, "HDMI: set audio param\n"); } if (hdmitx_device->hpd_event == 1) { if(hdmitx_device->HWOp.GetEDIDData(hdmitx_device)){ hdmitx_edid_clear(hdmitx_device); hdmitx_edid_parse(hdmitx_device); set_disp_mode_auto(); hdmitx_device->hpd_event = 0; } } else if(hdmitx_device->hpd_event == 2) { //When unplug hdmi, clear the hdmitx module edid ram and edid buffer. hdmitx_edid_ram_buffer_clear(hdmitx_device); hdmitx_edid_clear(hdmitx_device); if(hdmitx_device->unplug_powerdown){ hdmitx_set_display(hdmitx_device, HDMI_Unkown); if(hdmitx_device->HWOp.Cntl){ hdmitx_device->HWOp.Cntl(hdmitx_device, HDMITX_HWCMD_TURNOFF_HDMIHW, (hpdmode!=0)?1:0); } } hdmitx_device->cur_VIC = HDMI_Unkown; hdmitx_device->hpd_event = 0; } else{ } #ifdef AVOS AVTimeDly(500); #else msleep(500); #endif } #ifndef AVOS return 0; #endif }