Rockchip RK3399 - DRM HDMI驱动程序

本文详细介绍了Rockchip RK3399平台中DRM HDMI驱动的设备树配置,包括设备节点的设置、启用方法以及相关数据结构。通过设备树配置,建立显示接口与控制器的连接,并探讨了驱动注册过程和关键数据结构的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Rockchip RK3399 - DRM驱动程序》》我们已经介绍过了,RK3399有两个VOP,均可以支持HDMIeDPDPMIPI DSI0MIPI DSI1显示接口,本节我们选择HDMI作为分析的对象。

一、设备树配置

1.1 hdmi设备节点

设备节点vopb下的子节点vopb_out_hdmi通过hdmi_in_vopb(由remote-endpoint属性指定)和hdmi显示接口组成一个连接通路;

设备节点vopl下的子节点vopl_out_hdmi通过hdmi_in_vopl(由remote-endpoint属性指定)和hdmi显示接口组成一个连接通路;

hdmi: hdmi@ff940000 {
		compatible = "rockchip,rk3399-dw-hdmi";
		reg = <0x0 0xff940000 0x0 0x20000>;
		interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH 0>;
		clocks = <&cru PCLK_HDMI_CTRL>,
				 <&cru SCLK_HDMI_SFR>,
				 <&cru SCLK_HDMI_CEC>,
				 <&cru PCLK_VIO_GRF>,
				 <&cru PLL_VPLL>;
		clock-names = "iahb", "isfr", "cec", "grf", "ref";
		power-domains = <&power RK3399_PD_HDCP>;
		reg-io-width = <4>;
		rockchip,grf = <&grf>;
		#sound-dai-cells = <0>;
		status = "disabled";

		ports {
				hdmi_in: port {
						#address-cells = <1>;
						#size-cells = <0>;

						hdmi_in_vopb: endpoint@0 {
								reg = <0>;
								remote-endpoint = <&vopb_out_hdmi>;
						};
						hdmi_in_vopl: endpoint@1 {
								reg = <1>;
								remote-endpoint = <&vopl_out_hdmi>;
						};
				};
		};
};

其中:

  • 子节点ports:包含2个input endpoint,分别连接到VOPLVOPB;也就是在rk3399上,hdmi可以和VOPLVOPB连接;

因此可以得到有2条同理:

  • vopb_out_hdmi ---> hdmi_in_vopb
  • vopl_out_hdmi ---> hdmi_in_vopl

需要注意的是,⼀个显⽰接口在同⼀个时刻只能和⼀个VOP连接,所以在具体的板级配置中,需要设备树中把要使⽤的通路打开,把不使⽤的通路设置为disabled状态。

1.2 启用hdmi

如果我们希望hdmi连接在VOPB上,则需要在arch/arm64/boot/dts/rockchip/rk3399-evb.dts中为以下节点新增属性:

&i2c7 {
        status = "okay";
};

&display_subsystem {
         status = "okay";
};

&vopb {
        status = "okay";
};

&vopb_mmu {
        status = "okay";
};
     
&hdmi {     
        ddc-i2c-bus = <&i2c7>;
        pinctrl-names = "default";
        pinctrl-0 = <&hdmi_cec>;
        status = "okay";
};


&hdmi_in_vopb{
        status = "okay";
};

&hdmi_in_vopl{
        status = "disabled";
};
<think>好的,我现在需要处理用户关于RK3399芯片的DRM和MIPI接口配置的问题。首先,我要回忆一下之前用户提供的引用资料,特别是引用[1]和引用[3],因为这两个可能与DRMRK3399相关。用户需要了解配置方法或相关信息,所以应该从DRM的基础知识入手,再结合RK3399的具体情况。 首先,DRM(Direct Rendering Manager)是Linux内核中处理图形渲染的子系统,负责管理显示控制器、GPU和显示输出。RK3399作为Rockchip的芯片,应该使用DRM驱动来管理显示设备。接下来,MIPI DSI接口是用于连接显示面板的,配置这部分可能需要在内核设备树(Device Tree)中进行设置。 根据引用[1],DRM的crtc基础知识中提到CRTC负责生成显示时序,而MIPI DSI需要与CRTC绑定。因此,配置RK3399的MIPI可能需要修改设备树的crtc节点,确保其与DSI接口正确连接。同时,引用[3]提到了编译时可能遇到的依赖问题,比如X11头文件缺失,这可能是在配置显示驱动时需要安装相关开发包。 接下来,我需要考虑用户可能的实际配置步骤。例如,修改设备树文件,配置DSI的参数,如时钟频率、通道数等。然后编译内核并确保DRM驱动正确加载。此外,可能需要配置显示管道的绑定,将CRTC、Encoder和Connector正确关联。 用户还可能遇到问题,比如屏幕无显示或时序不正确,这时候需要检查设备树配置是否正确,或者调试DRM驱动的日志信息。另外,参考OpenHarmony的编译问题,用户如果在特定系统环境下配置,可能需要处理类似依赖库的问题,比如安装libdrm-dev或其他相关包。 最后,生成相关问题时要围绕DRM配置、设备树修改、调试方法以及常见问题处理展开,帮助用户进一步深入理解或解决实际应用中的困难。</think>关于RK3399芯片的DRM与MIPI接口配置,以下是关键信息整理: ### 一、DRM子系统基础 1. RK3399的显示控制通过Linux内核的**DRM/KMS子系统**实现,其核心组件包括: - **CRTC**:负责时序生成(如$H/V_{sync}$信号)和图层合成[^1] - **Encoder**:将数字信号转换为物理接口协议(如MIPI-DSI) - **Connector**:物理接口的抽象(如HDMI、MIPI) 2. MIPI DSI配置需注意: ```dts &dsi { status = "okay"; ports { #address-cells = <1>; #size-cells = <0>; port@1 { reg = <1>; dsi_out: endpoint { remote-endpoint = <&panel_in>; }; }; }; }; ``` ### 二、关键配置步骤 1. **设备树配置**: - 定义MIPI DSI控制器的时钟参数(如$HS_CLK$频率) - 绑定显示面板时序参数(参考各面板规格书) - 配置CRTC与DSI的管道连接 2. **驱动加载验证**: ```shell dmesg | grep drm # 查看驱动加载日志 cat /sys/kernel/debug/dri/0/state # 查看显示管道状态 ``` ### 三、常见问题处理 1. 屏幕无输出时: - 检查`/sys/class/drm/card0-<connector>/status`连接状态 - 使用示波器验证MIPI时钟信号(典型频率范围$80MHz \sim 1GHz$) 2. 编译依赖问题: ```shell sudo apt install libdrm-dev # 解决头文件缺失问题[^3] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Graceful_scenery

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值