HDMI
芯片名称与内核版本
- 芯片名称:RK322X/RK3328/RK3368/RK3399/RK3288/RK3528/RK356X/RK3588
- 内核版本:LINUX kernel 6.1/5.10/4.19/4.4
前言
本文主要介绍 Rockchip 平台基于 DRM 显示框架的 HDMI 的使用与调试方法。
概述
产品版本
- RK3288
- RK3368
- RK322X
- RK3328
- RK3399
- RK3528
- RK356X
- RK3588
- RK3576
读者对象
- 技术支持工程师
- 软件开发工程师
1. Rockchip 平台 HDMI 简介
Rockchip 各平台的 HDMI 功能如下:
功能 | RK3288 | RK3368 | RK322X | RK3328 | RK3399 | RK3528 | RK356X | RK3588 | RK3576 |
---|---|---|---|---|---|---|---|---|---|
最大输出分辨率 | 3840x2160p60 | 4096x2160p60 | 4096x2160p60 | 4096x2160p60 | 4096x2160p60 | 4096x2160p60 | 4096x2160p60 | 7680x4320p60 | 4096x2160p120 |
隔行模式 | N | N | Y | Y | Y | Y | Y | Y | Y |
支持的颜色格式 | RGB, YCbCr444, YCbCr422, YCbCr420 (仅 RK3288W 支持 YCbCr420) | RGB, YCbCr444, YCbCr422, YCbCr420 | RGB, YCbCr444, YCbCr422, YCbCr420 | RGB, YCbCr444, YCbCr422, YCbCr420 | RGB, YCbCr444, YCbCr420 | RGB, YCbCr444, YCbCr422, YCbCr420 | RGB, YCbCr444, YCbCr422, YCbCr420 | RGB, YCbCr444, YCbCr422, YCbCr420 | RGB, YCbCr444, YCbCr422, YCbCr420 |
是否支持 10bit 色深 | Y | N | Y | Y | Y | Y | Y | Y | Y |
支持 HDMI 协议版本 | HDMI 2.0 | HDMI 2.0 | HDMI 2.0 | HDMI 2.0 | HDMI 2.0 | HDMI 2.0 | HDMI 2.0 | HDMI 2.1 | HDMI 2.1 |
DRM: DRM 全称是 Direct Rendering Manager 是 DRI ( Direct Rendering Infrastructure ) 框架的一个 组件。LINUX 4.4 及其以后的内核采用 DRM 框架, HDMI 驱动的路径为:
kernel/drivers/gpu/drm/rockchip/dw_hdmi-Rockchip.c
kernel/drivers/gpu/drm/rockchip/inno_hdmi.c
kernel/drivers/gpu/drm/bridge/synopsys/
2. DRM 框架 HDMI 介绍
2.1 HDMI 软件功能配置
2.1.1 使能 HDMI
打开 HDMI 需要添加:
&hdmi {
status = "okay";
};
2.1.2 绑定 VOP
在 Rockchip 的各个平台中,各种显示接口(HDMI、DP、CVBS 等)输出的图像数据来自 VOP:
如果平台存在两个 VOP(RK3288、RK3399):VOPB(支持 4K)、VOPL(只支持 2K),两个 VOP 可以分别与两个显示接口绑定(一个显示接口只能和一个 VOP 绑定),且可以相互交换:
- 当 DTS 中显示设备节点打开时,显示接口对应 VOPB 和 VOPL 的 ports 都会打开,所以需要关闭用不到的那个 VOP 对应的 port。
例如,HDMI 绑定到 VOPB 需要添加:
&hdmi_in_vopl {
status = "disabled";
};
反之,若绑定到 VOPL 则添加:
&hdmi_in_vopb {
status = "disabled";
};
如果平台只有一个 VOP,则不需要该步骤。
VOP2 及其后版本,一个平台不再有多个 VOP。取而代之的是只有一个 VOP,而 VOP 中有多个 VP(Video Port)输出。
-
RK356X VOP 与 HDMI 的通路:
- HDMI 可以绑定在 VP0 或 VP1 上,建议绑定 VP0 可以支持 4K 输出:
&hdmi_in_vp0 {
status = "okay";
};
&hdmi_in_vp1 {
status = "disabled";
};
- HDMI 可以绑定在 VP0 或 VP1 上,建议绑定 VP0 可以支持 4K 输出:
-
RK3588 VOP 与 HDMI 的通路:
- RK3588 有两个 HDMITX,两者在性能上完全相同,分别可以绑定在 VP0/1/2。
- 如果最高只需要输出 4K 分辨率,建议 HDMI0/1 分别绑定在 VP0/1:
&hdmi0_in_vp0 {
status = "okay";
};
&hdmi0_in_vp1 {
status = "disabled";
};
&hdmi0_in_vp2 {
status = "disabled";
};
&hdmi1_in_vp1 {
status = "okay";
};
&hdmi1_in_vp0 {
status = "disabled";
};
&hdmi1_in_vp2 {
status = "disabled";
};
-
RK3588 平台如果需要输出 8K 分辨率,必须占用 VP0 和 VP1 两个 port 进行拼接。在 DTS 中,必须将输出 8K 的 HDMI 绑定在 VP0 上,以 HDMI0 为例:
&hdmi0_in_vp0 {
status = "okay";
};
&hdmi0_in_vp1 {
status = "disabled";
};
&hdmi0_in_vp2 {
status = "disabled";
};同时,还需要将 VOP ACLK 设置为 800M,详见 3.1.4。
-
RK3588 HDMI 与 eDP 共用 COMBPHY,以 HDMI0 和 eDP0 为例,DTS 中
hdptxphy_hdmi0
为 HDMI PHY 节点,hdptxphy0
为 eDP PHY 节点:hdptxphy0: phy@fed60000 {
compatible = "rockchip,rk3588-hdptx-phy";
reg = <0x0 0xfed60000 0x0 0x2000>;
clocks = <&cru CLK_USB2PHY_HDPTXRXPHY_REF>, <&cru PCLK_HDPTX0>;
clock-names = "ref", "apb";
resets = <&cru SRST_P_HDPTX0>, <&cru SRST_HDPTX0_INIT>,
<&cru SRST_HDPTX0_CMN>, <&cru SRST_HDPTX0_LANE>;
reset-names = "apb", "init", "cmn", "lane";
rockchip,grf = <&hdptxphy0_grf>;
#phy-cells = <0>;
status = "disabled";
};
hdptxphy_hdmi0: hdmiphy@fed60000 {
compatible = "rockchip,rk3588-hdptx-phy-hdmi";
reg = <0x0 0xfed60000 0x0 0x2000>;
clocks = <&cru CLK_USB2PHY_HDPTXRXPHY_REF>, <&cru PCLK_HDPTX0>;
clock-names = "ref", "apb";
clock-output-names = "clk_hdmiphy_pixel0";
#clock-cells = <0>;
resets = <&cru SRST_HDPTX0>, <&cru SRST_P_HDPTX0>,
<&cru SRST_HDPTX0_INIT>, <&cru SRST_HDPTX0_CMN>,
<&cru SRST_HDPTX0_LANE>, <&cru SRST_HDPTX0_ROPLL>,
<&cru SRST_HDPTX0_LCPLL>;
reset-names = "phy", "apb", "init", "cmn", "lane", "ropll",
"lcpll";
rockchip,grf = <&hdptxphy0_grf>;
#phy-cells = <0>;
status = "disabled";
};
所以当使用 HDMI 的时候必须关闭对应的 eDP 和 eDP PHY。以 HDMI0 为例:
&hdmi0 {
status = "okay";
};
&hdptxphy_hdmi0 {
status = "okay";
};
&edp0 {
status = "disabled";
};
&hdptxphy0 {
status = "disabled";
};
2.1.3 打开开机 logo
如果 U-Boot logo 未开启,那么 kernel 阶段也无法显示开机 logo,只能等到系统启动后才能看到应用显示的图像。在 DTS 中将 route_hdmi
使能即可打开 U-Boot logo 支持:
&route_hdmi {
status = "okay";
};
在双 VOP 的平台,需要注意代码中的 connect
指定的 VOP 必须与 HDMI 绑定的 VOP 一致(详见 3.1.2),否则可能出现花屏等问题。
route_hdmi: route-hdmi {
status = "disabled";
logo,uboot = "logo.bmp";
logo,kernel = "logo_kernel.bmp";
logo,mode = "center";
charge_logo,mode = "center";
connect = <&vopb_out_hdmi>;
};
2.1.4 VOP dclk 绑定 PLL
HDMI 绑定的 VOP/VP dclk,需要指定对应的 PLL 作为时钟源。在 RK 的平台中,RK322X/RK3328/RK3528 HDMI 都与固定的 VOP/VP 绑定,且固定使用 HDMI PHY PLL 作为 dclk 时钟源,无需配置。
2.1.4.1 RK3288 绑定 PLL
RK3288 VOPB/VOPL dclk 可以挂载到 GPLL/CPLL。由于这两个 PLL 都不能小数分频,所以 RK3288 的 HDMI 只能输出 594M 整数分频的标准分辨率(如 4K60/1080P60/720P60)。举例 VOPB dclk 挂载到 GPLL,VOPL dclk 挂载到 CPLL 如下:
&vopb {
assigned-clocks = <&cru DCLK_VOP0>;
assigned-clock-parents = <&cru PLL_GPLL>;
};
&vopl {
assigned-clocks = <&cru DCLK_VOP1>;
assigned-clock-parents = <&cru PLL_CPLL>;
};
2.1.4.2 RK3399 绑定 PLL
RK3399 的 HDMI 所绑定的 VOP dclk 需要挂载到 VPLL 上,若是双显则需要将另一个 VOP dclk 挂到 CPLL,这样可以分出任意频率的 dclk,实现双显任意分辨率的支持。如当 HDMI 绑定到 VOPB 时配置:
&vopb {
assigned-clocks = <&cru DCLK_VOP0_DIV>;
assigned-clock-parents = <&cru PLL_VPLL>;
};
&vopl {
assigned-clocks = <&cru DCLK_VOP1_DIV>;
assigned-clock-parents = <&cru PLL_CPLL>;
};
当 HDMI 绑定到 VOPL 时配置:
&vopb {
assigned-clocks = <&cru DCLK_VOP0_DIV>;
assigned-clock-parents = <&cru PLL_CPLL>;
};
&vopl {
assigned-clocks = <&cru DCLK_VOP1_DIV>;
assigned-clock-parents = <&cru PLL_VPLL>;
};
2.1.4.3 RK356X 绑定 PLL
RK356X HDMI 所绑定的 VP dclk 必须需要挂载到 HPLL 上,举例 VP0 dclk:
&vop {
assigned-clocks = <&cru DCLK_VOP0>;
assigned-clock-parents = <&pmucru PLL_HPLL>;
};
2.1.4.4 RK3588/RK3576 绑定 PLL
RK3588 如果需要输出 4K60 以上的分辨率,需要将 VOP ACLK 设置为 800MHz:
&vop {
assigned-clocks = <&cru ACLK_VOP>;
assigned-clock-rates = <800000000>;
status = "okay";
};
RK3588 HDMI 0/1 可以绑定 VP 0/1/2,详见 2.1.2。这三个 VP dclk 都可以挂载到 GPLL/HDMI0 PHY PLL/HDMI 1 PHY PLL/V0PLL。
具体的分配策略和相关限制可以参考《Rockchip_Developer_Guide_DRM_Display_Driver_CN.pdf》中的 10.11 章节。
RK3588/RK3576 如果要支持非标准分辨率,需要指定 PHY PLL 作为 VOP dclk 时钟源。
RK3588 DTS 配置如下:
&display_subsystem {
clocks = <&hdptxphy_hdmi_clk0>, <&hdptxphy_hdmi_clk1>;
clock-names = "hdmi0_phy_pll", "hdmi1_phy_pll";
};
&hdptxphy_hdmi_clk0 {
status = "okay";
};
&hdptxphy_hdmi_clk1 {
status = "okay";
};
RK3576 DTS 配置如下:
&display_subsystem {
clocks = <&hdptxphy_hdmi>;
clock-names = "hdmi0_phy_pll";
};
DTS 时钟分配是否生效,可以使用命令 cat /sys/kernel/debug/clk/clk_summary
进行确认。
以 VP0 的 dclk 绑定 HDMI0 PHY PLL 为例,dclk_vop0 在时钟树中挂在 clk_hdmiphy_pixel0
下:
xin24m 26 28 0 24000000 0
0 50000
clk_usbdpphy_mipidcpphy_ref 2 2 0 24000000 0
0 50000
clk_usb2phy_hdptxrxphy_ref 11 11 0 24000000 0
0 50000
clk_hdmiphy_pixel0 2 3 0 594000000 0
0 50000
dclk_vop0 2 4 0 594000000 0
0 50000
2.1.5 RK3288/RK3399/RK3528/RK356X HDCP 使能
2.1.5.1 HDCP 1.4 使能
&hdmi {
hdcp1x-enable = <1>;
}
使能 HDCP 1.4 后还需要通过工具烧录对应 key,工具可以在 SDK 的 RKTools 目录下获取。不同 Android 工具可能不同,可向 FAE 咨询,使用说明见工具的 readme。对应的 Key 需要客户自行向 Digital Content Protection LLC 申请。
通过以下节点可以开启或关闭 HDCP 功能:
echo 1 > /sys/class/misc/hdmi_hdcp1x/enable
1 表示开启 HDCP 功能,0 表示关闭 HDCP 功能。
开启 HDCP 功能后,可以通过以下方法确认 HDCP 是否生效:
cat /sys/class/misc/hdmi_hdcp1x/status
不同值对应的 HDCP 状态如下:
hdcp disable
:HDCP 功能关闭。hdcp_auth_start
:HDCP 开始认证。hdcp_auth_success
:HDCP 认证成功,开始传输加密的视频数据。hdcp_auth_fail
:HDCP 认证失败。
分别找一台不支持 HDCP 1.4 的电视和支持 HDCP 1.4 的电视。若开启 HDCP 功能后,不支持 HDCP 1.4 的电视显示粉屏而支持 HDCP 1.4 的电视可以正常显示,则说明 HDCP 工作正常。
2.1.5.2 HDCP 2.2 使能
RK3288/RK3399/RK3528/RK356X 支持 DRM 框架下的 HDCP 2.2 功能,需要注意的是,想使用 HDCP 2.2 功能必须确保 HDCP 1.4 工作正常。想要开启该功能需要以下步骤:
- 向 FAE 申请 HDCP 2.2 Key 打包工具以及补丁包,按照 readme 将 Key 打包并打上补丁。
- 重新编译并烧写后,使用以下节点开启/关闭 HDCP 2.2 功能:
echo 1 > /sys/class/misc/hdcp2_node/enable
使能后可以通过以下方法判断 HDCP 2.2 是否正常工作:
- 分别找一台不支持 HDCP 2.2 的电视和支持 HDCP 2.2 的电视。若开启 HDCP 功能后,不支持 HDCP 2.2 的电视显示白屏而支持 HDCP 2.2 的电视可以正常显示,则说明 HDCP 工作正常。
通过以下节点获取 HDCP 2.2 工作状态:
cat /sys/class/misc/hdcp2_node/status
- hdcp2 auth sucess: 认证成功。
- no enable hdcp2: HDCP 2.2 已关闭。
- hdcp2 no auth: HDMI 未连接或是设备不支持 HDCP 2.2。
- no already auth sucess: 认证失败。
如果出现了认证失败的情况,请在 redmine 上传以下 Log 文件:
/cache/hdcp_tx0.log
- 或是执行以下命令抓取 Log:
logcat -s HDMI_HDCP2
dmesg | grep hdcp
2.1.6 RK3588/RK3576 HDCP 使能
RK3588/RK3576 支持 HDCP 1.4/2.3,两者的使能需要调用 DRM 框架的 HDCP 接口。通过配置 DRM PROPERTY 进行 HDCP 开关以及 HDCP 状态查询。相关 DEMO 代码 hdcptest.c
请向业务申请。调试时,可以使用 modetest
进行测试。
Android 系统 modetest
代码路径为:
external/libdrm/tests/modetest/
Linux 系统可以使用 buildroot 编译的 modetest
,编译 rootfs 之后,代码路径为:
buildroot/output/rockchip_rk3588/build/libdrm-2.4.115/testst/modetest/
使用 modetest
测试 HDCP,需要使用以下属性:
Content Protection:
flags: enum
enums: Undesired=0 Desired=1 Enabled=2
value: 2
Undesired:关闭hdcp
Desired:开启hdcp
Enabled:hdcp已经开启并认证成功
hdcp_encrypted:
flags: range
values: 0 2
value: 2
hdcp认证等级:
0:hdcp未认证。
1:hdcp1.4。
2:hdcp2.3。
HDCP 的开关可以使用命令 modetest -w 进行,使用方式举例:
modetest -w 423:"Content Protection":1
------->开启hdcp,优先2.3,若电视不支持2.3或2.3认证失败,自动切换到1.4。
modetest -w 423:"Content Protection":0
------->关闭hdcp。
其中 423 为 HDMI 的 connector id ,可以使用命令 modetest -c 进行查询:
rk3588_s:/ # modetest -c
trying to open device 'i915'...failed
trying to open device 'amdgpu'...failed
trying to open device 'radeon'...failed
trying to open device 'nouveau'...failed
trying to open device 'vmwgfx'...failed
trying to open device 'omapdrm'...failed
trying to open device 'exynos'...failed
trying to open device 'tilcdc'...failed
trying to open device 'msm'...failed
trying to open device 'sti'...failed
trying to open device 'tegra'...failed
trying to open device 'imx-drm'...failed
trying to open device 'rockchip'...done
Connectors:
id encoder status name size (mm) modes encoders
423 422 connected HDMI-A-1 0x0 6 422
modes:
name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
1920x1080 60 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: phsync,
pvsync; type: preferred
1920x1080 50 1920 2448 2492 2640 1080 1084 1089 1125 148500 flags: phsync,
pvsync; type: driver
1280x720 60 1280 1390 1430 1650 720 725 730 750 74250 flags: phsync, pvsync;
type: driver
1280x720 50 1280 1720 1760 1980 720 725 730 750 74250 flags: phsync, pvsync;
type: driver
720x576 50 720 732 796 864 576 581 586 625 27000 flags: nhsync, nvsync; type:
driver
720x480 60 720 736 798 858 480 489 495 525 27000 flags: nhsync, nvsync; type:
driver
详细 HDCP 的使用说明见《Rockchip_RK3588_Developer_Guide_HDCP_CN.pdf》。
2.1.7 DDC 的 I2C 速率配置
当插拔 HDMI 读取 EDID 失败时,可以尝试降低 DDC I2C 的速率。
[ 163.026743] dwhdmi-rockchip fdea0000.hdmi: i2c read time out!
[ 163.130075] dwhdmi-rockchip fdea0000.hdmi: i2c read time out!
[ 163.233407] dwhdmi-rockchip fdea0000.hdmi: i2c read time out!
[ 163.336741] dwhdmi-rockchip fdea0000.hdmi: i2c read time out!
[ 163.440074] dwhdmi-rockchip fdea0000.hdmi: i2c read time out!
[ 163.440110] dwhdmi-rockchip fdea0000.hdmi: failed to get edid
目前 I2C 速率通过 clk 高电平和低电平的时间来调整,如下为实测 I2C 速率为 50 kHz 时的配置。
&hdmi {
ddc-i2c-scl-high-time-ns = <9625>;
ddc-i2c-scl-low-time-ns = <10000>;
}
调整 I2C 速率只需将这两个值按对应的比例修改即可,例如调整速率为 100 kHz:
&hdmi {
ddc-i2c-scl-high-time-ns = <4812>;
ddc-i2c-scl-low-time-ns = <5000>;
}
2.1.8 HDMI 信号强度配置
由于硬件走线差异,不同板子可能需要不同的驱动强度配置。当遇到电视兼容性问题时可以尝试进行修改。
2.1.8.1 RK322X/RK3328/RK3528/RK356X 信号强度配置
2.1.8.1.1 RK322X 信号配置
RK322X HDMI 信号强度可通过 dts 的 rockchip,phy-table
属性配置,格式定义如下:
rockchip,phy-table =
<165000000 0xaa 0x00 0x44 0x44 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00>,
<340000000 0xaa 0x15 0x6a 0xaa 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00>,
<594000000 0xaa 0x15 0x7a 0xaa 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00>;
以上表 340000000 这一栏为例:
参数 | 说明 |
---|---|
340000000 | 表示该栏参数所对应的最大 tmds clock 频率,适用于 tmds clock 低于 165Mhz 的分辨率 |
0xaa | data lane0 slew rate: bit[1:0] data lane1 slew rate: bit[3:2] data lane2 slew rate: bit[5:4] clock lane slew rate: bit[7:6] slew rate: 调整上升沿和下降沿时间,值越大,时间越短 |
0x15 | data lane0 pre-emphasis: bit[1:0] data lane1 pre-emphasis: bit[3:2] data lane2 pre-emphasis: bit[5:4] pre-emphasis: 预加重,值越大预加重越大 |
0x6a | data lane2 swing: bit[3:0] clock lane swing: bit[7:4] swing: 幅值,值越大幅值越大 |
0xaa | data lane0 swing: bit[3:0] data lane1 swing: bit[7:4] swing: 幅值,值越大幅值越大 |
后续所有0 | 无效 |
2.1.8.1.2 RK3328 信号配置
RK3328 HDMI 信号强度可通过 dts 的 rockchip,phy-table
属性配置,格式定义如下:
rockchip,phy-table =
<165000000 0x07 0x0a 0x0a 0x0a 0x00 0x00 0x08
0x08 0x08 0x00 0xac 0xcc 0xcc 0xcc>,
<340000000 0x0b 0x0d 0x0d 0x0d 0x07 0x15 0x08
0x08 0x08 0x3f 0xac 0xcc 0xcd 0xdd>,
<594000000 0x10 0x1a 0x1a 0x1a 0x07 0x15 0x08
0x08 0x08 0x00 0xac 0xcc 0xcc 0xcc>;
以上表 340000000 这一栏为例:
参数 | 说明 |
---|---|
340000000 | 表示该栏参数所对应的最大 tmds clock 频率,适用于 tmds clock 低于 165Mhz 的分辨率 |
0x0b | clock lane swing swing: 幅值,值越大幅值越大 |
0x0d | data lane2 swing swing: 幅值,值越大幅值越大 |
0x0d | data lane1 swing swing: 幅值,值越大幅值越大 |
0x0d | data lane0 swing swing: 幅值,值越大幅值越大 |
0x07 | data lane0 pre-emphasis mode: bit[0] data lane1 pre-emphasis mode: bit[1] data lane2 pre-emphasis mode: bit[2] pre-emphasis mode: 0--full mode 1--half mode |
0x15 | data lane0 pre-emphasis level: bit[1:0] data lane1 pre-emphasis level: bit[3:2] data lane2 pre-emphasis level: bit[5:4] pre-emphasis level: 预加重强度,值越大加重强度越大,为0时关闭预加重 |
0x08 | data lane2 pre-emphasis swing: bit[4:0] pre-emphasis swing: 预加重幅值,值越大幅值越大 |
0x08 | data lane1 pre-emphasis swing: bit[4:0] pre-emphasis swing: 预加重幅值,值越大幅值越大 |
0x08 | data lane0 pre-emphasis swing: bit[4:0] pre-emphasis swing: 预加重幅值,值越大幅值越大 |
0x3f | data lane0 pre-emphasis driver path gate: bit[0], main driver path gate: bit[1] data lane1 pre-emphasis driver path gate: bit[2], main driver path gate: bit[3] data lane2 pre-emphasis driver path gate: bit[4], main driver path gate: bit[5] clock lane pre-emphasis driver path gate: bit[6], main driver path gate: bit[7] 写1 enable path |
0xac | data lane2 pre-emphasis second delay gate: bit[0], pre-emphasis first delay gate: bit[1] data lane2 main driver second delay gate: bit[2], main driver first delay gate: bit[3] clock lane pre-emphasis second delay gate: bit[4], pre-emphasis first delay gate: bit[5] clock lane main driver second delay gate: bit[6], main driver first delay gate: bit[7] 写1 enable delay |
0xcc | data lane0 pre-emphasis second delay gate: bit[0], pre-emphasis first delay gate: bit[1] data lane0 main driver second delay gate: bit[2], main driver first delay gate: bit[3] data lane1 pre-emphasis second delay gate: bit[4], pre-emphasis first delay gate: bit[5] data lane1 main driver second delay gate: bit[6], main driver first delay gate: bit[7] 写1 enable delay |
0xcd | data lane2 delay time: bit[3:0] clock lane delay time: bit[7:4] delay time:延迟时间,值越大延迟越大 |
0xdd | data lane0 delay time: bit[3:0] data lane1 delay time: bit[7:4] delay time:延迟时间,值越大延迟越大 |
2.1.8.1.3 RK3528 信号配置
RK3528 HDMI 信号强度可通过 dts 的 rockchip,phy-table
属性配置,格式定义如下:
rockchip,phy-table =
<165000000 0x03 0x04 0x0c 0x12 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00>,
<340000000 0x03 0x04 0x0c 0x12 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00>,
<594000000 0x02 0x08 0x0d 0x18 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00>;
以上表 340000000 这一栏为例:
参数 | 说明 |
---|---|
340000000 | 表示该栏参数所对应的最大 tmds clock 频率,适用于 tmds clock 低于 165Mhz 的分辨率 |
0x03 | clock lane current bias control: 0x00:320uA 0x0f:920uA 步进40uA |
0x04 | data lane current bias control: 0x00:320uA 0x0f:920uA 步进40uA |
0x0c | clock lane swing: bit[4:0] swing: 幅值,值越大幅值越大 |
0x12 | data lane swing: bit[4:0] ESD event detection threshold: bit[7:5] swing: 幅值,值越大幅值越大 ESD event detection threshold: 触发ESD事件阈值,值越大阈值越大 |
0x00 | Pre-cursor pre-emphasis: bit[2:0] Post-cursor pre-emphasis: bit[7:4] pre-emphasis: 预加重,值越大预加重越强,0值关闭预加重 |