HDMI video
The High Definition Multimedia Interface (HDMI) driver supports the on-chip DesignWare HDMI hardware module. This module allows you to transfer uncompressed video, audio, and data using a single cable.
The ConnectCore 6 SBC includes an HDMI transmitter port connected to I2C3.
Note This section covers HDMI video. For HDMI audio interface documentation, see HDMI audio.
Kernel configuration
You can manage the HDMI driver support through the kernel configuration option:
- MXC HDMI driver support (CONFIG_FB_MXC_HDMI)
This option is enabled as built-in on the default ConnectCore 6 SBC kernel configuration file.
Additionally, the BSP has a driver for Consumer Electronic Control (CEC). You can manage the HDMI CEC driver support through the kernel configuration option MXC HDMI CEC (Consumer Electronic Control) support (CONFIG_MXC_HDMI_CEC), disabled on the default ConnectCore 6 SBC kernel configuration file.
This feature is not supported in Digi Embedded Yocto.
Platform driver mapping
The HDMI drivers for the i.MX6 are located at:
File | Description |
---|---|
drivers/mfd/mxc-hdmi-core.c | HDMI core driver |
drivers/video/mxc/mxc_hdmi.c | HDMI display driver |
drivers/mxc/mxc_hdmi-cec.c | HDMI CEC driver |
Device tree bindings and customization
The i.MX6 HDMI interface device tree binding is documented at Documentation/devicetree/bindings/video/mxc_hdmi_video.txt.
The HDMI interface is defined in the i.MX6 CPU and ConnectCore 6 SBC device tree files.
Definition of the HDMI video interface
Common i.MX6 device tree
hdmi_core: hdmi_core@00120000 { compatible = "fsl,imx6q-hdmi-core"; reg = <0x00120000 0x9000>; clocks = <&clks IMX6QDL_CLK_HDMI_ISFR>, <&clks IMX6QDL_CLK_HDMI_IAHB>, <&clks IMX6QDL_CLK_HSI_TX>; clock-names = "hdmi_isfr", "hdmi_iahb", "mipi_core"; status = "disabled"; }; hdmi_video: hdmi_video@020e0000 { compatible = "fsl,imx6q-hdmi-video"; reg = <0x020e0000 0x1000>; reg-names = "hdmi_gpr"; interrupts = <0 115 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6QDL_CLK_HDMI_ISFR>, <&clks IMX6QDL_CLK_HDMI_IAHB>, <&clks IMX6QDL_CLK_HSI_TX>; clock-names = "hdmi_isfr", "hdmi_iahb", "mipi_core"; status = "disabled"; };
IOMUX configuration
The HDMI uses dedicated pins. No IOMUX configuration is necessary.
HDMI IPU:DI selection and video enabling
You can configure HDMI video to originate from either of the two Display Interface ports (DI0 or DI1) within any IPU in the i.MX6 CPU.
ConnectCore 6 SBC device tree
&hdmi_core { ipu_id = <1>; disp_id = <1>; status = "okay"; }; &hdmi_video { fsl,phy_reg_vlev = <0x0294>; fsl,phy_reg_cksymtx = <0x800d>; status = "okay"; };
HDMI transmitter port on I2C3
ConnectCore 6 SBC device tree
&i2c3 { clock-frequency = <100000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c3>; status = "okay"; hdmi: edid@50 { compatible = "fsl,imx6-hdmi-i2c"; reg = <0x50>; }; [...] };
HDMI resolution
Specify HDMI display resolution on your platform's device tree using the frame buffer property mode_str:
mxcfb1: fb@0 { compatible = "fsl,mxc_sdc_fb"; disp_dev = "hdmi"; interface_pix_fmt = "RGB24"; mode_str ="1920x1080M@60"; default_bpp = <32>; int_clk = <0>; late_init = <0>; status = "okay"; };
You can overwrite the device tree configuration through the video kernel command line argument passed by the U-Boot bootloader. Use the variable extra_bootargs to append parameters to the kernel command line. For example, to set the HDMI resolution on frame buffer 0 to 1280x720 pixels with a refresh rate of @60Hz, run the following command on the U-Boot console:
=> setenv extra_bootargs video=mxcfb0:dev=hdmi,1280x720M@60 video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off
To discover the available modes supported by your monitor, run the following command:
root@ccimx6sbc:~# cat /sys/class/graphics/fb0/modes U:640x480p-59 S:640x480p-60 S:720x480p-60 S:720x480p-60 S:1280x720p-60 S:1920x1080p-60 S:720x576p-50 S:720x576p-50 S:1280x720p-50 S:1920x1080p-50 V:640x480p-60 D:1920x1080p-60 V:640x480p-60
CEA modes and DVI support
By default, the HDMI driver allows only CEA modes. The HDMI interface is able to support both audio and video using CEA modes. However, particularly when using DVI displays, you may want to use non-CEA modes. In those cases, you can enable all non-CEA modes by running the following command on the U-Boot console:
=> setenv extra_bootargs mxc_hdmi.only_cea=0
Note Non-CEA modes configure the HDMI interface with clock rates that are not valid for audio support.
When using HDMI to DVI adapters, you may need to remove the HDMI capabilities from the EDID settings. To do so, use the dvi_mode configuration entry as follows:
ConnectCore 6 SBC device tree
&hdmi_video { fsl,phy_reg_vlev = <0x0294>; fsl,phy_reg_cksymtx = <0x800d>; digi,dvi_mode; status = "okay"; };