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

MTK Linux DRM分析(二十九)- MTK mtk_dsi.c(Part.1)

一、代码函数分析

1. drm_mode_vfp

功能说明: 计算显示模式的垂直前肩(Vertical Front Porch, VFP),即垂直同步信号开始到显示区域开始的行数。

参数

  • const struct drm_display_mode *mode:显示模式结构体,包含分辨率、时序等信息。

返回值

  • u16:垂直前肩的行数。如果输入模式为空或分辨率为0,返回0。

备注

  • 函数检查输入模式是否有效,计算 vsync_start - vdisplay 以获取VFP值。
  • 用于显示时序配置。

2. drm_mode_hfp

功能说明: 计算显示模式的水平前肩(Horizontal Front Porch, HFP),即水平同步信号开始到显示区域开始的像素数。

参数

  • const struct drm_display_mode *mode:显示模式结构体,包含分辨率、时序等信息。

返回值

  • u16:水平前肩的像素数。如果输入模式为空或分辨率为0,返回0。

备注

  • 函数检查输入模式是否有效,计算 hsync_start - hdisplay 以获取HFP值。
  • 用于显示时序配置。

3. drm_mode_equal_res

功能说明: 比较两个显示模式的分辨率是否相同,并打印分辨率切换信息。

参数

  • const struct drm_display_mode *mode1:第一个显示模式。
  • const struct drm_display_mode *mode2:第二个显示模式。

返回值

  • bool:如果分辨率相同(hdisplay 和 vdisplay 相等),返回 true;否则返回 false。如果任一模式为空或都为空,返回相应的布尔值。

备注

  • 使用 DDPMSG 打印分辨率和刷新率变化信息。
  • 用于判断是否需要调整显示设置。

4. mtk_dsi_mask

功能说明: 对DSI寄存器的指定位域进行掩码操作,设置或清除特定位。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体,包含寄存器基地址。
  • u32 offset:寄存器偏移地址。
  • u32 mask:掩码,用于指定要操作的位。
  • u32 data:要写入的数据。

返回值

  • 无(void)。

备注

  • 读取寄存器当前值,使用掩码操作更新指定位后写回。
  • 用于精确控制DSI硬件寄存器的位域。

5. mtk_dsi_doze_state

功能说明: 获取DSI控制器的低功耗(Doze)状态。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体。

返回值

  • bool:返回当前是否处于Doze状态(基于CRTC状态)。

备注

  • 通过检查CRTC状态中的 CRTC_PROP_DOZE_ACTIVE 属性判断。
  • 用于低功耗模式的判断。

6. mtk_dsi_doze_status_change

功能说明: 检查DSI控制器的Doze状态是否发生变化。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体。

返回值

  • bool:如果Doze状态发生变化,返回 true;否则返回 false。

备注

  • 比较当前Doze状态与DSI结构体中的缓存状态。
  • 用于检测状态切换以触发相应操作。

7. mtk_dsi_pre_cmd

功能说明: 在发送DSI命令之前执行预处理操作,确保硬件准备就绪。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体。
  • struct drm_crtc *crtc:DRM CRTC结构体,表示显示控制器。

返回值

  • 无(void)。

备注

  • 如果DSI处于命令模式,会创建一个命令队列包(cmdq_pkt),等待帧完成和DSI空闲状态。
  • 使用GCE(Global Command Engine)等待事件并清除阻塞状态。
  • 确保命令发送前的硬件状态正确。

8. mtk_dsi_post_cmd

功能说明: 在发送DSI命令之后执行后处理操作,恢复硬件状态。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体。
  • struct drm_crtc *crtc:DRM CRTC结构体。

返回值

  • 无(void)。

备注

  • 如果DSI处于命令模式,会创建一个命令队列包,检查DSI空闲状态并设置相关事件。
  • 用于命令发送后的清理和状态恢复。

9. mtk_dsi_dphy_timconfig

功能说明: 配置DSI D-PHY的时序参数,用于高速传输。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体。
  • void *handle:命令队列句柄(cmdq_pkt),用于GCE操作。

返回值

  • 无(void)。

