1、简介
DRM全称是Direct Rendering Manager,是DRI(Direct Rendering Infrastructure)框架的一个组件;
Android 新版本逐渐从 Framebuffer 框架迁移到 DRM 上,从内核 4.4 开始,RK 的显示框架逐渐迁移到 DRM 上;本文档介绍如何使用新的显示框架,适用于以下 SDK:
●RK3399 Android7.1 SDK
●
rk3368H Android7.1 SDK/ RK3368H Android8.1 SDK
●
RK3126C Android8.1 SDK
●
RK3288 Android7.1 SDK
●RK3399 Linux SDK
2、变量定义
●Android7.1/Android8.1
#define PROPERTY_TYPE "sys"
●Android9.0 and after
#define PROPERTY_TYPE "vendor"
3、HDMI/DP 相关配置
3.1 HDMI 配置 dts
3.1.1 使能对应显示设备节点
打开显示设备执行相关 hdmi 的 probe 函数,注册显示设备驱动,如打开 HDMI 需要添加:
&hdmi {
status = "okay";
};
3.1.2 使能显示接口组件
display-subsystem 注册会把所有打开的设备以组件的形式加在一起,等所有的组件加载完毕后,统一进行 bind/unbind。
3.1.3 绑定VOP
如果平台存在两个VOP(RK3288、RK3399):vopb(支持 4K)、vopl(只支持 2K),当显示设备节点打开时,显示接口对应 vopb 和 vopl 的 ports 都会打开,需要关闭用不到的那个VOP。
比如 hdmi 绑定到 vopb 需要添加:
&hdmi_in_vopl {
status = "disabled";
};
反之若绑定到 vopl 则添加:
&hdmi_in_vopb {
status = "disabled";
};
如果平台只有一个 VOP,可以跳过。
3.1.4 开机LOGO
如果
Uboot logo未开启,那
kernel阶段也无法显示开机logo,只能等到android启动后才能看到显示;在dts里面将对应的route使能即可打开uboot logo支持,比如打开hdmi的uboot logo显示:
&route_hdmi {
status = "okay"
};
3.1.5 绑定 PLL(只有 RK3399 需要)
rk3399 的 hdmi 所绑定的 vop 时钟需要挂载到 vpll 上,若是双显,需将另一个 vop 时钟挂到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>;
};
3.2 HDMI 相关配置说明
3.2.1 信号强度配置 (RK3288/RK3368/RK3399)
由于硬件走线差异,不同板子有可能需要不同的驱动强度配置,当遇到电视兼容性问题时,可以尝试修改这个看是否有改善。
hdmi 信号强度可通过 dts 的 rockchip.phy-table 属性配置,格式定义:<PIXELCLOCK PHY_CKSYMTXCTRL PHY_TXTERM PHY_VLEVCTRL>.
更多详细内容请下载附件查看