Пример #1
0
bool _s5p_tv_if_init_vm_reg(void)
{
	u8 i = 0;
	s5p_tv_vmx_err merr = 0;
	s5p_tv_status *st = &s5ptv_status;
	s5p_tv_o_mode out_mode = st->tvout_param.out_mode;
	s5p_tv_disp_mode disp_mode = st->tvout_param.disp_mode;

	bool cr_en = st->bg_dither.cr_dither_en;
	bool cb_en = st->bg_dither.cr_dither_en;
	bool y_en = st->bg_dither.cr_dither_en;
		
	s5p_vmx_burst_mode burst = st->grp_burst;
	s5p_endian_type endian = st->grp_endian;
	

	merr = __s5p_vm_init_status_reg(burst,endian);

	if (merr != VMIXER_NO_ERROR) {
		return false;
	}

	merr = __s5p_vm_init_display_mode(disp_mode,out_mode);

	if (merr != VMIXER_NO_ERROR) {
		return false;
	}

	__s5p_vm_init_bg_dither_enable(cr_en,cb_en,y_en);

	for(i = VMIXER_BG_COLOR_0; i <= VMIXER_BG_COLOR_2; i++) {
		merr = __s5p_vm_init_bg_color(i,
				     st->bg_color[i].color_y,
				     st->bg_color[i].color_cb,
				     st->bg_color[i].color_cr);

		if (merr != VMIXER_NO_ERROR)
			return false;
	}

	switch (out_mode) {

	case TVOUT_OUTPUT_COMPOSITE:

	case TVOUT_OUTPUT_SVIDEO:

	case TVOUT_OUTPUT_COMPONENT_YPBPR_INERLACED:

	case TVOUT_OUTPUT_COMPONENT_YPBPR_PROGRESSIVE:

	case TVOUT_OUTPUT_COMPONENT_RGB_PROGRESSIVE:
		__s5p_vm_init_csc_coef_default(VMIXER_CSC_RGB_TO_YUV601_FR);
		break;

	case TVOUT_OUTPUT_HDMI_RGB:
	case TVOUT_OUTPUT_HDMI:
	case TVOUT_OUTPUT_DVI:

		switch (disp_mode) {

		case TVOUT_NTSC_M :

		case TVOUT_PAL_BDGHI:

		case TVOUT_PAL_M:

		case TVOUT_PAL_N:

		case TVOUT_PAL_NC:

		case TVOUT_PAL_60:

		case TVOUT_NTSC_443:
			break;

		case TVOUT_480P_60_16_9:

		case TVOUT_480P_60_4_3:
#ifdef CONFIG_CPU_S5PV210
// SPMOON_TEST
		case TVOUT_480P_59:			
#endif
		case TVOUT_576P_50_16_9:

		case TVOUT_576P_50_4_3:
			__s5p_vm_init_csc_coef_default(VMIXER_CSC_RGB_TO_YUV601_FR);
			break;

		case TVOUT_720P_60:

		case TVOUT_720P_50:

#ifdef CONFIG_CPU_S5PV210
// SPMOON_TEST
		case TVOUT_720P_59:			

		case TVOUT_1080I_60:

		case TVOUT_1080I_59:

		case TVOUT_1080I_50:
			
		case TVOUT_1080P_60:

		case TVOUT_1080P_30:

		case TVOUT_1080P_59:			

		case TVOUT_1080P_50:
#endif				
			__s5p_vm_init_csc_coef_default(VMIXER_CSC_RGB_TO_YUV709_FR);
		break;
		}

		break;

	default:
		TVOUTIFPRINTK("invalid tvout_param.out_mode parameter(%d)\n\r",
			      out_mode);
		return false;
		break;
	}

	__s5p_vm_start();

	return true;
}
Пример #2
0
bool _s5p_grp_start(enum s5p_tv_vmx_layer vm_layer)
{
	enum s5p_tv_vmx_err merr;
	struct s5p_tv_status *st = &s5ptv_status;

	if (!(st->grp_layer_enable[0] || st->grp_layer_enable[1])) {

		merr = __s5p_vm_init_status_reg(st->grp_burst,
					st->grp_endian);

		if (merr != VMIXER_NO_ERROR)
			return false;
	}

#ifdef CONFIG_CPU_S5PC100
	merr = __s5p_vm_init_layer(vm_layer,
			  true,
			  s5ptv_overlay[vm_layer].win_blending,
			  s5ptv_overlay[vm_layer].win.global_alpha,
			  s5ptv_overlay[vm_layer].priority,
			  s5ptv_overlay[vm_layer].fb.fmt.pixelformat,
			  s5ptv_overlay[vm_layer].blank_change,
			  s5ptv_overlay[vm_layer].pixel_blending,
			  s5ptv_overlay[vm_layer].pre_mul,
			  s5ptv_overlay[vm_layer].blank_color,
			  s5ptv_overlay[vm_layer].base_addr,
			  s5ptv_overlay[vm_layer].fb.fmt.bytesperline,
			  s5ptv_overlay[vm_layer].win.w.width,
			  s5ptv_overlay[vm_layer].win.w.height,
			  s5ptv_overlay[vm_layer].win.w.left,
			  s5ptv_overlay[vm_layer].win.w.top,
			  s5ptv_overlay[vm_layer].dst_rect.left,
			  s5ptv_overlay[vm_layer].dst_rect.top);
#endif

#ifdef CONFIG_CPU_S5PV210
	merr = __s5p_vm_init_layer(s5ptv_status.tvout_param.disp_mode,
			  vm_layer,
			  true,
			  s5ptv_overlay[vm_layer].win_blending,
			  s5ptv_overlay[vm_layer].win.global_alpha,
			  s5ptv_overlay[vm_layer].priority,
			  s5ptv_overlay[vm_layer].fb.fmt.pixelformat,
			  s5ptv_overlay[vm_layer].blank_change,
			  s5ptv_overlay[vm_layer].pixel_blending,
			  s5ptv_overlay[vm_layer].pre_mul,
			  s5ptv_overlay[vm_layer].blank_color,
			  s5ptv_overlay[vm_layer].base_addr,
			  s5ptv_overlay[vm_layer].fb.fmt.bytesperline,
			  s5ptv_overlay[vm_layer].win.w.width,
			  s5ptv_overlay[vm_layer].win.w.height,
			  s5ptv_overlay[vm_layer].win.w.left,
			  s5ptv_overlay[vm_layer].win.w.top,
			  s5ptv_overlay[vm_layer].dst_rect.left,
			  s5ptv_overlay[vm_layer].dst_rect.top,
			  s5ptv_overlay[vm_layer].dst_rect.width,
			  s5ptv_overlay[vm_layer].dst_rect.height);
#endif


	if (merr != VMIXER_NO_ERROR) {
		GRPPRINTK("can't initialize layer(%d)\n\r", merr);
		return false;
	}

	__s5p_vm_start();


	st->grp_layer_enable[vm_layer] = true;

	GRPPRINTK("()\n\r");

	return true;
}