当前位置: 首页 > news >正文

MTK Linux DRM分析(二十二)- MTK mtk_drm_crtc.c(Part1)

一、代码分析

mtk_drm_crtc.c以mtk_crtc_comp_is_busy函数为界限进行拆分分析

static const struct drm_crtc_funcs mtk_crtc_funcs = {.set_config = drm_atomic_helper_set_config,.page_flip = drm_atomic_helper_page_flip,.destroy = mtk_drm_crtc_destroy,.reset = mtk_drm_crtc_reset,.atomic_duplicate_state = mtk_drm_crtc_duplicate_state,.atomic_destroy_state = mtk_drm_crtc_destroy_state,.atomic_set_property = mtk_drm_crtc_set_property,.atomic_get_property = mtk_drm_crtc_get_property,.enable_vblank = mtk_drm_crtc_enable_vblank,.disable_vblank = mtk_drm_crtc_disable_vblank,.get_vblank_timestamp = mtk_crtc_get_vblank_timestamp,
};static const struct drm_crtc_helper_funcs mtk_crtc_helper_funcs = {.mode_fixup = mtk_drm_crtc_mode_fixup,.mode_set_nofb = mtk_drm_crtc_mode_set_nofb,.atomic_enable = mtk_drm_crtc_atomic_resume,.disable = mtk_drm_crtc_suspend,.atomic_begin = mtk_drm_crtc_atomic_begin,.atomic_flush = mtk_drm_crtc_atomic_flush,
};

mtk_drm_crtc.c (Part1)中主要函数的基本作用分析,基于提供的代码片段。这些函数主要与 MediaTek DRM (Direct Rendering Manager) 驱动相关,用于管理显示控制器(CRTC)的行为、硬件配置、事件处理等。以下是每个函数的简要说明,按功能分组并避免过多技术细节,保持清晰简洁:


1. 上下文管理

  • _get_context
    • 作用: 创建并返回一个静态的 drm_crtc 上下文对象,确保全局只有一个上下文实例(单例模式)。用于初始化和管理 CRTC 相关的全局状态。
    • 关键点: 通过静态变量 is_context_inited 确保只初始化一次,并使用 memset 清空上下文结构。

2. CRTC 生命周期管理

  • mtk_drm_crtc_destroy
    • 作用: 销毁 CRTC 对象,释放相关资源。
    • 关键点: 释放显示互斥锁(mtk_disp_mutex_put)并调用 drm_crtc_cleanup 清理 DRM 框架中的 CRTC 资源。
  • mtk_drm_crtc_reset
    • 作用: 重置 CRTC 状态,恢复到初始状态。
    • 关键点: 如果已有状态,销毁旧状态并分配新的 mtk_crtc_state 结构,初始化 CRTC 状态并绑定到 DRM 框架。

3. VBlank 和页面翻转

  • mtk_drm_crtc_finish_page_flip
    • 作用: 处理页面翻转完成后的逻辑,发送 VBlank 事件并清理相关状态。
    • 关键点: 在事件锁保护下,调用 drm_crtc_send_vblank_event 发送 VBlank 事件,释放 VBlank 引用,并清除 mtk_crtc->event。
  • mtk_drm_finish_page_flip
    • 作用: 完成页面翻转的处理,触发 VBlank 处理并在需要时调用 mtk_drm_crtc_finish_page_flip。
    • 关键点: 检查 pending_needs_vblank 标志以决定是否需要完成页面翻转。

4. 等待和同步

  • mtk_drm_wait_blank
    • 作用: 等待 CRTC 的空白(blank)状态变为指定值,带有超时机制。
    • 关键点: 使用 wait_event_timeout 等待 crtc_blank 状态变化,通常用于确保显示状态稳定(如 TUI 相关场景)。
  • mtk_drm_crtc_wait_blank
    • 作用: 确保 CRTC 完成空白状态的切换(如退出 TUI 模式)。
    • 关键点: 循环等待 crtc_blank
http://www.dtcms.com/a/356154.html

相关文章:

  • PDF,HTML,md格式文件在线查看工具
  • CosyVoice win10启用记
  • 【mysql】SQL 中 IS 与 = 的区别:一个 NULL 值引发的思考
  • 编译esp32报错解决办法
  • 光谱相机多层镀膜技术如何提高透过率
  • [新启航]白光干涉仪在太阳能电池片栅线高度 3D 轮廓测量中的应用解析
  • 【C语言】递归
  • 屏随人动+视觉魔方+多样主题+智能留言,涂鸦Wukong AI 2.0助力打造爆款带屏云台相机
  • 从0开始学习Java+AI知识点总结-28.Linux部署
  • PDF 24 Tools, PDF编辑工具, PDF压缩, PDF转换, PDF删除, PDF加密, 添加水印
  • 创业灵感第一集
  • OpsManage:基于Django的企业级AWS云资源运维管理平台
  • 《零基础入门AI:YOLOv2算法解析》
  • Vue开发准备
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(四)
  • OpenHarmony设备使用统计深度实战:从数据埋点到信息采集的全链路方案
  • 使用 Bright Data Web Scraper API + Python 高效抓取 Glassdoor 数据:从配置到结构化输出全流程实战
  • C++ 8.28
  • Dify学习
  • Python 正则表达式完全指南:从基础语法到实战案例
  • 深入理解文本向量嵌入(Vector Embeddings):原理、实践与应用场景
  • Linux---gdb和cgdb
  • UML状态图中entry/do/exit动作的深入解析与C/C++实现
  • 《深度讲解 C 语言动态内存:函数用法、错误规避与经典笔试题》
  • 同类软件对比(二):VS Code 与 PyCharm 的 Python 开发对比与使用建议
  • JavaScript初识:给小白的第一堂编程课
  • Day20 常见降维算法
  • 沙箱操作工具
  • 机器学习(讲解)
  • ROS2 入门实战 —— 从环境搭建到第一次控制小乌龟(一)