Exemple #1
0
DISP_STATUS DISP_Init(UINT32 fbVA, UINT32 fbPA, BOOL isLcmInited)
{
    DISP_STATUS r = DISP_STATUS_OK;
    
    if (!disp_drv_init_context()) {
        return DISP_STATUS_NOT_IMPLEMENTED;
    }

//	/* power on LCD before config its registers*/
//	LCD_CHECK_RET(LCD_Init());

    disp_drv_init_ctrl_if();

	// For DSI PHY current leakage SW workaround.
	///TODO: HOW!!!
#if !defined (MTK_HDMI_SUPPORT)
	if((lcm_params->type!=LCM_TYPE_DSI) && (lcm_params->type!=LCM_TYPE_DPI)){
		DSI_PHY_clk_switch(TRUE);
		DSI_PHY_clk_switch(FALSE);
	}
#endif

    r = (disp_drv->init) ?
        (disp_drv->init(fbVA, fbPA, isLcmInited)) :
        DISP_STATUS_NOT_IMPLEMENTED;


    return r;
}
Exemple #2
0
DISP_STATUS DISP_SetBacklight_mode(UINT32 mode)
{
	DISP_STATUS ret = DISP_STATUS_OK;

	disp_drv_init_context();

	LCD_WaitForNotBusy();
	if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode == CMD_MODE)
		DSI_CHECK_RET(DSI_WaitForNotBusy());

	if (!lcm_drv->set_backlight) {
		ret = DISP_STATUS_NOT_IMPLEMENTED;
		goto End;
	}

	if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE)
		DSI_SetMode(CMD_MODE);

	lcm_drv->set_backlight_mode(mode);

	if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE)
		DSI_SetMode(lcm_params->dsi.mode);

