关注

MTK Linux DRM分析(十二)- KMS Panel框架层(drm_panel.c、drm_mipi_dbi.c、drm_mipi_dsi.c)

一、简介

三个代码文件(drm_mipi_dbi.c、drm_panel.c、drm_mipi_dsi.c)的分析。这些文件都是Linux内核DRM(Direct Rendering Manager)子系统的组成部分,主要用于支持显示面板,特别是通过MIPI(Mobile Industry Processor Interface)接口的显示设备。它们提供了显示驱动的框架、面板管理和接口通信的抽象层。

二、代码分析

1. drm_mipi_dbi.c 文件分析

文件概述
  • 目的:提供MIPI Display Bus Interface (DBI) LCD控制器的支持。主要针对通过SPI(Serial Peripheral Interface)连接的MIPI Type C显示器(如小型LCD面板)。支持命令发送、帧缓冲更新、电源管理等。
  • 关键特性
    • 支持MIPI DBI命令(如读/写内存、设置地址)。
    • 处理SPI传输(包括9-bit和8-bit模式)。
    • 与DRM框架集成,提供简单显示管道(simple display pipe)。
    • 支持调试文件系统(debugfs)和旋转模式。
  • 依赖:依赖DRM核心(如drm_connector、drm_framebuffer)、SPI子系统和GPIO。
主要流程
  1. 初始化:使用mipi_dbi_spi_init初始化DBI结构,设置命令函数(如mipi_dbi_typec1_command或mipi_dbi_typec3_command)。然后调用mipi_dbi_dev_init设置DRM设备、连接器和显示模式。
  2. 命令发送:通过mipi_dbi_command_read、mipi_dbi_command_buf等函数发送MIPI DCS命令。底层使用SPI传输(如mipi_dbi_spi_transfer)。
  3. 帧缓冲更新:mipi_dbi_pipe_update处理脏矩形(dirty rectangle),调用mipi_dbi_fb_dirty更新显示内存。涉及缓冲拷贝(mipi_dbi_buf_copy)和窗口地址设置(mipi_dbi_set_window_address)。
  4. 启用/禁用:mipi_dbi_enable_flush启用面板(包括背光),mipi_dbi_pipe_disable禁用面板(包括清屏)。
  5. 调试:通过debugfs文件(如"command")允许用户发送命令或读取状态。
  6. SPI特定处理:处理不同SPI模式(9-bit vs 8-bit),包括字节交换和传输分块。

整体流程:驱动加载 -> 初始化DBI和DRM -> 命令/数据传输 -> 帧更新 -> 电源管理。

mipi_dbi_spi_init (入口: 初始化SPI DBI)
  -> mipi_dbi_typec1_command (设置命令函数,如果无DC GPIO)
    -> mipi_dbi_spi1_transfer (9-bit SPI传输)
      -> mipi_dbi_spi1e_transfer (如果不支持9-bit,模拟)
        -> spi_sync (底层SPI同步传输)
    -> mipi_dbi_typec1_command_read (读命令)
      -> spi_sync
  -> mipi_dbi_typec3_command (设置命令函数,如果有DC GPIO)
    -> mipi_dbi_spi_transfer (8/16-bit SPI传输)
      -> spi_sync
    -> mipi_dbi_typec3_command_read (读命令)
      -> spi_sync

mipi_dbi_dev_init (入口: 初始化DBI设备)
  --> drm_simple_display_pipe_init (DRM管道初始化)
    -> mipi_dbi_connector_get_modes (获取模式)
      -> drm_mode_duplicate (复制模式)
    -> mipi_dbi_mode_config_funcs (模式配置)
      -> drm_gem_fb_create_with_dirty (创建帧缓冲)
  -> mipi_dbi_rotate_mode (处理旋转)
  -> mipi_dbi_debugfs_init (调试初始化)
    -> debugfs_create_file ("command"文件)
      -> mipi_dbi_debugfs_command_write (写命令)
        -> mipi_dbi_command_buf
      -> mipi_dbi_debugfs_command_show (读命令)
        -> mipi_dbi_command_buf

mipi_dbi_command_buf (核心: 发送命令)
  -> mipi_dbi_command_stackbuf (栈缓冲版本)
  --> dbi->command (调用typec1或typec3命令函数)
    -> mipi_dbi_spi_transfer (或模拟)

mipi_dbi_pipe_update (更新管道)
  -> drm_atomic_helper_damage_merged (计算脏矩形)
  -> mipi_dbi_fb_dirty (脏帧更新)
    -> mipi_dbi_buf_copy (拷贝缓冲)
      -> drm_fb_memcpy / drm_fb_xrgb8888_to_rgb565 (格式转换)
    -> mipi_dbi_set_window_address (设置地址)
    -> mipi_dbi_command_buf (写内存开始)

mipi_dbi_enable_flush (启用)
  -> mipi_dbi_fb_dirty (全屏刷新)
  -> backlight_enable (背光)

mipi_dbi_pipe_disable (禁用)
  -> backlight_disable
  -> mipi_dbi_blank (清屏)
    -> mipi_dbi_set_window_address
    -> mipi_dbi_command_buf

2. drm_panel.c 文件分析

文件概述
  • 目的:提供DRM面板帮助器框架,用于注册和管理显示面板(如LCD)。允许驱动通过中央注册表检索面板,并处理面板的电源、背光和模式探测。
  • 关键特性
    • 面板注册/注销(链表管理)。
    • 标准操作:准备(上电)、启用(开启显示)、禁用、获取模式。
    • 支持OF(OpenFirmware)设备树查找面板。
    • 集成背光设备(可选)。

转载自CSDN-专业IT技术社区

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/itom1900/article/details/150604593

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--