备注

  • 根据数据速率(data_rate)计算时序参数(如LPX、HS_PREP、HS_ZERO等)。
  • 如果存在扩展参数(dsi->ext->params),使用面板提供的时序值覆盖默认值。
  • 支持通过命令队列或直接寄存器写入配置时序。
  • 确保参数符合硬件约束(如LPX为偶数,HS_PREP >= 6)。

10. mtk_dsi_cphy_timconfig

功能说明: 配置DSI C-PHY的时序参数,用于高速传输。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体。
  • void *handle:命令队列句柄(cmdq_pkt)。

返回值

  • 无(void)。

备注

  • 类似于 mtk_dsi_dphy_timconfig,但专为C-PHY设计,计算不同的时序参数。
  • 支持特定MMSYS(如MT6983、MT6985等)平台的约束。
  • 配置寄存器 DSI_CPHY_CON0 以启用C-PHY模式。
  • 更新 data_phy_cycle 用于后续计算。

11. mtk_dsi_phy_timconfig

功能说明: 根据DSI是否使用C-PHY,选择调用D-PHY或C-PHY时序配置函数。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体。
  • struct cmdq_pkt *handle:命令队列句柄。

返回值

  • 无(void)。

备注

  • 检查面板扩展参数(dsi->ext)是否存在,并根据 is_cphy 标志选择调用 mtk_dsi_cphy_timconfig 或 mtk_dsi_dphy_timconfig。
  • 提供统一的时序配置接口。

12. mtk_dsi_dual_enable

功能说明: 启用或禁用DSI的双通道模式。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体。
  • bool enable:是否启用双通道模式。

返回值

  • 无(void)。

备注

  • 通过修改 DSI_CON_CTRL 寄存器的 DSI_DUAL_EN 位启用或禁用双通道。
  • 用于支持高分辨率显示的双DSI配置。

13. mtk_dsi_enable

功能说明: 启用DSI控制器。

参数

  • struct mtk_dsi *dsi:DSI控制器结构体。

返回值

  • 无(void)。

备注

  • 设置 DSI_CON_CTRL 寄存器的 DSI_EN 位以启用DSI。
  • 如果驱动数据(driver_data)要求等待FIFO满,可启用 DSI_CM_WAIT_FIFO_FULL_EN。

14. mtk_dsi_disable

<

http://www.xdnf.cn/news/1436509.html

相关文章:

  • Linux 环境配置 muduo 网络库详细步骤
  • Linux 文本处理三大利器:命令小工具和sed
  • 从理念到实践:三层解耦架构与“无系统”论
  • 基于web的高校学籍管理系统的设计与实现-(源码+LW+可部署)
  • CodeBuddy 在进化:我只输入了一个地址,完成了OneCode3.0基础开发环境的配置构建
  • JWT在线解密/JWT在线解码 - 加菲工具
  • kukekey在线搭建k8sV1.30.4版本
  • 从栈中取出K个硬币的最大面值和-分组背包
  • 【学Python自动化】 8. Python 错误和异常学习笔记
  • 2025年工科生职业发展证书选择与分析
  • 【模型学习】LoRA的原理,及deepseek-vl2下LoRA实现
  • 力扣242:有效的字母异位词
  • JetBrains 2025 全家桶 11合1 Windows直装(含 IDEA PyCharm、WebStorm、DataSpell、DataGrip等
  • C++类和对象(中)- 默认成员函数
  • 什么是数据库管理系统(DBMS)?RDBMS和NoSQL又是什么?
  • 第 2 讲:Kafka Topic 与 Partition 基础
  • Qwen3-Embedding-0.6B 模型结构
  • Go结构体详解:核心概念与实战技巧
  • Redis-底层数据结构篇
  • MySQL-表的约束(上)
  • 开发中使用——鸿蒙本地存储之收藏功能
  • LLM 能不能发展为 AGI?
  • 开源模型应用落地-模型上下文协议(MCP)-构建AI智能体的“万能插座”-“mcp-use”高级用法(十三)
  • 3.2-C++基础组件
  • 重新审视信任基石:公网IP证书对网络安全生态的影响
  • 【Go语言入门教程】 Go语言的起源与技术特点:从诞生到现代编程利器(一)
  • Cursor 教我学 Python
  • 英伟达Jetson Orin NX-YOLOv8s目标检测模型耗时分析
  • 深度集成Dify API:企业级RAG知识库管理平台解决方案
  • ts,js文件中使用 h函数渲染组件