Edit online

关键流程设计

4 Dec 2024
Read time: 1 minute(s)

初始化流程

在 menuconfig 中使能 LVDS 显示接口和 simple panel 后,显示驱动的初始化过程如下:

/probe

  • 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 屏幕。

  • 背光控制

    Luban-Lite 提供两种方式控制背光:

    • GPIO

    • PWM

    在 menuconfig 中配置 backlight,详情参考 背光配置