关键流程设计
4 Dec 2024
Read time: 1 minute(s)
初始化流程
在 menuconfig 中使能 LVDS 显示接口和 simple panel 后,显示驱动的初始化过程如下:
-
DE 和 DI 匹配
DE 和 DI 匹配是通过遍历 drivers 指针数组,通过 component_type 来匹配 menuconfig 指定的 DI。
DE/DI 的 driver 存放在一个指针数组中。DE 默认使能,DI 通过 menuconfig 选择一种接口标准。static struct platform_driver *drivers[] = { #ifdef AIC_DISP_DE_DRV &artinchip_de_driver, #endif #ifdef AIC_DISP_RGB &artinchip_rgb_driver, #endif #ifdef AIC_DISP_LVDS &artinchip_lvds_driver, #endif #ifdef AIC_DISP_MIPI_DSI &artinchip_dsi_driver #endif #ifdef AIC_DISP_MIPI_DBI &artinchip_dbi_driver #endif };
-
Panel 的匹配panel_com.c 保存了一个 panel 指针数组,通过 menuconfig 选择其中一个。
static struct aic_panel *panels[] = { #if defined(AIC_DISP_RGB) && defined(AIC_SIMPLE_PANEL) &aic_panel_rgb, #endif #if defined(AIC_DISP_LVDS) && defined(AIC_SIMPLE_PANEL) &aic_panel_lvds, #endif #ifdef AIC_DSI_SIMPLE_PANEL &dsi_simple, #endif #ifdef AIC_PANEL_DSI_XM91080 &dsi_xm91080, #endif #ifdef AIC_PANEL_DSI_ST7797 &dsi_st7797, #endif #ifdef AIC_PANEL_DSI_ST7703 &dsi_st7703, #endif ... };
struct aic_panel*aic_find_panel(u32connector_type)
会遍历 panels 指针数组,获取一个跟 DI 匹配的 LCD panel。simple panel 为不需要初始化操作的 LCD 提供驱动支持,例如 RGB、LVDS 屏幕。