Exemplo n.º 1
0
__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;
}
Exemplo n.º 2
0
__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;
}
Exemplo n.º 3
0
//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;
}
Exemplo n.º 4
0
__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;
}
Exemplo n.º 5
0
__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;
}