__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 disp_drc_start_video_mode(__u32 screen_id) { gdisp.screen[screen_id].drc.mode = IEP_DRC_MODE_VIDEO; if(bsp_disp_drc_get_enable(screen_id) == 1) { bsp_disp_cfg_start(screen_id); DE_BE_Set_Enhance_ex(screen_id, 3, DISP_COLOR_RANGE_0_255, 0,50, 50, 50,50); IEP_Drc_Set_Mode(screen_id,gdisp.screen[screen_id].drc.mode); bsp_disp_cfg_finish(screen_id); } return DIS_SUCCESS; }
//todo : csc->set_mode or set_mode->csc? __s32 bsp_disp_drc_enable(__u32 screen_id, __u32 en) { if((DISP_OUTPUT_TYPE_LCD == bsp_disp_get_output_type(screen_id)) && disp_drc_get_support(screen_id)) { __iep_drc_t *drc; drc = &gdisp.screen[screen_id].drc; if((1 == en) && (0 == drc->enable)) { IEP_Drc_Set_Imgsize(screen_id, bsp_disp_get_screen_width(screen_id), bsp_disp_get_screen_height(screen_id)); IEP_Drc_Set_Winodw(screen_id, drc->rect); IEP_Drc_Set_Mode(screen_id,drc->mode); bsp_disp_cfg_start(screen_id); /* video mode */ if(drc->mode == IEP_DRC_MODE_VIDEO) { //todo? yuv output DE_BE_Set_Enhance_ex(screen_id, 3, DISP_COLOR_RANGE_0_255, 0,50, 50, 50,50); } /* UI mode */ else { DE_BE_Set_Enhance_ex(screen_id, 0,DISP_COLOR_RANGE_0_255, 0,50, 50, 50,50); } IEP_Drc_Enable(screen_id,TRUE); bsp_disp_cfg_finish(screen_id); gdisp.screen[screen_id].drc.enable = 1; } else if((0 == en) && (1 == drc->enable)) { bsp_disp_cfg_start(screen_id); IEP_Drc_Enable(screen_id,en); /* video mode */ if(drc->mode == IEP_DRC_MODE_VIDEO) { //todo? change to RGB output DE_BE_Set_Enhance_ex(screen_id, 0,DISP_COLOR_RANGE_0_255, 0,50, 50, 50,50); } bsp_disp_cfg_finish(screen_id); gdisp.screen[screen_id].drc.enable = 0; } return DIS_SUCCESS; } return DIS_NOT_SUPPORT; }
__s32 Disp_set_out_interlace(__u32 screen_id) { __u32 i; __bool b_cvbs_out = 0; __u32 num_scalers; num_scalers = bsp_disp_feat_get_num_scalers(); if(gdisp.screen[screen_id].output_type==DISP_OUTPUT_TYPE_TV && (gdisp.screen[screen_id].tv_mode==DISP_TV_MOD_PAL || gdisp.screen[screen_id].tv_mode==DISP_TV_MOD_PAL_M || gdisp.screen[screen_id].tv_mode==DISP_TV_MOD_PAL_NC || gdisp.screen[screen_id].tv_mode==DISP_TV_MOD_NTSC)) { b_cvbs_out = 1; } gdisp.screen[screen_id].de_flicker_status |= DE_FLICKER_REQUIRED; bsp_disp_cfg_start(screen_id); /* when output device is cvbs */ if((gdisp.screen[screen_id].de_flicker_status & DE_FLICKER_REQUIRED) && b_cvbs_out) { DE_BE_deflicker_enable(screen_id, TRUE); for(i=0; i<num_scalers; i++) { if((gdisp.scaler[i].status & SCALER_USED) && (gdisp.scaler[i].screen_index == screen_id)) { Scaler_Set_Outitl(i, FALSE); gdisp.scaler[i].b_reg_change = TRUE; } } gdisp.screen[screen_id].de_flicker_status |= DE_FLICKER_USED; } else { DE_BE_deflicker_enable(screen_id, FALSE); for(i=0; i<num_scalers; i++) { if((gdisp.scaler[i].status & SCALER_USED) && (gdisp.scaler[i].screen_index == screen_id)) { Scaler_Set_Outitl(i, gdisp.screen[screen_id].b_out_interlace); gdisp.scaler[i].b_reg_change = TRUE; } } gdisp.screen[screen_id].de_flicker_status &= DE_FLICKER_USED_MASK; } DE_BE_Set_Outitl_enable(screen_id, gdisp.screen[screen_id].b_out_interlace); bsp_disp_cfg_finish(screen_id); return DIS_SUCCESS; }
__s32 bsp_disp_deu_enable(__u8 screen_id, __u32 hid, __u32 enable) { __layer_man_t * layer_man; __scal_out_type_t out_type; 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)) { if((bsp_disp_feat_get_layer_feats(screen_id, DISP_LAYER_WORK_MODE_SCALER, layer_man->scaler_index) & DISP_LAYER_FEAT_DETAIL_ENHANCE)) { __disp_scaler_t * scaler; scaler = &(gdisp.scaler[layer_man->scaler_index]); if((enable == 1) && (!gdisp.scaler[layer_man->scaler_index].deu.enable)) { disp_deu_set_frame_info(screen_id, IDTOHAND(hid)); IEP_Deu_Set_Luma_Sharpness_Level(layer_man->scaler_index, scaler->deu.luma_sharpe_level); IEP_Deu_Set_Chroma_Sharpness_Level(layer_man->scaler_index, scaler->deu.chroma_sharpe_level); IEP_Deu_Set_Black_Level_Extension(layer_man->scaler_index, scaler->deu.black_exten_level); IEP_Deu_Set_White_Level_Extension(layer_man->scaler_index, scaler->deu.while_exten_level); bsp_disp_cfg_start(screen_id); //Scaler_Set_Para(layer_man->scaler_index,scaler); { scaler->out_fb.mode = DISP_MOD_NON_MB_PLANAR; scaler->out_fb.seq = DISP_SEQ_P3210; scaler->out_fb.format= DISP_FORMAT_YUV444; if(get_fb_type(scaler->out_fb.format) == DISP_FB_TYPE_YUV) { if(scaler->out_fb.mode == DISP_MOD_NON_MB_PLANAR) { out_type.fmt = Scaler_sw_para_to_reg(3, scaler->out_fb.mode, scaler->out_fb.format, scaler->out_fb.seq); } else { DE_WRN("output mode:%d invalid in bsp_disp_deu_enable\n",scaler->out_fb.mode); return DIS_FAIL; } } else { if(scaler->out_fb.mode == DISP_MOD_NON_MB_PLANAR && (scaler->out_fb.format == DISP_FORMAT_RGB888 || scaler->out_fb.format == DISP_FORMAT_ARGB8888)) { out_type.fmt = DE_SCAL_OUTPRGB888; } else if(scaler->out_fb.mode == DISP_MOD_INTERLEAVED && scaler->out_fb.format == DISP_FORMAT_ARGB8888 && scaler->out_fb.seq == DISP_SEQ_ARGB) { out_type.fmt = DE_SCAL_OUTI1RGB888; } else if(scaler->out_fb.mode == DISP_MOD_INTERLEAVED && scaler->out_fb.format == DISP_FORMAT_ARGB8888 && scaler->out_fb.seq == DISP_SEQ_BGRA) { out_type.fmt = DE_SCAL_OUTI0RGB888; } else { DE_WRN("output para invalid in bsp_disp_deu_enable,mode:%d,format:%d\n",scaler->out_fb.mode, scaler->out_fb.format); return DIS_FAIL; } } out_type.byte_seq = Scaler_sw_para_to_reg(2,scaler->out_fb.mode, scaler->out_fb.format, scaler->out_fb.seq); out_type.alpha_en = 1; out_type.alpha_coef_type = 0; DE_SCAL_Set_CSC_Coef(layer_man->scaler_index, scaler->in_fb.cs_mode, DISP_BT601, get_fb_type(scaler->in_fb.format), get_fb_type(scaler->out_fb.format), scaler->in_fb.br_swap, 0); DE_SCAL_Set_Out_Format(layer_man->scaler_index, &out_type); } IEP_Deu_Enable(layer_man->scaler_index, enable); bsp_disp_cfg_finish(screen_id); } else if((enable == 0) && (gdisp.scaler[layer_man->scaler_index].deu.enable)) { bsp_disp_cfg_start(screen_id); //Scaler_Set_Para(layer_man->scaler_index,scaler); { scaler->out_fb.mode = DISP_MOD_INTERLEAVED; scaler->out_fb.seq= DISP_SEQ_ARGB; scaler->out_fb.format= DISP_FORMAT_ARGB8888; if(get_fb_type(scaler->out_fb.format) == DISP_FB_TYPE_YUV) { if(scaler->out_fb.mode == DISP_MOD_NON_MB_PLANAR) { out_type.fmt = Scaler_sw_para_to_reg(3, scaler->out_fb.mode, scaler->out_fb.format, scaler->out_fb.seq); } else { DE_WRN("output mode:%d invalid in bsp_disp_deu_enable\n",scaler->out_fb.mode); return DIS_FAIL; } } else { if(scaler->out_fb.mode == DISP_MOD_NON_MB_PLANAR && (scaler->out_fb.format == DISP_FORMAT_RGB888 || scaler->out_fb.format == DISP_FORMAT_ARGB8888)) { out_type.fmt = DE_SCAL_OUTPRGB888; } else if(scaler->out_fb.mode == DISP_MOD_INTERLEAVED && scaler->out_fb.format == DISP_FORMAT_ARGB8888 && scaler->out_fb.seq == DISP_SEQ_ARGB) { out_type.fmt = DE_SCAL_OUTI1RGB888; } else if(scaler->out_fb.mode == DISP_MOD_INTERLEAVED && scaler->out_fb.format == DISP_FORMAT_ARGB8888 && scaler->out_fb.seq == DISP_SEQ_BGRA) { out_type.fmt = DE_SCAL_OUTI0RGB888; } else { DE_WRN("output para invalid in bsp_disp_deu_enable,mode:%d,format:%d\n",scaler->out_fb.mode, scaler->out_fb.format); return DIS_FAIL; } } out_type.byte_seq = Scaler_sw_para_to_reg(2,scaler->out_fb.mode, scaler->out_fb.format, scaler->out_fb.seq); out_type.alpha_en = 1; out_type.alpha_coef_type = 0; DE_SCAL_Set_CSC_Coef(layer_man->scaler_index, scaler->in_fb.cs_mode, DISP_BT601, get_fb_type(scaler->in_fb.format), get_fb_type(scaler->out_fb.format), scaler->in_fb.br_swap, 0); DE_SCAL_Set_Out_Format(layer_man->scaler_index, &out_type); } enable = (bsp_disp_get_output_type(screen_id) == DISP_OUTPUT_TYPE_NONE)? 2:0; IEP_Deu_Enable(layer_man->scaler_index, enable); bsp_disp_cfg_finish(screen_id); } gdisp.scaler[layer_man->scaler_index].deu.enable = enable; return DIS_SUCCESS; } } return DIS_NOT_SUPPORT; }