static int set_disp_mode_auto(void) { int ret=-1; #ifndef AVOS const vinfo_t *info = get_current_vinfo(); #else vinfo_t* info=&lvideo_info; #endif HDMI_Video_Codes_t vic; //Prevent warning //msleep(500); vic = hdmitx_edid_get_VIC(&hdmitx_device, info->name, (hdmitx_device.disp_switch_config==DISP_SWITCH_FORCE)?1:0); hdmitx_device.cur_VIC = HDMI_Unkown; ret = hdmitx_set_display(&hdmitx_device, vic); //if vic is HDMI_Unkown, hdmitx_set_display will disable HDMI if(ret>=0){ hdmitx_device.cur_VIC = vic; hdmitx_device.audio_param_update_flag = 1; hdmi_authenticated = -1; hdmitx_device.auth_process_timer = AUTH_PROCESS_TIME; set_test_mode(); } if(hdmitx_device.cur_VIC == HDMI_Unkown){ if(hpdmode==2){ hdmitx_edid_clear(&hdmitx_device); /* edid will be read again when hpd is muxed and it is high */ hdmitx_device.mux_hpd_if_pin_high_flag = 0; } if(hdmitx_device.HWOp.Cntl){ hdmitx_device.HWOp.Cntl(&hdmitx_device, HDMITX_HWCMD_TURNOFF_HDMIHW, (hpdmode==2)?1:0); } } return ret; }
/***************************** * hdmitx attr management : * enable * mode * reg ******************************/ static int set_disp_mode(const char *mode) { int ret=-1; HDMI_Video_Codes_t vic; vic = hdmitx_edid_get_VIC(&hdmitx_device, mode, 1); if(vic != HDMI_Unkown){ hdmitx_device.mux_hpd_if_pin_high_flag = 1; if(hdmitx_device.vic_count == 0){ if(hdmitx_device.unplug_powerdown){ return 0; } } } hdmitx_device.cur_VIC = HDMI_Unkown; ret = hdmitx_set_display(&hdmitx_device, vic); if(ret>=0){ hdmitx_device.cur_VIC = vic; hdmitx_device.audio_param_update_flag = 1; } if(hdmitx_device.cur_VIC == HDMI_Unkown){ if(hpdmode == 2){ hdmitx_edid_clear(&hdmitx_device); /* edid will be read again when hpd is muxed and it is high */ hdmitx_device.mux_hpd_if_pin_high_flag = 0; } if(hdmitx_device.HWOp.Cntl){ hdmitx_device.HWOp.Cntl(&hdmitx_device, HDMITX_HWCMD_TURNOFF_HDMIHW, (hpdmode==2)?1:0); } } return ret; }
static int set_disp_mode(const char *mode) { int ret=-1; HDMI_Video_Codes_t vic; vic = hdmitx_edid_get_VIC(&hdmitx_device, mode, 1); hdmitx_device.cur_VIC = HDMI_Unkown; ret = hdmitx_set_display(&hdmitx_device, vic); if(ret>=0){ hdmitx_device.cur_VIC = vic; } return ret; }
int set_disp_mode_auto(int mode) { int ret=-1; char mode_name[][16]= { "480i","480i","480p","576i","576i","576p","720p","1080i","1080p","720p50hz","1080i50hz","1080p50hz","invalid" }; HDMI_Video_Codes_t vic; if(mode>=12) { printf("invalid tvout mode \n"); return -1; } vic = hdmitx_edid_get_VIC(&hdmitx_device,mode_name[mode]/* info->name*/, (hdmitx_device.disp_switch_config==DISP_SWITCH_FORCE)?1:0); hdmitx_device.cur_VIC = HDMI_Unkown; ret = hdmitx_set_display(&hdmitx_device, vic); //if vic is HDMI_Unkown, hdmitx_set_display will disable HDMI if(ret>=0){ hdmitx_device.cur_VIC = vic; } return ret; }
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 }