Esempio n. 1
0
__s32 DRV_lcd_open(__u32 sel)
{
	__u32 i = 0;
	__lcd_flow_t *flow;

	if (g_disp_drv.b_lcd_open[sel] == 0) {
		BSP_disp_lcd_open_before(sel);

		flow = BSP_disp_lcd_get_open_flow(sel);
		for (i = 0; i < flow->func_num; i++) {
			__u32 timeout = flow->func[i].delay * HZ / 1000;

			flow->func[i].func(sel);

			set_current_state(TASK_INTERRUPTIBLE);
			schedule_timeout(timeout);

		}

		BSP_disp_lcd_open_after(sel);

		g_disp_drv.b_lcd_open[sel] = 1;
	}

	return 0;
}
// [before][step_0][delay_0][step_1][delay_1]......[step_n-2][delay_n-2][step_n-1][delay_n-1][after]
void DRV_lcd_open_callback(void *parg)
{
    __lcd_flow_t *flow;
    __u32 sel = (__u32)parg;
    __s32 i = lcd_flow_cnt[sel]++;

    flow = BSP_disp_lcd_get_open_flow(sel);
    __inf("lcd %d timeout=%d\n", i, flow->func[i].delay);
	if(i < flow->func_num)
    {
    	flow->func[i].func(sel);
        if(flow->func[i].delay == 0)
        {
            DRV_lcd_open_callback((void*)sel);
        }
        else
        {
            wBoot_timer_start(lcd_timer[sel], flow->func[i].delay, 0);
    	}
    }
    else if(i == flow->func_num)
    {
        BSP_disp_lcd_open_after(sel);
        lcd_op_finished[sel] = 1;
    }
}
Esempio n. 3
0
void disp_lcd_open_timer(unsigned long sel)
{
    __lcd_flow_t *flow;
    __u32 timeout;

    flow = BSP_disp_lcd_get_open_flow(sel);
    
	if((g_disp_drv.b_lcd_open[sel] == 0) && (flow->cur_step < (flow->func_num-1)))
	{
        if(flow->cur_step == 0)
	    {
            BSP_disp_lcd_open_before(sel);
        }
        
	    flow->func[flow->cur_step].func(sel);

        timeout = flow->func[flow->cur_step].delay*HZ/1000;
        g_disp_drv.disp_timer[sel].function = &disp_lcd_open_timer;
        g_disp_drv.disp_timer[sel].data = sel;//(unsigned int)&g_fbi;
        g_disp_drv.disp_timer[sel].expires = jiffies + timeout;
        add_timer(&g_disp_drv.disp_timer[sel]);

        flow->cur_step ++;
	}
	
    return;
}
Esempio n. 4
0
void disp_lcd_open_flow_init_status(__u32 sel)
{
    __lcd_flow_t *flow;

    flow = BSP_disp_lcd_get_open_flow(sel);
    flow->cur_step = 0;
}
Esempio n. 5
0
//run lcd close flow
__s32 disp_lcd_close_late(__u32 sel)
{
    __u32 i = 0;
    __lcd_flow_t *close_flow;
    __lcd_flow_t *open_flow;

	if(g_disp_drv.b_lcd_open[sel] == 0)
	{
        open_flow = BSP_disp_lcd_get_open_flow(sel);
        if(open_flow->cur_step != (open_flow->func_num-1)) //if there is task in timer list,cancel it
        {
            del_timer(&g_disp_drv.disp_timer[sel]);
        }

        BSP_disp_lcd_close_befor(sel);
        close_flow = BSP_disp_lcd_get_close_flow(sel);
	    for(i=0; i<close_flow->func_num; i++)
	    {
	        __u32 timeout = close_flow->func[i].delay*HZ/1000;

	        close_flow->func[i].func(sel);

	    	set_current_state(TASK_INTERRUPTIBLE);
	    	schedule_timeout(timeout);
	    }
	    BSP_disp_lcd_close_after(sel);

		g_disp_drv.b_lcd_open[sel] = 0;
	}
    return 0;
}
Esempio n. 6
0
void backlight_late_resume(struct early_suspend *h)
{
    int i = 0;

    printk("==display late resume enter\n");

    BSP_disp_clk_on(2);

    for(i=0; i<2; i++)
    {
        if(suspend_output_type[i] == DISP_OUTPUT_TYPE_LCD)
        {

            __lcd_flow_t *flow;
            
            if(2 == suspend_prestep)//late resume from  resume
            {
                flow =BSP_disp_lcd_get_open_flow(i);
                while(flow->cur_step != (flow->func_num-1))//open flow is finished  accept the last one
                {
                    __u32 timeout = 10*HZ/1000;
        	    	set_current_state(TASK_INTERRUPTIBLE);
        	    	schedule_timeout(timeout);
                }
                disp_lcd_open_late(i);
            }
            else if(0 == suspend_prestep)//late resume from early  suspend
            {
                DRV_lcd_open(i);
            }
            jiffies_late_resume = jiffies;
            //printk("==jiffies_resume:%ld,  late_resume:%ld\n", jiffies_resume, jiffies_late_resume);
            
        }
        else if(suspend_output_type[i] == DISP_OUTPUT_TYPE_TV)
        {
            BSP_disp_tv_open(i);
        }
        else if(suspend_output_type[i] == DISP_OUTPUT_TYPE_VGA)
        {
            BSP_disp_vga_open(i);
        }
        else if(suspend_output_type[i] == DISP_OUTPUT_TYPE_HDMI)
        {
            BSP_disp_hdmi_open(i);
        }
    }

    suspend_status &= (~1);
    suspend_prestep = 3;
}
Esempio n. 7
0
//run the last step of lcd open flow(backlight)
__s32 disp_lcd_open_late(__u32 sel)
{
    __lcd_flow_t *flow;

	if(g_disp_drv.b_lcd_open[sel] == 0)
	{
        flow = BSP_disp_lcd_get_open_flow(sel);
        flow->func[flow->func_num-1].func(sel);
        flow->cur_step = 0;
        
	    BSP_disp_lcd_open_after(sel);

		g_disp_drv.b_lcd_open[sel] = 1;
	}

    return 0;
}
Esempio n. 8
0
__s32 DRV_lcd_open(__u32 sel)
{    
    __u32 i = 0;
    __lcd_flow_t *flow;
    
    BSP_disp_lcd_open_before(sel);

    flow = BSP_disp_lcd_get_open_flow(sel);
    for(i=0; i<flow->func_num; i++)
    {
        flow->func[i].func(sel);
        esKRNL_TimeDly(flow->func[i].delay / 10);
    }

    BSP_disp_lcd_open_after(sel);

    return EPDK_OK;
}