End:
	return ret;

}
Exemple #3
0
UINT32 DISP_GetPanelBPP(void)
{
	PANEL_COLOR_FORMAT fmt;
	disp_drv_init_context();

	if(disp_drv->get_panel_color_format == NULL) 
	{
		return DISP_STATUS_NOT_IMPLEMENTED;
	}

	fmt = disp_drv->get_panel_color_format();
	switch(fmt)
	{
		case PANEL_COLOR_FORMAT_RGB332:
			return 8;
		case PANEL_COLOR_FORMAT_RGB444:
			return 12;
		case PANEL_COLOR_FORMAT_RGB565:
			return 16;
		case PANEL_COLOR_FORMAT_RGB666:
			return 18;
		case PANEL_COLOR_FORMAT_RGB888:
			return 24;
		default:
			return 0;
	}
}
PANEL_COLOR_FORMAT DISP_GetPanelColorFormat(void)
{
    disp_drv_init_context();
        
    return (disp_drv->get_panel_color_format) ?
           (disp_drv->get_panel_color_format()) :
           DISP_STATUS_NOT_IMPLEMENTED;
}
Exemple #5
0
UINT32 DISP_GetOutputBPPforDithering(void)
{
	disp_drv_init_context();

	return (disp_drv->get_dithering_bpp) ?
		(disp_drv->get_dithering_bpp()) :
		DISP_STATUS_NOT_IMPLEMENTED;
}
DISP_STATUS DISP_SetFrameBufferAddr(UINT32 fbPhysAddr)
{
    disp_drv_init_context();
        
    return (disp_drv->set_fb_addr) ?
           (disp_drv->set_fb_addr(fbPhysAddr)) :
           DISP_STATUS_NOT_IMPLEMENTED;
}
Exemple #7
0
DISP_STATUS DISP_Capture_Framebuffer(unsigned int pvbuf, unsigned int bpp)
{
	DISP_FUNC();
	disp_drv_init_context();

	return (disp_drv->capture_framebuffer) ?
		(disp_drv->capture_framebuffer(pvbuf, bpp)) :
		DISP_STATUS_NOT_IMPLEMENTED;
}
Exemple #8
0
DISP_STATUS DISP_Capture_Videobuffer(unsigned int pvbuf, unsigned int bpp, unsigned int video_rotation)
{
	DISP_FUNC();
	if (down_interruptible(&sem_update_screen)) {
		DISP_LOG("ERROR: Can't get sem_update_screen in DISP_Capture_Videobuffer()\n");
		return DISP_STATUS_ERROR;
	}
	disp_drv_init_context();
	LCD_Capture_Videobuffer(pvbuf, bpp, video_rotation);
	up(&sem_update_screen);
	return DISP_STATUS_OK;
}
DISP_STATUS DISP_PanelEnable(BOOL enable)
{

    static BOOL s_enabled = FALSE;

    disp_drv_init_context();

    if (!lcm_drv->suspend || !lcm_drv->resume) {
        return DISP_STATUS_NOT_IMPLEMENTED;
    }

	if (enable && !s_enabled) {
		s_enabled = TRUE;

		if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE)
		{		
			DSI_SetMode(CMD_MODE);
		}

		lcm_drv->resume();

		if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE)
		{
			//DSI_clk_HS_mode(1);
			DSI_SetMode(lcm_params->dsi.mode);
			
			//DPI_CHECK_RET(DPI_EnableClk());
			//DSI_CHECK_RET(DSI_EnableClk());
		}
	}
	else if (!enable && s_enabled)
	{
		LCD_CHECK_RET(LCD_WaitForNotBusy());
		if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode == CMD_MODE)
			DSI_CHECK_RET(DSI_WaitForNotBusy());
		s_enabled = FALSE;

		if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE)
		{		
			DPI_CHECK_RET(DPI_DisableClk());
			udelay(200*1000);
			DSI_Reset();
			DSI_clk_HS_mode(0);
			DSI_SetMode(CMD_MODE);
		}

		lcm_drv->suspend();
	}

    return DISP_STATUS_OK;
}
Exemple #10
0
BOOL DISP_EsdRecoverCapbility(void)
{
    if(!disp_drv_init_context())
        return FALSE;

    if(lcm_drv->esd_check && lcm_drv->esd_recover)
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}
DISP_STATUS DISP_PowerEnable(BOOL enable)
{
    static BOOL s_enabled = FALSE;

	if (enable != s_enabled)
		s_enabled = enable;
	else
		return ;

    disp_drv_init_context();
       
    return (disp_drv->enable_power) ?
           (disp_drv->enable_power(enable)) :
           DISP_STATUS_NOT_IMPLEMENTED;
}
DISP_STATUS DISP_Init(UINT32 fbVA, UINT32 fbPA, BOOL isLcmInited)
{
    if (!disp_drv_init_context()) {
        return DISP_STATUS_NOT_IMPLEMENTED;
    }

    /* power on LCD before config its registers*/
    LCD_CHECK_RET(LCD_Init());

    disp_drv_init_ctrl_if();
//    disp_drv_set_io_driving_current();
    
    return (disp_drv->init) ?
           (disp_drv->init(fbVA, fbPA, isLcmInited)) :
           DISP_STATUS_NOT_IMPLEMENTED;
}
Exemple #13
0
DISP_STATUS DISP_GetPWM(UINT32 divider, unsigned int *freq)
{
	DISP_STATUS ret = DISP_STATUS_OK;
	
	disp_drv_init_context();

	if (!lcm_drv->get_pwm) {
		ret = DISP_STATUS_NOT_IMPLEMENTED;
		goto End;
	}

	*freq = lcm_drv->get_pwm(divider);

End:
	return ret;
}
BOOL DISP_SelectDevice(const char* lcm_name)
{
	LCD_STATUS ret;

	ret = LCD_Init();
	printf("ret of LCD_Init() = %d\n", ret);

	lcm_drv = disp_drv_get_lcm_driver(lcm_name);
	if (NULL == lcm_drv)
	{
		printf("%s, disp_drv_get_lcm_driver() returns NULL\n", __func__);
		return FALSE;
	}

	disp_dump_lcm_parameters(lcm_params);
	return disp_drv_init_context();
}
DISP_STATUS DISP_SetBacklight(UINT32 level)
{
	DISP_STATUS ret = DISP_STATUS_OK;

	disp_drv_init_context();

	LCD_WaitForNotBusy();

	if (!lcm_drv->set_backlight) {
		ret = DISP_STATUS_NOT_IMPLEMENTED;
		goto End;
	}

	lcm_drv->set_backlight(level);

End:
	return ret;
}
Exemple #16
0
DISP_STATUS DISP_SetPWM(UINT32 divider)
{
	DISP_STATUS ret = DISP_STATUS_OK;

	disp_drv_init_context();

	LCD_WaitForNotBusy();
	if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode == CMD_MODE)
		DSI_CHECK_RET(DSI_WaitForNotBusy());

	if (!lcm_drv->set_pwm) {
		ret = DISP_STATUS_NOT_IMPLEMENTED;
		goto End;
	}

	lcm_drv->set_pwm(divider);
