源码和框架说明
源码说明
本模块源代码的目录结构如下:
文件名 | 含义 |
---|---|
drv_fb.c | 显示驱动框架 |
drv_de.c | 显示引擎驱动 |
drv_rgb.c | RGB 显示接口驱动 |
drv_lvds.c | LVDS 显示接口驱动 |
drv_dsi.c | MIPI-DSI 显示接口驱动 |
drv_dbi.c | MIPI-DBI 显示接口驱动 |
disp_com.h | 显示驱动共用的头文件,定义了共用数据结构、全局函数等 |
disp_conf.h | 显示接口配置文件 |
disp_ccm.h | CCM 色彩矩阵配置文件 |
disp_gamma.h | Gamma 配置文件 |
文件名 | 含义 |
---|---|
panel_com.c | LCD 屏公用代码 |
panel_com.h | 显示驱动共用的头文件,其中定义了共用数据结构、全局函数等 |
panel-simple.c | 为 RGB 和 LVDS 接口提供的一款通用的 LCD 驱动 |
panel_dsi.c | 为 MIPI-DSI 屏幕封装的函数,方便屏幕适配 |
panel_dsi.h | 为 MIPI-DSI 屏幕封装的函数的头文件 |
panel_dbi.c | 为 MIPI-DBI 协议封装的函数,方便屏幕适配 |
panel_dbi.h | 为 MIPI-DBI 协议封装函数的头文件 |
panel_xxxx.c | 为屏驱 IC 适配的专用驱动 |
文件名 | 含义 |
---|---|
aic_hal_rgb.c | RGB 显示接口 HAL 层,操作 RGB 接口寄存器 |
aic_hal_de.c | DE 显示引擎 HAL 层,操作 DE 接口寄存器 |
aic_hal_dsi.c | MIPI-DSI 显示接口 HAL 层,操作 DSI 接口寄存器 |
aic_hal_dbi.c | MIPI-DBI 显示接口 HAL 层,操作 DBI 接口寄存器 |
软硬件设计
在 Chip 运行过程中,显示接口只能输出一种标准信号,其数据链路是确定的。显示接口硬件框图如下所示:
MIPI-DBI 协议
Mobile Industry Processor Interface - Display Bus Interface (MIPI-DBI) 是一种用于显示接口的协议,主要用于移动设备中的显示屏连接。MIPI-DBI 是软件虚拟出来的 device,为 MIPI-DBI 协议提供支持。MIPI-DBI 协议支持多种类型的数据传输方式:
-
Type A: Motorola 6800
-
Type B: Intel 8080
-
Type C: SPI
ArtInChip 平台支持 MIPI-DBI 协议中的 Type B 和 Type C,可以与使用这两种类型的 MIPI-DBI 接口的显示屏进行通信。
结构体定义
- struct platform_driverDE 和 DI 在显示框架上属于同级模块,都是 DSS 的 component,使用 struct platform_driver 来表示。
struct platform_driver { const char *name; int component_type; int (*probe)(void); void (*remove)(void); union { struct di_funcs *di_funcs; struct de_funcs *de_funcs; }; };
- struct aic_panelLCD panel 使用 struct aic_panel 来表示。严格来说,panel component 不算一个 driver,只是一些屏参数和回调函数的集合。
struct aic_panel { const char *name; struct aic_panel_funcs *funcs; struct aic_panel_callbacks callbacks; const struct display_timing *timings; union { struct panel_rgb *rgb; struct panel_lvds *lvds; struct panel_dsi *dsi; struct panel_dbi *dbi; }; int connector_type; };
-
struct aic_panel_funcs*funcs; 由 panel 提供,供 fb 调用的回调
-
struct aic_panel_callbackscallbacks; 由 DE/DI 提供,供 panel 调用的回调
-
在 panel 提供的 struct aic_panel_funcs 中,会调用 DE/DI 提供的 struct aic_panel_callbacks。
callbacks 的设计是为了满足 DE、DI、panel 三个硬件模块的初始化时序,包含先后顺序、延迟大小等。时序约束主要来自 panel 侧。
-