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.

This topic 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 ConnectCore 6 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 ConnectCore 6 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/fbdev/mxc/mxc_hdmi.c

HDMI display driver

drivers/mxc/hdmi-cec/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 ConnectCore 6 device tree
hdmi_core: hdmi_core@120000 {
	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@20e0000 {
	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.

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 = <0>;
	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";

	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 = "RGB666";
	mode_str ="1920x1080M@60";
	default_bpp = <16>;
	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:

~# 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
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";
};