【鸿蒙南向开发】OpenHarmony HDF Display驱动模型解析及移植指导

###Display 驱动概述

随着电子产业迅速发展,带屏类的设备种类日益增多,各种各样的显示屏也随之出现。

最常见的显示屏有 LCD(Liquid Crystal Display)屏、LED(OrganicLight-Emitting Diode)点阵屏、OLED(Organic Light-EmittingDiode)屏等,根据其各自特点,用于不同的显示场景。显示屏的硬件接口主要有 MIPI、HDMI、SPI、I2C、RGB、MCU 等,现在用于手机的高分辨率显示屏,主要用的是 MIPI 接口,HDMI 接口主要用于显示器或 TV,RGB 和 MCU 接口为并口,主要用于功能机之上。

以 LCD 为例,其驱动主要完成三部分工作:

1、对 LCD Driver IC 及模组相关的硬件资源进行初始化,包括配置 MIPI 参数,操作 GPIO 管脚,设置上下电时序,下发屏端初始化参数序列等;

2、器件驱动操作接口对注册或者对接到标准的显示框架上,例如 DRM 架构或者 FB 显示架构,保证在设备亮灭屏状态切换时,显示架构可以通过 panel 驱动注册的接口操控 LCD;

3、背光参数配置及等级设置等。

Display驱动模型介绍

驱动模型背景

当前操作系统和 SOC 种类繁多,各厂商的显示屏器件也各有不同,随之针对器件的驱动代码也不尽相同,往往是某一款器件驱动,只适用于某单一内核系统或 SOC,如果要迁移到其他内核或者 SOC,可能会有不小的移植工作量。而且,不同驱动 IC 的驱动代码差异较大,产品更换驱动 IC,则又需要重新开发对应的器件驱动,造成重复工作。因此,我们尝试基于 HDF 驱动框架,编写一套较通用的 Display 器件驱动模型,尽可能降低驱动开发者的开发或移植工作量,简化器件驱动开发,提升开发效率。
image.png

以显示模块为例,上层为图形服务;中间层为 HDI 层(Hardware Display Interface),对图形服务提供驱动能力接口,方便其操作具体的外设器件;显示驱动模型当前部署在内核态,向上对接到 Display HDI 的实现,同时在内核对接到标准的显示框架上(如DRM、FB);向下对接不同的 panel 驱动,从而自上而下打通显示通路,驱动屏幕点亮。

驱动模型通过逐步兼容不同的显示框架(DRM、FB)及差异化的 SOC,开发者可基于其快速开发显示屏器件驱动。

驱动模型解析

显示驱动模型基于 HDF 驱动框架、Platform 接口及 OSAL 接口开发,可以屏蔽不同内核形态(LiteOS、Linux)差异,适用于不同芯片平台(Hi35xx、Hi38xx、V3S等),为显示屏器件提供统一的驱动平台。

当前驱动模型主要部署在内核态中,向上对接到 Display 公共 hal 层,辅助 HDI 的实现。显示驱动通过 Display-HDI 层对图形服务暴露显示屏驱动能力;向下对接显示屏 panel 器件,驱动屏幕正常工作,自上而下打通显示全流程通路。

  • 模型各层设计说明

Display 驱动模型基于 HDF 驱动框架、Platform 接口及 OSAL 接口开发,可以做到不区分OS(LiteOS、Linux)和芯片平台(Hi35xx、Hi38xx、V3S等),为 LCD 器件提供统一的驱动模型。

如图 2 所示,当前 HDF Display 驱动模型主要分为四层:标准架构适配层(DRM Panel Adapter Driver)、显示公共驱动层(DisplayCommon Driver)、芯片平台适配层(SoC Adapter Driver)、器件驱动层(Display Panel Driver)。

image.png

1、标准架构适配层

image.png

如图 3 所示,本层主要完成对接标准的显示驱动架构,如 DRM(Direct Rending Manager)或 FB(Framebuffer),以 DRM 为例,将 panel 侧驱动接口对接到标准框架中,保证在 DRM 框架中实现对 Panel 驱动的操作接口,当前注册的接口如下。

static struct drm_panel_funcs g_hdfDrmPanelFuncs = {
    .get_modes = HdfDrmPanelGetModes,
    .enable = HdfDrmPanelEnable,
    .disable = HdfDrmPanelDisable,
    .prepare = HdfDrmPanelPrepare,
    .unprepare = HdfDrmPanelUnprepare,
};

2、显示公共驱动层

image.png

如图 4 所示,此部分属于整个驱动模型的中枢,所有的屏端接口注册、Panel 信息管理、屏幕状态控制、用户态 HDI 接口命令处理、以及通用的基础显示特性,目前都是通过这部分实现。

在本层通过结构体 DispManager 管理所有的显示信息,其成员 PanelManager 用于记录与显示屏相关的接口及参数信息。同时接收并处理 HDI 层直接对 panel 操作相关的指令(主要用于 L0-L1 等轻量级系统),如 Panel 器件信息的获取、休眠唤醒、背光设置等指令。此外,本层还负责实现一些基础显示特性的业务框架,如 ESD 检查机制,力求将显示相关的共有逻辑集中到本层实现,以简化 Panel 器件驱动的实现,避免 panel 驱动中相同功能的重复实现,便于统一管理和维护。

3、芯片平台适配层

image.png

如图 5 所示,借助此 SoC 适配层,实现 Display 器件驱动和 SoC 侧硬件资源的解耦,主要完成芯片平台强相关的参数配置,如 mipi 速率计算及设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值