//u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_display.c LCD_OPEN_FUNC() lcd->set_open_func() //"u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c disp_lcd_set_open_func //u-boot-2018/common/board_r.c board_init_r initcall_run_list(init_sequence_r) //u-boot-2018/board/sunxi/board_common.c board_early_init_r initr_sunxi_display //这里如果定义了CONFIG_DISP2_SUNXI就会进入屏幕初始化流程 get_boot_work_mode //这里会读取USB工作状态,如果系统进入烧写模式,会直接跳出initr_sunxi_display函数 //u-boot-2018/drivers/video/sunxi/disp2/disp/dev_disp.c drv_disp_init //u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_display.c bsp_disp_init //u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c disp_init_lcd lcd->init(lcd) disp_lcd_init lcd_parse_panel_para //获取设备树的屏参数据 disp_init_hdmi disp_init_edp board_late_init axp_battery_status_handle //u-boot-2018/board/sunxi/power_manage.c sunxi_bat_low_vol_handle disp_ioctl //这里如果定义了CONFIG_DISP2_SUNXI就会进入屏幕初始化流程 //u-boot-2018/drivers/video/sunxi/disp2/disp/dev_disp.c drv_lcd_enable drv_lcd_open_callback //回调函数,通过add_timer定时器轮询执行屏驱动里的函数(即下面的LCD_OPEN_FUNC),这里要在uboot结束前轮询完所有函数,如果不能轮询完就会有点不亮屏的问题,因此这个delay时间很关键 lcd_timer[sel].expires = flow->func[i].delay; add_timer(&lcd_timer[sel]); bsp_disp_lcd_get_open_flow //u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_display.c disp_get_lcd //u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c bsp_disp_feat_get_num_screens lcd->get_open_flow //u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c disp_lcd_get_open_flow //u-boot-2018/drivers/video/sunxi/disp2/disp/lcd/k101im2byl02l.c LCD_open_flow //.cfg_open_flow=LCD_open_flow LCD_OPEN_FUNC(sel, LCD_power_on, 100); //这里的100即为add_timer定时器的delay时间 lcd->set_open_func() //u-boot-2018/drivers/video/sunxi/disp2/disp/de/disp_lcd.c disp_lcd_set_open_func lcdp->open_flow.func[lcdp->open_flow.func_num].func = func; lcdp->open_flow.func[lcdp->open_flow.func_num].delay = delay; //将delay传给add_timer定时器 lcdp->open_flow.func_num ++; LCD_OPEN_FUNC(sel, LCD_panel_init, 200); LCD_OPEN_FUNC(sel, sunxi_lcd_tcon_enable, 50); LCD_OPEN_FUNC(sel, LCD_bl_open, 0);



