当前位置:   article > 正文

Linux DRM 那些事 - HDMI 接口 DTS 配置

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

  1. #include "rk3399.dtsi"
  2. #include "rk3399-linux.dtsi"
  3. #include "rk3399-opp.dtsi"
  4. ## 1. HDMI使能
  5. &hdmi {
  6. #address-cells = <1>;
  7. #size-cells = <0>;
  8. #sound-dai-cells = <0>;
  9. pinctrl-names = "default";
  10. pinctrl-0 = <&hdmi_i2c_xfer>, <&hdmi_cec>; ## 配置HDMI IOMUX,细节见下面
  11. status = "okay";               ## 使能HDMI,驱动可执行probe()。status的值覆盖include的其他dtsi文件中status的值
  12. };
  13. ## 2.设置HDMI绑定vopb
  14. ## 2.1 禁止vopl
  15. &hdmi_in_vopl {
  16. status = "disabled";
  17. };
  18. ## 2.2 使能vopb
  19. &hdmi_in_vopb {
  20. status = "okay";
  21. };
  22. ## 2.3 绑定到vopb
  23. &route_hdmi {
  24. status = "okay";
  25. connect = <&vopb_out_hdmi>;
  26. };
二、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

  1. hdmi {
  2.   ## 1.设置HDMI I2C功能
  3. hdmi_i2c_xfer: hdmi-i2c-xfer {
  4. rockchip,pins =
  5. <4 17 RK_FUNC_3 &pcfg_pull_none>,
  6. <4 16 RK_FUNC_3 &pcfg_pull_none>;
  7. };
  8. ## 2.设置HDMI-CEC功能
  9. hdmi_cec: hdmi-cec {
  10. rockchip,pins =
  11. <4 23 RK_FUNC_1 &pcfg_pull_none>;
  12. };
  13. };

<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

  1. hdmi: hdmi@ff940000 {
  2. # 1.与HDMI平台驱动匹配(实现了DRM框架中的encoder和connector初始化)
  3. compatible = "rockchip,rk3399-dw-hdmi";
  4. # 2.寄存器物理基地址和内存映射长度(0x20000)
  5. reg = <0x0 0xff940000 0x0 0x20000>;
  6. ## 3.IOMUX配置,见本文第二部分
  7. pinctrl-names = "default";
  8. pinctrl-0 = <&hdmi_i2c_xfer>;
  9. # 4.中断配置,见"Linux内核中断之获取中断号"
  10. interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH 0>;
  11. # 5. 时钟配置
  12. clocks = <&cru PCLK_HDMI_CTRL>,
  13. <&cru SCLK_HDMI_SFR>,
  14. <&cru PLL_VPLL>,
  15. <&cru PCLK_VIO_GRF>,
  16. <&cru SCLK_HDMI_CEC>;
  17. clock-names = "iahb", "isfr", "vpll", "grf", "cec";
  18. # 6.电源域(后续介绍)
  19. power-domains = <&power RK3399_PD_HDCP>;
  20. # 7.寄存器读写访问宽度(4字节)
  21. reg-io-width = <4>;
  22. # 8.指向GRF(通用寄存器文件)
  23. rockchip,grf = <&grf>;
  24. # 9.禁止状态,rk3399-rock-pi-4.dtsi中使能
  25. status = "disabled";
  26. # 10.配置绑定vop的hdmi接口的端节点
  27. ports {
  28. hdmi_in: port {
  29. #address-cells = <1>;
  30. #size-cells = <0>;
  31. hdmi_in_vopb: endpoint@0 {
  32. reg = <0>;
  33. remote-endpoint = <&vopb_out_hdmi>;
  34. };
  35. hdmi_in_vopl: endpoint@1 {
  36. reg = <1>;
  37. remote-endpoint = <&vopl_out_hdmi>;
  38. };
  39. };
  40. };
  41. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/633014
推荐阅读
相关标签
  

闽ICP备14008679号