Linux 6.2 HDMI驱动机制详解

Linux 6.2 HDMI驱动机制详解

1. 版本背景

  • 发布时间:2023年1月1日
  • HDMI支持状态:HDMI 2.1完全支持,DSC压缩技术整合,VRR动态刷新率实现
  • 关键里程碑
    • HDMI 2.1 FRL最高12Gbps支持
    • Display Stream Compression (DSC)完全集成
    • 可变刷新率(VRR)和自动低延迟模式(ALLM)
    • HDCP 2.3开源实现
    • CEC框架生产就绪

2. 子系统架构

现代化架构

+---------------------+ | 用户空间 | | DRM API (libdrm) | | + HDMI控制接口 | +----------+----------+ | +----------v----------+ | 内核空间 | | DRM核心子系统 | | + HDMI 2.1桥接器 | +----------+----------+ | +----------v----------+ | 统一HDMI控制器 | | + DSC支持 | | + VRR实现 | +----------+----------+ | +----------v----------+ | HDMI物理层 | +---------------------+

架构创新

  • HDMI 2.1框架drivers/gpu/drm/bridge/下的完全实现
  • DSC集成drivers/gpu/drm/dsc.c压缩引擎
  • VRR支持drm_mode_add_vrr_modes()动态刷新率
  • HDCP 2.3drivers/gpu/drm/drm_hdcp.c完整实现

3. 源码深度解析

HDMI 2.1桥接器实现

// drivers/gpu/drm/bridge/nxp-ptn3460.c static const struct drm_bridge_funcs ptn3460_bridge_funcs = { .attach = ptn3460_attach, .mode_set = ptn3460_mode_set, .enable = ptn3460_enable, .disable = ptn3460_disable, .atomic_enable = ptn3460_atomic_enable, .atomic_disable = ptn3460_atomic_disable, .atomic_get_output_bus_fmts = ptn3460_atomic_get_output_bus_fmts, }; static int ptn3460_atomic_check(struct drm_bridge *bridge, struct drm_bridge_state *bridge_state, struct drm_crtc_state *crtc_state, struct drm_connector_state *conn_state) { struct ptn3460 *ptn = bridge_to_ptn(bridge); struct drm_display_mode *mode = &crtc_state->mode; /* 检查是否需要DSC */ if (mode->clock > HDMI_2_0_MAX_TMDS_CLK && !drm_mode_has_dsc(conn_state->connector)) { DRM_ERROR("需要DSC压缩支持\n"); return -EINVAL; }