s32 disp_hdmi_enable(struct disp_hdmi* hdmi) { s32 index, ret; struct disp_hdmi_private_data *hdmip = disp_hdmi_get_priv(hdmi); if((NULL == hdmi) || (NULL == hdmip)) { DE_WRN("hdmi set func null hdl!\n"); return DIS_FAIL; } if(hdmip->hdmi_func.hdmi_get_video_timing_info == NULL) { DE_WRN("hdmi_get_video_timing_info func is null\n"); return DIS_FAIL; } hdmip->hdmi_func.hdmi_get_video_timing_info(&(hdmip->video_info)); if(hdmip->video_info == NULL) { DE_WRN("video info is null\n"); return DIS_FAIL; } if(hdmip->hdmi_func.hdmi_get_video_info_index == NULL) { DE_WRN("hdmi_get_video_info_index func is null\n"); return DIS_FAIL; } index = hdmip->hdmi_func.hdmi_get_video_info_index(hdmip->mode); if(index < 0) { DE_WRN("hdmi get video info index fail\n"); return DIS_FAIL; } hdmip->video_info = hdmip->video_info + index; hdmi_clk_enable(hdmi); disp_al_hdmi_init(hdmi->channel_id, hdmip->support_4k); disp_al_hdmi_cfg(hdmi->channel_id, hdmip->video_info); disp_al_hdmi_enable(hdmi->channel_id); if(hdmip->hdmi_func.hdmi_open == NULL) return -1; ret = hdmip->hdmi_func.hdmi_open(); #if defined(__LINUX_PLAT__) { unsigned long flags; spin_lock_irqsave(&hdmi_data_lock, flags); #endif hdmip->enabled = 1; #if defined(__LINUX_PLAT__) spin_unlock_irqrestore(&hdmi_data_lock, flags); } #endif return ret; }
s32 disp_hdmi_enable(struct disp_device* hdmi) { unsigned long flags; struct disp_device_private_data *hdmip = disp_hdmi_get_priv(hdmi); struct disp_manager *mgr = NULL; if((NULL == hdmi) || (NULL == hdmip)) { DE_WRN("hdmi set func null hdl!\n"); return DIS_FAIL; } mgr = hdmi->manager; if(!mgr) { DE_WRN("hdmi%d's mgr is NULL\n", hdmi->disp); return DIS_FAIL; } if(hdmip->hdmi_func.hdmi_get_video_timing_info == NULL) { DE_WRN("hdmi_get_video_timing_info func is null\n"); return DIS_FAIL; } hdmip->hdmi_func.hdmi_get_video_timing_info(&(hdmip->video_info)); if(hdmip->video_info == NULL) { DE_WRN("video info is null\n"); return DIS_FAIL; } memcpy(&hdmi->timings, hdmip->video_info, sizeof(disp_video_timings)); if(mgr->enable) mgr->enable(mgr); disp_sys_register_irq(hdmip->irq_no,0,disp_hdmi_event_proc,(void*)hdmi->disp,0,0); disp_sys_enable_irq(hdmip->irq_no); hdmi_clk_enable(hdmi); disp_al_hdmi_cfg(hdmi->disp, hdmip->video_info); disp_al_hdmi_enable(hdmi->disp); if(NULL != hdmip->hdmi_func.hdmi_open) hdmip->hdmi_func.hdmi_open(); else DE_WRN("hdmi_open is NULL\n"); disp_sys_irqlock((void*)&hdmi_data_lock, &flags); hdmip->enabled = 1; disp_sys_irqunlock((void*)&hdmi_data_lock, &flags); return 0; }
s32 hdmi_clk_enable(struct disp_hdmi *hdmi) { struct disp_hdmi_private_data *hdmip = disp_hdmi_get_priv(hdmi); if(!hdmi || !hdmip) { DE_WRN("hdmi clk init null hdl!\n"); return DIS_FAIL; } hdmi_clk_config(hdmi); if(hdmip->drc_clk.clk) disp_al_hdmi_clk_enable(hdmip->drc_clk.clk); disp_al_hdmi_enable(hdmi->channel_id); return 0; }
static s32 hdmi_clk_enable(struct disp_hdmi *hdmi) { struct disp_hdmi_private_data *hdmip = disp_hdmi_get_priv(hdmi); if(!hdmi || !hdmip) { DE_WRN("hdmi clk init null hdl!\n"); return DIS_FAIL; } if((NULL == hdmi->p_sw_init_flag) || (0 == *(hdmi->p_sw_init_flag))) { hdmi_clk_config(hdmi); } if(hdmip->drc_clk.clk && ((NULL == hdmi->p_sw_init_flag) || (0 == *(hdmi->p_sw_init_flag)))) disp_al_hdmi_clk_enable(hdmip->drc_clk.clk); if((NULL == hdmi->p_sw_init_flag) || (0 == *(hdmi->p_sw_init_flag))) { disp_al_hdmi_enable(hdmi->channel_id); } else { //disp_al_hdmi_enable_sw(hdmi->channel_id); } return 0; }