The High Definition Multimedia Interface (HDMI) driver supports the on-chip DesignWare HDMI hardware module, which provides the capability to transfer uncompressed video, audio, and data using a single cable. HDMI audio is only supported when using supported CEA-861-E video modes. If you are using non-CEA video modes, the HDMI audio clock will not be set up correctly and you cannot use HDMI audio. This is a limitation of the i.MX6-integrated HDMI transmitter. The ConnectCore 6 Plus SBC has an HDMI transmitter port connected to I2C3.

Kernel configuration

You can manage the HDMI audio driver support through the kernel configuration option:

  • SoC Audio support for IMX - HDMI (CONFIG_SND_SOC_IMX_HDMI)

This option is enabled as built-in on the ConnectCore 6 Plus SBC kernel configuration file.

Kernel driver

The HDMI drivers for the i.MX6 are located at:

File Description

drivers/mfd/mxc-hdmi-core.c

HDMI core driver

sound/soc/fsl/fsl_hdmi.c

HDMI Audio SoC DAI driver

sound/soc/fsl/imx-hdmi-dma.c

HDMI Audio SoC platform DMA driver

sound/soc/fsl/imx_hdmi.c

HDMI Audio SoC machine driver

Device tree bindings and customization

There are no device tree bindings for HDMI audio.

The HDMI audio interface is defined in the CPU and SBC device tree files.

Define the HDMI interface

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_audio: hdmi_audio@120000 {
	compatible = "fsl,imx6q-hdmi-audio";
	clocks = <&clks IMX6QDL_CLK_HDMI_ISFR>,
	         <&clks IMX6QDL_CLK_HDMI_IAHB>,
	         <&clks IMX6QDL_CLK_HSI_TX>;
	clock-names = "hdmi_isfr", "hdmi_iahb", "mipi_core";
	dmas = <&sdma 2 26 0>;
	dma-names = "tx";
	status = "disabled";
};

Configure IOMUX

The HDMI uses dedicated pins. No IOMUX configuration is necessary.

Enable HDMI audio

{cpu-family} device tree
	sound_hdmi: sound-hdmi {
		compatible = "fsl,imx6q-audio-hdmi",
		             "fsl,imx-audio-hdmi";
		model = "imx-audio-hdmi";
		hdmi-controller = <&hdmi_audio>;
	};

[...]

&hdmi_audio {
	status = "okay";
};

&hdmi_core {
	ipu_id = <0>;
	disp_id = <1>;
	status = "okay";
};

HDMI transmitter port on I2C3

{cpu-family} device tree
&i2c3 {
	edid@50 {
		compatible = "fsl,imx6-hdmi-i2c";
		reg = <0x50>;
	};

	[...]
};
This section covers HDMI audio. For HDMI video interface documentation, see Image Processing Unit (IPU).