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,由于GPIOAGPIOB各有 8 个引脚,计算得到:GPIO4C0、GPIO4C1和GPIO4C7分别为 16、17 和 23。

3)RK_FUNC_3:表示IOMUX选择功能 3,即hdmii2c_sda,见下图。

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


相关推荐

  1. 测试覆盖率那些

    2024-07-13 16:48:03       38 阅读
  2. Nginx-那些

    2024-07-13 16:48:03       34 阅读
  3. AR技术的那些

    2024-07-13 16:48:03       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 16:48:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 16:48:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 16:48:03       57 阅读
  4. Python语言-面向对象

    2024-07-13 16:48:03       68 阅读

热门阅读

  1. Redis 中的跳跃表(Skiplist)基本介绍

    2024-07-13 16:48:03       21 阅读
  2. python的面向对象编程

    2024-07-13 16:48:03       21 阅读
  3. 单元测试有什么好处呢?

    2024-07-13 16:48:03       21 阅读
  4. Git使用介绍教程

    2024-07-13 16:48:03       19 阅读
  5. Python 使用总结之 docx 添加图片设置图片大小详解

    2024-07-13 16:48:03       22 阅读
  6. unity 学习笔记 UI

    2024-07-13 16:48:03       21 阅读
  7. py每日spider案例之tts制作接口

    2024-07-13 16:48:03       18 阅读
  8. 创建型模式-单例模式

    2024-07-13 16:48:03       18 阅读
  9. 云WAF在电子商务领域具体能提供哪些安全功能?

    2024-07-13 16:48:03       20 阅读
  10. 常用排序算法汇总

    2024-07-13 16:48:03       20 阅读
  11. 前后端项目部署方案汇总

    2024-07-13 16:48:03       22 阅读