主要是概括一个mipi dsi驱动
关键字:
S6D7AA0X01_panel
文件:
vide/sunxi/disp2/disp/lcd/S6D7AA0X01.h
vide/sunxi/disp2/disp/lcd/S6D7AA0X01.c
vide/sunxi/disp2/disp/lcd/panels.h
vide/sunxi/disp2/disp/lcd/panels.c
文件分析:
1. 屏S6D7AA0X01.c和h中:
定义__lcd_panel_t S6D7AA0X01_panel结构,并导出
c文件中主要是一个结构,结构包含name和func,
func {
.cfg_panel_info = LCD_cfg_panel_info, //gamma校正,色彩映射
.cfg_open_flow = LCD_open_flow, //打开电源,屏初始化,打开背光
.cfg_close_flow = LCD_close_flow,
.lcd_user_define_func =
}
2.panels.h和panels.c
lcd_init
|
--> sunix_disp_get_source_ops()
//这个函数其实是个初始化,传递实际调用函数地址
//如背光sunxi_lcd_backlight_enable = bsp_disp_lcd_backlight_enable
//过程后面初始化屏,点背光调用sunxi_lcd_backlight_enable
|
--> lcd_set_panel_funcs()
|
--> sunxi_lcd_set_panel_funs(panel_array[i]->name, &panel_array[i]->func);
|
--> &S6D7AA0X01_panel //panel_array[]
面向过程,看代码一般是先看底,然后反向找实际调用过程,
然后去追代码就感觉,程序的编写就相反,把实际调用函数的地址一层层传递下来
传递过程与文件路径:
bsp_disp_lcd_backlight_enable() //disp2/disp/de/disp_display.c
lcd->backlight_enable = disp_lcd_backlight_enable; //disp2/disp/de/disp_lcd.c
bsp_disp_lcd_backlight //disp2/disp/de/disp_disp.c
|
---> ret = lcd->backlight_enable(lcd);
src_ops->sunxi_lcd_backlight_enable = bsp_disp_lcd_backlight_enable; //disp2/disp/dev_disp.c
sunxi_lcd_backlight_enable(en); //屏中,背光最直接使能调用