一、MTK Plane实现分析
这个代码模块是 MediaTek DRM (Direct Rendering Manager) 驱动程序的一部分,主要负责处理 DRM plane(显示层)的相关功能。Plane 是 DRM 框架中的核心概念,用于表示显示叠加层(overlay),可以叠加在 CRTC(Controller)上,支持多层合成、缩放、格式转换等操作。该模块针对 MediaTek SoC(如 MT6885、MT6983 等)优化,支持特定硬件特性,如 MML(Multi-Media Layer,用于多媒体处理)、secure buffer(安全缓冲区,用于 DRM 内容保护)、双管道缩放(dual pipe scaling)和低功耗模式(如 AOD)。代码结合了 DRM 核心框架的接口(如 drm_plane_funcs 和 drm_plane_helper_funcs),并扩展了 MediaTek 特定的属性和状态管理。
下面我将代码分为几个主要部分,分析其实现内容和作用。分析基于提供的 mtk_drm_plane.c 和 mtk_drm_plane.h 文件。
1. 头文件和常量定义(mtk_drm_plane.h 中的主要部分)
- 实现:
- 定义了枚举类型,如 DISP_ORIENTATION(旋转方向)、DISP_FORMAT(像素格式,如 RGB565、ARGB8888)、DISP_LAYER_TYPE(2D/3D 层类型)、DISP_BUFFER_TYPE(缓冲区类型,如 normal/secure)、DISP_ALPHA_TYPE(alpha 模式)、DISP_YUV_RANGE_ENUM(YUV 范围,如 BT601/BT709)。
- 定义了 MTK_FMT_MODIFIER(格式修饰符,如 premultiplied/secure)。
- 定义了 MTK_PLANE_PROP(plane 属性枚举,如 NEXT_BUFF_IDX、ALPHA_CON、DATASPACE 等)。
- 结构定义:
- mtk_crtc_ovl_csc_config:OVL 的 CSC(Color Space Conversion)配置,包括亮度和颜色变换。
- mtk_drm_plane:扩展 drm_plane,支持自定义属性数组。
- mtk_plane_pending_state:待处理状态,包含配置、地址、格式、坐标等。
- mtk_plane_input_config:输入配置,包含源地址、格式、旋转、alpha 等。
- mtk_plane_comp_state:组件状态,包含组件 ID、LYE ID 等。
- mtk_plane_state:扩展 drm_plane_state,包含 pending 状态、组件状态和自定义属性。
- 宏定义:如 MAKE_DISP_FORMAT_ID(生成格式 ID)、to_mtk_plane(容器转换)、to_mtk_plane_state 等。
- 作用:
- 提供 MediaTek 特定的枚举和结构,用于 plane 配置和硬件交互。
- 支持 YUV、RGB 等多种格式,确保兼容性(formats 数组列出了支持的 DRM_FORMAT_*)。
- 扩展 DRM 状态管理,支持 MML 模式和自定义属性(如 ALPHA_CON、COMPRESS)。
- 辅助函数声明:mtk_plane_init、mtk_get_format_bpp、mtk_get_format_name、mtk_plane_get_comp_state、to_crtc_plane_index。