__s32 Disp_set_out_interlace(__u32 sel)
{
	__u32 i;
	__bool b_cvbs_out = 0;

	if (sunxi_is_sun5i())
		return 0;

	if (gdisp.screen[sel].output_type == DISP_OUTPUT_TYPE_TV &&
	    (gdisp.screen[sel].tv_mode == DISP_TV_MOD_PAL ||
	     gdisp.screen[sel].tv_mode == DISP_TV_MOD_PAL_M ||
	     gdisp.screen[sel].tv_mode == DISP_TV_MOD_PAL_NC ||
	     gdisp.screen[sel].tv_mode == DISP_TV_MOD_NTSC)) {
		b_cvbs_out = 1;
	}

	gdisp.screen[sel].de_flicker_status |= DE_FLICKER_REQUIRED;

	BSP_disp_cfg_start(sel);

	/* when output device is cvbs */
	if ((gdisp.screen[sel].de_flicker_status & DE_FLICKER_REQUIRED) &&
	    b_cvbs_out)	{
		DE_BE_deflicker_enable(sel, TRUE);
		for (i = 0; i < 2; i++) {
			if ((gdisp.scaler[i].status & SCALER_USED) &&
			    (gdisp.scaler[i].screen_index == sel)) {
				Scaler_Set_Outitl(i, FALSE);
			}
		}
		gdisp.screen[sel].de_flicker_status |= DE_FLICKER_USED;
	} else {
		DE_BE_deflicker_enable(sel, FALSE);
		for (i = 0; i < 2; i++) {
			if ((gdisp.scaler[i].status & SCALER_USED) &&
			    (gdisp.scaler[i].screen_index == sel)) {
				Scaler_Set_Outitl(i,
						  gdisp.screen[sel].
						  b_out_interlace);
			}
		}
		gdisp.screen[sel].de_flicker_status &= ~DE_FLICKER_USED;
	}
	DE_BE_Set_Outitl_enable(sel, gdisp.screen[sel].b_out_interlace);

	BSP_disp_cfg_finish(sel);

	return DIS_SUCCESS;
}
Beispiel #2
0
/*
 * en : 0-close when vbi
 * en : 1- open when vbi
 * en : 2-close immediately
 */
__s32 Disp_de_flicker_enable(__u32 sel, __u32 en)
{
	__disp_tv_mode_t tv_mode;
	__u32 scan_mode;
	__u32 scaler_index;

	tv_mode = gdisp.screen[sel].tv_mode;
	scan_mode = gdisp.screen[sel].b_out_interlace;

	if (sel)
		return -1;

	switch (en) {
	case 0:
		if (gdisp.screen[sel].iep_status & DE_FLICKER_USED) {
			BSP_disp_cfg_start(sel);

			for (scaler_index = 0; scaler_index < 2;
			     scaler_index++) {
				if ((gdisp.scaler[scaler_index].status &
				     SCALER_USED) &&
				    (gdisp.scaler[scaler_index].screen_index ==
				     sel)) {
					Scaler_Set_Outitl(scaler_index, TRUE);
					gdisp.scaler[scaler_index].b_reg_change
						= TRUE;
				}
			}

			/* must do in sun5i */
			DE_BE_Set_Outitl_enable(sel, TRUE);

			gdisp.screen[sel].iep_status &= DE_FLICKER_NEED_CLOSED;

			BSP_disp_cfg_finish(sel);
		} else {
			DE_INF("de: De-flicker hasn't opened yet!\n");
		}
		break;

	case 1:
		/* when set DISP_CMD_DE_FLICKER_ON before */
		if (gdisp.screen[sel].iep_status & DE_FLICKER_REQUIRED) {
			if ((gdisp.screen[sel].output_type ==
			     DISP_OUTPUT_TYPE_TV) && scan_mode &&
			    (gdisp.screen[sel].status & TV_ON))	{
				/* when interlaced tv on */
				if (!(gdisp.screen[sel].iep_status &
				      DE_FLICKER_USED)) {
					BSP_disp_cfg_start(sel);

					/* config defe to fit de-flicker */
					for (scaler_index = 0;
					     scaler_index < 2;
					     scaler_index++) {
						if ((gdisp.scaler[scaler_index].
						     status & SCALER_USED) &&
						    (gdisp.scaler[scaler_index].
						     screen_index == sel)) {
							Scaler_Set_Outitl
								(scaler_index,
								 FALSE);
							gdisp.scaler
								[scaler_index].
								b_reg_change
								= TRUE;
						}
					}

					/* config debe to fit de-flicker */
					/* must do in sun5i */
					DE_BE_Set_Outitl_enable(sel, FALSE);

					Disp_de_flicker_init(sel);
					gdisp.screen[sel].iep_status |=
						DE_FLICKER_USED;

					BSP_disp_cfg_finish(sel);
				} else {
					DE_INF("de: De-flicker has already "
					       "opened before !\n");
				}
			} else {
				DE_INF("de: Will OPEN de-flicker when output to"
				       " interlaced device !\n");
			}
		} else {
			DE_INF("de: Run DISP_CMD_DE_FLICKER_ON will open "
			       "de-flicker !\n");
		}
		break;

	case 2:
		if (gdisp.screen[sel].iep_status & DE_FLICKER_USED) {
			BSP_disp_cfg_start(sel);

			for (scaler_index = 0; scaler_index < 2;
			     scaler_index++) {
				if ((gdisp.scaler[scaler_index].status &
				     SCALER_USED) &&
				    (gdisp.scaler[scaler_index].screen_index ==
				     sel)) {
					Scaler_Set_Outitl(scaler_index, TRUE);
					gdisp.scaler[scaler_index].
						b_reg_change = TRUE;
				}
			}

			/* must do in sun5i */
			DE_BE_Set_Outitl_enable(sel, TRUE);

			Disp_de_flicker_close_proc(sel, 1);

			BSP_disp_cfg_finish(sel);
		} else {
			DE_INF("de: De-flicker hasn't opened yet!\n");
		}
		break;

	}

	return 0;
}