__s32 bsp_disp_cmu_layer_enable(__u32 screen_id,__u32 hid, __bool en) { __layer_man_t * layer_man; __u32 layer_bright, layer_saturation, layer_hue, layer_mode; hid= HANDTOID(hid); HLID_ASSERT(hid, gdisp.screen[screen_id].max_layers); layer_man = &gdisp.screen[screen_id].layer_manage[hid]; if((layer_man->status & LAYER_USED) && (layer_man->para.mode == DISP_LAYER_WORK_MODE_SCALER)) { //pr_warn("bsp_disp_cmu_layer_enable, screen_id=%d,hid=%d,en=%d\n", screen_id, hid, en); if(en && (!(gdisp.screen[screen_id].cmu.status & CMU_LAYER_EN))) { layer_mode = gdisp.screen[screen_id].cmu.layer_mode; layer_bright = __disp_cmu_get_adjust_value(layer_mode, gdisp.screen[screen_id].cmu.layer_bright); layer_saturation = __disp_cmu_get_adjust_value(layer_mode, gdisp.screen[screen_id].cmu.layer_saturation); layer_hue = __disp_cmu_get_adjust_value(layer_mode, gdisp.screen[screen_id].cmu.layer_hue); bsp_disp_cfg_start(screen_id); IEP_CMU_Set_Imgsize(screen_id,layer_man->para.scn_win.width, layer_man->para.scn_win.height); IEP_CMU_Set_Par(screen_id, layer_hue, layer_saturation, layer_bright, layer_mode); IEP_CMU_Set_Data_Flow(screen_id,layer_man->scaler_index+1);//fe0 : 1, fe1 :2 IEP_CMU_Set_Window(screen_id,&gdisp.screen[screen_id].cmu.layer_rect); IEP_CMU_Enable(screen_id, TRUE); bsp_disp_cfg_finish(screen_id); gdisp.screen[screen_id].cmu.status |= CMU_LAYER_EN; } else if((!en) && (gdisp.screen[screen_id].cmu.status & CMU_LAYER_EN)) { IEP_CMU_Enable(screen_id, FALSE); gdisp.screen[screen_id].cmu.status &= CMU_LAYER_EN_MASK; } return DIS_SUCCESS; } return DIS_NOT_SUPPORT; }
__s32 BSP_disp_tv_open(__u32 sel) { if((!(gdisp.screen[sel].status & TV_ON))) { __disp_tv_mode_t tv_mod; __panel_para_t para; memset(¶, 0, sizeof(__panel_para_t)); tv_mod = gdisp.screen[sel].tv_mode; lcdc_clk_on(sel, 0, 0); disp_clk_cfg(sel, DISP_OUTPUT_TYPE_TV, tv_mod); lcdc_clk_on(sel, 0, 1); drc_clk_open(sel,0); tcon_init(sel); image_clk_on(sel, 1); Image_open(sel);//set image normal channel start bit , because every de_clk_off( )will reset this bit BSP_disp_set_output_csc(sel, DISP_OUT_CSC_TYPE_LCD, BSP_disp_drc_get_input_csc(sel)); //LCD -->GM7121, rgb fmt DE_BE_set_display_size(sel, tv_mode_to_width(tv_mod), tv_mode_to_height(tv_mod)); DE_BE_Output_Select(sel, sel); disp_tv_get_timing(¶, tv_mod); tcon0_cfg(sel,(__panel_para_t*)¶); tcon0_src_select(sel,4); if(gdisp.screen[sel].tv_ops.tv_power_on) { gdisp.screen[sel].tv_ops.tv_power_on(1); msleep(500); } disp_tv_pin_cfg(1); tcon0_open(sel,(__panel_para_t*)¶); if(gdisp.screen[sel].tv_ops.tv_open) { gdisp.screen[sel].tv_ops.tv_open(); } Disp_Switch_Dram_Mode(DISP_OUTPUT_TYPE_TV, tv_mod); gdisp.screen[sel].b_out_interlace = Disp_get_screen_scan_mode(tv_mod); gdisp.screen[sel].status = TV_ON; gdisp.screen[sel].lcdc_status |= LCDC_TCON0_USED; gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_TV; gdisp.screen[sel].output_csc_type = DISP_OUT_CSC_TYPE_LCD;//LCD -->GM7121, rgb fmt if(BSP_disp_cmu_get_enable(sel) ==1) { IEP_CMU_Set_Imgsize(sel, BSP_disp_get_screen_width(sel), BSP_disp_get_screen_height(sel)); } Disp_set_out_interlace(sel); #ifdef __LINUX_OSAL__ Display_set_fb_timming(sel); #endif tcon0_src_select(sel,0); } return DIS_SUCCESS; }
__s32 bsp_disp_cmu_enable(__u32 screen_id,__bool en) { __u32 screen_bright, screen_saturation, screen_hue, screen_mode; //pr_warn("bsp_disp_cmu_enable, screen_id=%d,en=%d\n", screen_id, en); if((en) && (!(gdisp.screen[screen_id].cmu.status & CMU_SCREEN_EN))) { screen_mode = gdisp.screen[screen_id].cmu.screen_mode; screen_bright = __disp_cmu_get_adjust_value(screen_mode, gdisp.screen[screen_id].cmu.screen_bright); screen_saturation = __disp_cmu_get_adjust_value(screen_mode, gdisp.screen[screen_id].cmu.screen_saturation); screen_hue = __disp_cmu_get_adjust_value(screen_mode, gdisp.screen[screen_id].cmu.screen_hue); IEP_CMU_Set_Imgsize(screen_id,bsp_disp_get_screen_width(screen_id), bsp_disp_get_screen_height(screen_id)); IEP_CMU_Set_Par(screen_id, screen_hue, screen_saturation, screen_bright, screen_mode); IEP_CMU_Set_Data_Flow(screen_id,0); IEP_CMU_Set_Window(screen_id,&gdisp.screen[screen_id].cmu.screen_rect); IEP_CMU_Enable(screen_id, TRUE); gdisp.screen[screen_id].cmu.status |= CMU_SCREEN_EN; } else if((!en) && (gdisp.screen[screen_id].cmu.status & CMU_SCREEN_EN)) { IEP_CMU_Enable(screen_id, FALSE); gdisp.screen[screen_id].cmu.status &= CMU_SCREEN_EN_MASK; } return DIS_SUCCESS; }
__s32 bsp_disp_hdmi_open(__u32 screen_id) { if(disp_hdmi_get_support(screen_id) && (gdisp.screen[screen_id].hdmi_used) && (!(gdisp.screen[screen_id].status & HDMI_ON))) { __disp_tv_mode_t tv_mod; tv_mod = gdisp.screen[screen_id].hdmi_mode; hdmi_clk_on(); lcdc_clk_on(screen_id, 1, 0); lcdc_clk_on(screen_id, 1, 1); drc_clk_open(screen_id,0); drc_clk_open(screen_id,1); tcon_init(screen_id); image_clk_on(screen_id, 1); /* set image normal channel start bit , because every de_clk_off( )will reset this bit */ Image_open(screen_id); disp_clk_cfg(screen_id,DISP_OUTPUT_TYPE_HDMI, tv_mod); //bsp_disp_set_output_csc(screen_id, DISP_OUTPUT_TYPE_HDMI, gdisp.screen[screen_id].iep_status&DRC_USED); if(gdisp.init_para.hdmi_cts_compatibility == 0) { DE_INF("bsp_disp_hdmi_open: disable dvi mode\n"); bsp_disp_hdmi_dvi_enable(screen_id, 0); } else if(gdisp.init_para.hdmi_cts_compatibility == 1) { DE_INF("bsp_disp_hdmi_open: enable dvi mode\n"); bsp_disp_hdmi_dvi_enable(screen_id, 1); } else { bsp_disp_hdmi_dvi_enable(screen_id, bsp_disp_hdmi_dvi_support(screen_id)); } if(BSP_dsip_hdmi_get_input_csc(screen_id) == 0) { __inf("bsp_disp_hdmi_open: hdmi output rgb\n"); gdisp.screen[screen_id].output_csc_type = DISP_OUT_CSC_TYPE_HDMI_RGB; bsp_disp_set_output_csc(screen_id, gdisp.screen[screen_id].output_csc_type, bsp_disp_drc_get_input_csc(screen_id)); } else { __inf("bsp_disp_hdmi_open: hdmi output yuv\n"); gdisp.screen[screen_id].output_csc_type = DISP_OUT_CSC_TYPE_HDMI_YUV;//default yuv bsp_disp_set_output_csc(screen_id, gdisp.screen[screen_id].output_csc_type, bsp_disp_drc_get_input_csc(screen_id)); } DE_BE_set_display_size(screen_id, tv_mode_to_width(tv_mod), tv_mode_to_height(tv_mod)); DE_BE_Output_Select(screen_id, screen_id); bsp_disp_hdmi_set_src(screen_id, DISP_LCDC_SRC_DE_CH1); tcon1_set_hdmi_mode(screen_id,tv_mod); tcon1_open(screen_id); if(gdisp.init_para.hdmi_open) { gdisp.init_para.hdmi_open(); } else { DE_WRN("Hdmi_open is NULL\n"); return -1; } Disp_Switch_Dram_Mode(DISP_OUTPUT_TYPE_HDMI, tv_mod); gdisp.screen[screen_id].b_out_interlace = disp_get_screen_scan_mode(tv_mod); gdisp.screen[screen_id].status |= HDMI_ON; gdisp.screen[screen_id].lcdc_status |= LCDC_TCON1_USED; gdisp.screen[screen_id].output_type = DISP_OUTPUT_TYPE_HDMI; if(bsp_disp_cmu_get_enable(screen_id) ==1) { IEP_CMU_Set_Imgsize(screen_id, bsp_disp_get_screen_width(screen_id), bsp_disp_get_screen_height(screen_id)); } Disp_set_out_interlace(screen_id); #ifdef __LINUX_OSAL__ Display_set_fb_timming(screen_id); #endif return DIS_SUCCESS; } return DIS_NOT_SUPPORT; }