快捷搜索:  汽车  科技

linux下hdmi调试(DRM那些事-HDMI接口DTS配置)

linux下hdmi调试(DRM那些事-HDMI接口DTS配置)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 &

本文基于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,见下图。

linux下hdmi调试(DRM那些事-HDMI接口DTS配置)(1)

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>; }; }; }; };

参考:

RK3399 datasheet.pdf

Rockchip RK3399 Datasheet V1.0-20160504.pdf

注:本文仅在简书、OSCHINA和今日头条发布过,转载请标注原作者和链接。

猜您喜欢: