Ejemplo n.º 1
0
__s32 BSP_disp_hdmi_open(__u32 sel)
{
    if(!(gdisp.screen[sel].status & HDMI_ON))
    {
    	__disp_tv_mode_t     tv_mod;
        __u32 scaler_index;

    	tv_mod = gdisp.screen[sel].hdmi_mode;

        hdmi_clk_on();
    	lcdc_clk_on(sel);
    	image_clk_on(sel);
		Image_open(sel);//set image normal channel start bit , because every de_clk_off( )will reset this bit
    	disp_clk_cfg(sel,DISP_OUTPUT_TYPE_HDMI, tv_mod);

        BSP_disp_set_output_csc(sel, DISP_OUTPUT_TYPE_HDMI);
    	DE_BE_set_display_size(sel, tv_mode_to_width(tv_mod), tv_mode_to_height(tv_mod));
    	DE_BE_Output_Select(sel, sel);
    	DE_BE_Set_Outitl_enable(sel, Disp_get_screen_scan_mode(tv_mod));
        for(scaler_index=0; scaler_index<2; scaler_index++)
        {
            if((gdisp.scaler[scaler_index].status & SCALER_USED) && (gdisp.scaler[scaler_index].screen_index == sel))
            {
                if(Disp_get_screen_scan_mode(tv_mod) == 1)//interlace output
                {
                    Scaler_Set_Outitl(scaler_index, TRUE);
                }
                else
                {
                    Scaler_Set_Outitl(scaler_index, FALSE);
                }
            }
        }

    	TCON1_set_hdmi_mode(sel,tv_mod);
    	TCON1_open(sel);
    	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[sel].b_out_interlace = Disp_get_screen_scan_mode(tv_mod);
    	gdisp.screen[sel].status |= HDMI_ON;
        gdisp.screen[sel].lcdc_status |= LCDC_TCON1_USED;
        gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_HDMI;

#ifdef __LINUX_OSAL__
        Display_set_fb_timming(sel);
#endif
    }

    return DIS_SUCCESS;
}
Ejemplo n.º 2
0
__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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
0
__s32 bsp_disp_tv_close(__u32 screen_id)
{
	if(gdisp.screen[screen_id].status & TV_ON)
	{
	Image_close(screen_id);
	tcon1_close(screen_id);
	Disp_TVEC_Close(screen_id);

	tve_clk_off(screen_id);
	image_clk_off(screen_id, 1);
	lcdc_clk_off(screen_id);
	
#if (defined CONFIG_ARCH_SUN5I)
       __u32 scaler_index = 0;
        //disp_de_flicker_enable(screen_id, 2);	//must close immediately, because vbi may not come
		DE_BE_Set_Outitl_enable(screen_id, FALSE);
        for(scaler_index=0; scaler_index<2; scaler_index++)
        {
            if((gdisp.scaler[scaler_index].status & SCALER_USED) && (gdisp.scaler[scaler_index].screen_index == screen_id))
            {
                Scaler_Set_Outitl(scaler_index, FALSE);
            }
        }
#endif
#ifdef __LINUX_OSAL__
	{
		disp_gpio_set_t  gpio_info[1];
		__hdle gpio_pa_shutdown;
		__s32 ret;

		memset(gpio_info, 0, sizeof(disp_gpio_set_t));
		ret = OSAL_Script_FetchParser_Data("audio_para","audio_pa_ctrl", (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int));
		if(ret < 0) {
			DE_WRN("fetch script data audio_para.audio_pa_ctrl fail\n");
		}	else {
			gpio_pa_shutdown = OSAL_GPIO_Request(gpio_info, 1);
			if(!gpio_pa_shutdown) {
				DE_WRN("audio codec_wakeup request gpio fail!\n");
			}	else {
				OSAL_GPIO_DevWRITE_ONEPIN_DATA(gpio_pa_shutdown, 1, "audio_pa_ctrl");
			}
		}
	}
#endif
	gdisp.screen[screen_id].b_out_interlace = 0;
	gdisp.screen[screen_id].status &= TV_OFF;
	gdisp.screen[screen_id].lcdc_status &= LCDC_TCON1_USED_MASK;
	gdisp.screen[screen_id].output_type = DISP_OUTPUT_TYPE_NONE;
	gdisp.screen[screen_id].pll_use_status &= ((gdisp.screen[screen_id].pll_use_status == VIDEO_PLL0_USED)? VIDEO_PLL0_USED_MASK : VIDEO_PLL1_USED_MASK);

	Disp_set_out_interlace(screen_id);
	}
	return DIS_SUCCESS;
}
Ejemplo n.º 5
0
__s32 BSP_disp_hdmi_close(__u32 sel)
{
    if(gdisp.screen[sel].status & HDMI_ON)
    {
        __u32 scaler_index;

    	if(gdisp.init_para.Hdmi_close)
    	{
    	    gdisp.init_para.Hdmi_close();
    	}
    	else
    	{
    	    DE_WRN("Hdmi_close is NULL\n");
    	    return -1;
    	}
        Image_close(sel);
    	TCON1_close(sel);

    	image_clk_off(sel);
    	lcdc_clk_off(sel);
    	hdmi_clk_off();
    	DE_BE_Set_Outitl_enable(sel, FALSE);
        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.screen[sel].b_out_interlace = 0;
        gdisp.screen[sel].lcdc_status &= LCDC_TCON1_USED_MASK;
    	gdisp.screen[sel].status &= HDMI_OFF;
    	gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_NONE;
		gdisp.screen[sel].pll_use_status &= ((gdisp.screen[sel].pll_use_status == VIDEO_PLL0_USED)? VIDEO_PLL0_USED_MASK : VIDEO_PLL1_USED_MASK);
    }

	return DIS_SUCCESS;
}
Ejemplo n.º 6
0
__s32 bsp_disp_tv_open(__u32 screen_id)
{
	if(!(gdisp.screen[screen_id].status & TV_ON))
	{
	__disp_tv_mode_t     tv_mod;
	tv_mod = gdisp.screen[screen_id].tv_mode;

	image_clk_on(screen_id, 1);
	Image_open(screen_id);//set image normal channel start bit , because every de_clk_off( )will reset this bit

	disp_clk_cfg(screen_id,DISP_OUTPUT_TYPE_TV, tv_mod);
	tve_clk_on(screen_id);
	lcdc_clk_on(screen_id, 1, 0);
	lcdc_clk_on(screen_id, 1, 1);
	tcon_init(screen_id);

	gdisp.screen[screen_id].output_csc_type = DISP_OUT_CSC_TYPE_TV;
	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);

#if (defined CONFIG_ARCH_SUN5I)
    __u32 scaler_index = 0;
	DE_BE_Set_Outitl_enable(screen_id , disp_get_screen_scan_mode(tv_mod));

        for(scaler_index=0; scaler_index<2; scaler_index++)
        {
            if((gdisp.scaler[scaler_index].status & SCALER_USED) && (gdisp.scaler[scaler_index].screen_index == screen_id))
            {
                if(disp_get_screen_scan_mode(tv_mod) == 1)//interlace output
                {
                    Scaler_Set_Outitl(scaler_index, TRUE);
                }
                else
                {
                    Scaler_Set_Outitl(scaler_index, FALSE);
                }
            }
        }
#endif
	tcon1_set_tv_mode(screen_id,tv_mod);
	TVE_set_tv_mode(screen_id, tv_mod);
	Disp_TVEC_DacCfg(screen_id, tv_mod);

	tcon1_open(screen_id);
	Disp_TVEC_Open(screen_id);

	Disp_Switch_Dram_Mode(DISP_OUTPUT_TYPE_TV, tv_mod);
#ifdef __LINUX_OSAL__
	{
		disp_gpio_set_t  gpio_info[1];
		__hdle gpio_pa_shutdown;
		__s32 ret;

		memset(gpio_info, 0, sizeof(disp_gpio_set_t));
		ret = OSAL_Script_FetchParser_Data("audio_para","audio_pa_ctrl", (int *)gpio_info, sizeof(disp_gpio_set_t)/sizeof(int));
		if(ret == 0) {
			gpio_pa_shutdown = OSAL_GPIO_Request(gpio_info, 1);
			if(!gpio_pa_shutdown) {
				DE_WRN("audio codec_wakeup request gpio fail!\n");
			} else {
				OSAL_GPIO_DevWRITE_ONEPIN_DATA(gpio_pa_shutdown, 0, "audio_pa_ctrl");
			}
		}
	}
#endif
	gdisp.screen[screen_id].b_out_interlace = disp_get_screen_scan_mode(tv_mod);
	gdisp.screen[screen_id].status |= TV_ON;
	gdisp.screen[screen_id].lcdc_status |= LCDC_TCON1_USED;
	gdisp.screen[screen_id].output_type = DISP_OUTPUT_TYPE_TV;
#if (defined CONFIG_ARCH_SUN7I)
	Disp_set_out_interlace(screen_id);
#endif
#ifdef __LINUX_OSAL__
	Display_set_fb_timming(screen_id);
#endif
	}
	return DIS_SUCCESS;
}
Ejemplo n.º 7
0
__s32 BSP_disp_tv_close(__u32 sel)
{
	if (gdisp.screen[sel].status & TV_ON) {
		Image_close(sel);
		TCON1_close(sel);
		Disp_TVEC_Close(sel);

		tve_clk_off(sel);
		image_clk_off(sel);
		lcdc_clk_off(sel);

		if (sunxi_is_sun5i()) {
			int scaler_index;

			Disp_de_flicker_enable(sel, 2);
			/* must close immediately, because vbi may not come */
			DE_BE_Set_Outitl_enable(sel, FALSE);
			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);
		}

		{
			user_gpio_set_t gpio_info[1];
			__hdle gpio_pa_shutdown;
			__s32 ret;

			memset(gpio_info, 0, sizeof(user_gpio_set_t));
			ret =
			    script_parser_fetch("audio_para", "audio_pa_ctrl",
						(int *)gpio_info,
						sizeof(user_gpio_set_t) /
						sizeof(int));
			if (ret < 0) {
				DE_WRN("fetch script data "
				       "audio_para.audio_pa_ctrl fail\n");
			} else {
				gpio_pa_shutdown =
					OSAL_GPIO_Request(gpio_info, 1);
				if (!gpio_pa_shutdown) {
					DE_WRN("audio codec_wakeup request "
					       "gpio fail!\n");
				} else {
					OSAL_GPIO_DevWRITE_ONEPIN_DATA
						(gpio_pa_shutdown, 1,
						 "audio_pa_ctrl");
				}
			}
		}

		gdisp.screen[sel].b_out_interlace = 0;
		gdisp.screen[sel].status &= ~TV_ON;
		gdisp.screen[sel].lcdc_status &= ~LCDC_TCON1_USED;
		gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_NONE;
		gdisp.screen[sel].pll_use_status &=
		    ((gdisp.screen[sel].pll_use_status == VIDEO_PLL0_USED) ?
		     ~VIDEO_PLL0_USED : ~VIDEO_PLL1_USED);

		Disp_set_out_interlace(sel);
	}
	return DIS_SUCCESS;
}
Ejemplo n.º 8
0
__s32 BSP_disp_tv_open(__u32 sel)
{
	if (!(gdisp.screen[sel].status & TV_ON)) {
		__disp_tv_mode_t tv_mod;

		tv_mod = gdisp.screen[sel].tv_mode;

		image_clk_on(sel);
		/*
		 * set image normal channel start bit , because every
		 * de_clk_off( )will reset this bit
		 */
		Image_open(sel);

		disp_clk_cfg(sel, DISP_OUTPUT_TYPE_TV, tv_mod);
		tve_clk_on(sel);
		lcdc_clk_on(sel);

		BSP_disp_set_output_csc(sel, DISP_OUTPUT_TYPE_TV,
					gdisp.screen[sel].
					iep_status & DRC_USED);
		DE_BE_set_display_size(sel, tv_mode_to_width(tv_mod),
				       tv_mode_to_height(tv_mod));
		DE_BE_Output_Select(sel, sel);

		if (sunxi_is_sun5i()) {
			int scaler_index;

			DE_BE_Set_Outitl_enable(sel,
					Disp_get_screen_scan_mode(tv_mod));

			for (scaler_index = 0; scaler_index < 2; scaler_index++)
				if ((gdisp.scaler[scaler_index].
				     status & SCALER_USED)
				    && (gdisp.scaler[scaler_index].
					screen_index == sel)) {
					/* interlace output */
					if (Disp_get_screen_scan_mode(tv_mod) ==
					    1)
						Scaler_Set_Outitl(scaler_index,
								  TRUE);
					else
						Scaler_Set_Outitl(scaler_index,
								  FALSE);
				}
		}

		TCON1_set_tv_mode(sel, tv_mod);
		TVE_set_tv_mode(sel, tv_mod);
		Disp_TVEC_DacCfg(sel, tv_mod);

		TCON1_open(sel);
		Disp_TVEC_Open(sel);

		Disp_Switch_Dram_Mode(DISP_OUTPUT_TYPE_TV, tv_mod);
		Disp_de_flicker_enable(sel, TRUE);

		{
			user_gpio_set_t gpio_info[1];
			__hdle gpio_pa_shutdown;
			__s32 ret;

			memset(gpio_info, 0, sizeof(user_gpio_set_t));
			ret =
			    script_parser_fetch("audio_para", "audio_pa_ctrl",
						(int *)gpio_info,
						sizeof(user_gpio_set_t) /
						sizeof(int));
			if (ret < 0) {
				DE_WRN("fetch script data "
				       "audio_para.audio_pa_ctrl fail\n");
			} else {
				gpio_pa_shutdown =
					OSAL_GPIO_Request(gpio_info, 1);
				if (!gpio_pa_shutdown) {
					DE_WRN("audio codec_wakeup request "
					       "gpio fail!\n");
				} else {
					OSAL_GPIO_DevWRITE_ONEPIN_DATA
						(gpio_pa_shutdown, 0,
						 "audio_pa_ctrl");
				}
			}
		}
		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_TCON1_USED;
		gdisp.screen[sel].output_type = DISP_OUTPUT_TYPE_TV;

		Disp_set_out_interlace(sel);
		Display_set_fb_timing(sel);
	}
	return DIS_SUCCESS;
}
Ejemplo n.º 9
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;
}