End:
	return ret;
}
Exemple #17
0
DISP_STATUS DISP_ConfigImmediateUpdate(BOOL enable)
{
	disp_drv_init_context();

	if(enable == TRUE)
	{
		LCD_TE_Enable(FALSE);
	}
	else
	{
		if(disp_drv->init_te_control)
			disp_drv->init_te_control();
		else
			return DISP_STATUS_NOT_IMPLEMENTED;
	}

	is_immediateupdate = enable;

	return DISP_STATUS_OK;
}
UINT32 DISP_GetVRamSize(void)
{
    // Use a local static variable to cache the calculated vram size
    //    
    static UINT32 vramSize = 0;

    if (0 == vramSize)
    {
        disp_drv_init_context();

        vramSize = disp_drv->get_vram_size();
        
        // Align vramSize to 1MB
        //
        vramSize = ALIGN_TO_POW_OF_2(vramSize, 0x100000);

        //printf("DISP_GetVRamSize: %u bytes\n", vramSize);
    }

    return vramSize;
}
Exemple #19
0
BOOL DISP_EsdCheck(void)
{
    BOOL result = FALSE;

    disp_drv_init_context();

    if(lcm_drv->esd_check == NULL)
    {
        return FALSE;
    }
    
#if defined(CONFIG_ARCH_MT6575)
    if(get_chip_eco_ver()==CHIP_E1 && lcm_params->type==LCM_TYPE_DSI)
    {
        ///DSI read is inavailable for E1
        return FALSE;
    }
#endif

    if (down_interruptible(&sem_update_screen)) {
        DISP_LOG("ERROR: Can't get sem_update_screen in DISP_EsdCheck()\n");
        return FALSE;
    }

    if(is_lcm_in_suspend_mode)
    {
        up(&sem_update_screen);
        return FALSE;
    }

    LCD_CHECK_RET(LCD_WaitForNotBusy());
    if(lcm_params->type==LCM_TYPE_DSI)
        DSI_CHECK_RET(DSI_WaitForNotBusy());

     result = lcm_drv->esd_check();
    
    up(&sem_update_screen);

    return result;
}
Exemple #20
0
DISP_STATUS DISP_PowerEnable(BOOL enable)
{
	DISP_STATUS ret = DISP_STATUS_OK;

	static BOOL s_enabled = TRUE;

	if (enable != s_enabled)
		s_enabled = enable;
	else
		return ret;

	if (down_interruptible(&sem_update_screen)) {
		DISP_LOG("ERROR: Can't get sem_update_screen in DISP_PowerEnable()\n");
		return DISP_STATUS_ERROR;
	}

	disp_drv_init_context();

	is_engine_in_suspend_mode = enable ? FALSE : TRUE;

	ret = (disp_drv->enable_power) ?
		(disp_drv->enable_power(enable)) :
		DISP_STATUS_NOT_IMPLEMENTED;

    if (enable) {
        DAL_OnDispPowerOn();
    }
	
	// If in direct link mode, re-start LCD after system resume
	//
	if (enable && -1 != direct_link_layer) {
		LCD_CHECK_RET(LCD_StartTransfer(FALSE));
	}

	up(&sem_update_screen);


	return ret;
}
UINT32 DISP_GetScreenHeight(void)
{
    disp_drv_init_context();
    return lcm_params->height;
}
UINT32 DISP_GetScreenWidth(void)
{
    disp_drv_init_context();
    return lcm_params->width;
}
Exemple #23
0
DISP_STATUS DISP_PanelEnable(BOOL enable)
{
	static BOOL s_enabled = TRUE;
	DISP_STATUS ret = DISP_STATUS_OK;

	DISP_LOG("panel is %s\n", enable?"enabled":"disabled");

	if (down_interruptible(&sem_update_screen)) {
		DISP_LOG("ERROR: Can't get sem_update_screen in DISP_PanelEnable()\n");
		return DISP_STATUS_ERROR;
	}

	disp_drv_init_context();

	is_lcm_in_suspend_mode = enable ? FALSE : TRUE;

	if (!lcm_drv->suspend || !lcm_drv->resume) {
		ret = DISP_STATUS_NOT_IMPLEMENTED;
		goto End;
	}

	if (enable && !s_enabled) {
		s_enabled = TRUE;

		if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE)
		{		
			DSI_SetMode(CMD_MODE);
		}

		lcm_drv->resume();

		if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE)
		{
			//DSI_clk_HS_mode(1);
			DSI_SetMode(lcm_params->dsi.mode);
			
			//DPI_CHECK_RET(DPI_EnableClk());
			//DSI_CHECK_RET(DSI_EnableClk());

			msleep(200);
		}
	}
	else if (!enable && s_enabled)
	{
		LCD_CHECK_RET(LCD_WaitForNotBusy());
		if(lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode == CMD_MODE)
			DSI_CHECK_RET(DSI_WaitForNotBusy());
		s_enabled = FALSE;

		if (lcm_params->type==LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MODE)
		{		
			DPI_CHECK_RET(DPI_DisableClk());
			//msleep(200);
			DSI_Reset();
			DSI_clk_HS_mode(0);
			DSI_SetMode(CMD_MODE);
		}

		lcm_drv->suspend();
	}

End:
	up(&sem_update_screen);

	return ret;
}