Linux DRM那些事-HDMI接口DTS配置
本文基于RockPI 4A单板Debian系统Linux 4.4内核介绍DRM框架HDMI接口DTS配置。
在DTS中主要实现:HDMI的使能、VOP绑定、IOMUX引脚配置和HDMI控制器配置。
一、HDMI配置
文件:
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
#include "rk3399.dtsi"
#include "rk3399-linux.dtsi"
#include "rk3399-opp.dtsi"
## 1. HDMI使能
&hdmi {
#address-cells = <1>;
#size-cells = <0>;
#sound-dai-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&hdmi_i2c_xfer>, <&hdmi_cec>; ## 配置HDMI IOMUX,细节见下面
status = "okay"; ## 使能HDMI,驱动可执行probe()。status的值覆盖include的其他dtsi文件中status的值
};
## 2.设置HDMI绑定vopb
## 2.1 禁止vopl
&hdmi_in_vopl {
status = "disabled";
};
## 2.2 使能vopb
&hdmi_in_vopb {
status = "okay";
};
## 2.3 绑定到vopb
&route_hdmi {
status = "okay";
connect = <&vopb_out_hdmi>;
};
二、HDMI IOMUX
RK3399 HDMI接口共有3个引脚需要设置IOMUX功能,具体如下:
1)IO_I2C3HDMIsda_UART2DBGBsin_HDMII2Csda_GPIO1830gpio4c0
2)IO_I2C3HDMIscl_UART2DBGBsout_HDMII2Cscl_GPIO1830gpio4c1
3)IO_HDMIcecinout_EDPhotplug_GPIO1830gpio4c7
文件:
arch/arm64/boot/dts/rockchip/rk3399.dtsi
hdmi {
## 1.设置HDMI I2C功能
hdmi_i2c_xfer: hdmi-i2c-xfer {
rockchip,pins =
<4 17 RK_FUNC_3 &pcfg_pull_none>,
<4 16 RK_FUNC_3 &pcfg_pull_none>;
};
## 2.设置HDMI-CEC功能
hdmi_cec: hdmi-cec {
rockchip,pins =
<4 23 RK_FUNC_1 &pcfg_pull_none>;
};
};
<4 16 RK_FUNC_3 &pcfg_pull_none>含义如下:
1)4:表示GPIO4。
2)16:表示GPIO4C0,由于GPIOA和GPIOB各有8个引脚,计算得到:GPIO4C0、GPIO4C1和GPIO4C7分别为16、17和23。
3)RK_FUNC_3:表示IOMUX选择功能3,即hdmii2c_sda,见下图。

IOMUX配置
4)pcfg_pull_none:表示没有上/下拉。
三、HDMI控制器
文件:
arch/arm64/boot/dts/rockchip/rk3399.dtsi
hdmi: hdmi@ff940000 {
# 1.与HDMI平台驱动匹配(实现了DRM框架中的encoder和connector初始化)
compatible = "rockchip,rk3399-dw-hdmi";
# 2.寄存器物理基地址和内存映射长度(0x20000)
reg = <0x0 0xff940000 0x0 0x20000>;
## 3.IOMUX配置,见本文第二部分
pinctrl-names = "default";
pinctrl-0 = <&hdmi_i2c_xfer>;
# 4.中断配置,见"Linux内核中断之获取中断号"
interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH 0>;
# 5. 时钟配置
clocks = <&cru PCLK_HDMI_CTRL>,
<&cru SCLK_HDMI_SFR>,
<&cru PLL_VPLL>,
<&cru PCLK_VIO_GRF>,
<&cru SCLK_HDMI_CEC>;
clock-names = "iahb", "isfr", "vpll", "grf", "cec";
# 6.电源域(后续介绍)
power-domains = <&power RK3399_PD_HDCP>;
# 7.寄存器读写访问宽度(4字节)
reg-io-width = <4>;
# 8.指向GRF(通用寄存器文件)
rockchip,grf = <&grf>;
# 9.禁止状态,rk3399-rock-pi-4.dtsi中使能
status = "disabled";
# 10.配置绑定vop的hdmi接口的端节点
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>;
};
};
};
};
相关推荐
-
「PHP」MVC框架是什么?为什么要用它2025-02-25 00:25:41
-
如何用PHP写一个比较安全的API系统(实现)2025-02-25 00:19:49
-
php 解析url获取相关信息2025-02-25 00:15:37
-
mysql命令总结和PyMysql2025-02-25 00:11:35
-
MySQL特性:深入理解ICP2025-02-25 00:11:07