The NXP i.MX6UL provides a 24-bit RGB LCD interface. The CPU also provides a Pixel Processing Pipeline (PXP) used to process video and graphics data before sending to the LCD.

Kernel configuration

You can manage the video support through the following kernel configuration options:

  • MXS LCD framebuffer support (CONFIG_FB_MXS)

  • Support for frame buffer devices (CONFIG_FB)

  • Low-level LCD controls (LCD_CLASS_DEVICE)

  • Platform LCD controls (LCD_PLATFORM)

  • Show the logo centered in the screen (FB_LOGO_CENTERED)

  • Custom logo 224-color (displays logo_custom_clut224.ppm) (LOGO_CUSTOM_CLUT224)

  • MXC PxP V4L2 driver (CONFIG_VIDEO_MXC_PXP_V4L2)

These options are enabled as built-in on the default ConnectCore 6UL kernel configuration file.

Kernel driver

The driver for the video interface is located at:

File Description

drivers/video/fbdev/mxsfb.c

Video driver

drivers/media/platform/mxc/output/mxc_pxp_v4l2.c

PXP driver

Device tree bindings and customization

The LCD interface is documented at Documentation/devicetree/bindings/display/fsl,lcdif.yaml.

The device tree contains entries for:

  • The LCD interface

    • The supported displays

  • The PXP system

LCD interface

ConnectCore 6UL SBC Pro device tree
/* Parallel LCD */
&lcdif {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_lcdif_dat0_17
		     &pinctrl_lcdif_clken
		     &pinctrl_lcdif_hvsync>;
	lcd-supply = <&ldo4_ext>;       /* BU90T82 LVDS bridge power */
	display = <&g101evn010>;
	status = "disabled";

	f07a0102: display@0 {
		bits-per-pixel = <16>;
		bus-width = <18>;

		display-timings {
			native-mode = <&timing0>;
			timing0: timing0 {
				clock-frequency = <33260000>;
				hactive = <800>;
				vactive = <480>;
				hfront-porch = <50>;
				hback-porch = <0>;
				hsync-len = <128>;
				vback-porch = <25>;
				vfront-porch = <10>;
				vsync-len = <10>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <1>;
				pixelclk-active = <0>;
			};
		};
	};

	hsd101pfw2: display@1 {
		bits-per-pixel = <16>;
		bus-width = <18>;

		display-timings {
			native-mode = <&timing1>;
			timing1: timing1 {
				clock-frequency = <45000000>;
				hactive = <1024>;
				vactive = <600>;
				hfront-porch = <10>;
				hback-porch = <0>;
				hsync-len = <136 176 216>;
				vback-porch = <0>;
				vfront-porch = <0>;
				vsync-len = <12 25 38>;
				de-active = <1>;
				pixelclk-active = <1>;
			};
		};
	};

	g101evn010: display@2 {
		bits-per-pixel = <16>;
		bus-width = <18>;

		display-timings {
			native-mode = <&timing3>;
			timing3: timing3 {
				clock-frequency = <68930000>;
				hactive = <1280>;
				vactive = <800>;
				hfront-porch = <120>;
				hback-porch = <0>;
				hsync-len = <8>;
				vback-porch = <10>;
				vfront-porch = <0>;
				vsync-len = <6>;
				hsync-active = <1>;
				vsync-active = <1>;
				de-active = <1>;
				pixelclk-active = <0>;
			};
		};
	};
};

On the ConnectCore 6UL SBC Pro device tree there are three LCD displays declared inside the lcdif node:

  • Fusion 7" parallel LCD (f07a0102)

  • Fusion 10" LVDS (hsd101pfw2)

  • AUO 10" LVDS (g101evn010)

The display property selects which of the defined displays on the device tree is enabled. On the ConnectCore 6UL SBC Pro, the default selected display is the AUO 10".

Both the AUO and the Fusion 10" displays are interfaced via low-voltage differential signalling (LVDS). For this reason, the ConnectCore 6UL SBC Pro board has a parallel-to-LVDS bridge to convert the LCD lines into LVDS.

To select any of the Fusion displays, see Enable Fusion display.

PXP system

ConnectCore 6UL SBC Pro device tree
&pxp_v4l2 {
	status = "okay";
};

&pxp {
	status = "okay";
};

Use the video interface

When the video interface is available a bootup logo displays on the screen. For X11 images, a SATO desktop launches after Linux starts.

Play a video

Due to the small size of the root file system partition, the default image only includes VP8 codec which allows to play WebM videos.

To play a video using Gstreamer:

# gplay-1.0 /tmp/big-buck-bunny_trailer_640x360.webm
No video is included in the default image due to lack of space. You can download WebM demo videos from http://www.webmfiles.org/demo-files/.
You will only be able to play small-sized videos flawlessly due to the lack of a Video Processing Unit (VPU).

Add support for additional video codecs

Default images only provide support for VP8 video codec. To add support for a different codec, you must include packages for each video type. For example, to add support to play h264 videos, add the following lines to your local.conf:

conf/local.conf
EXTRA_IMAGE_FEATURES += " dey-gstreamer"
IMAGE_INSTALL_append = " gstreamer1.0 gstreamer1.0-plugins-ugly x264 gstreamer1.0-libav "
PACKAGECONFIG_append_pn-gstreamer1.0-plugins-ugly = " x264"

These new packages will increase the final image size and may not fit on the default rootfs partition. You can resize the rootfs partition, decreasing other partitions such as the update partition, and then program your new image in the resized rootfs partition. See Change the partition table for more information.

Enable Fusion display

Fusion 10" display

The ConnectCore 6UL SBC Pro selects the AUO 10" LCD display by default. To enable the Fusion 10" display, make the following changes to your final platform DTS file (file imx6ul-ccimx6ulsbc.dts is used as example):

  • Make the Fusion 10" the default display.

  • Enable the Fusion touch controller and disable the Goodix.

diff --git a/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dts b/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dts
index 26c09cbefc7d..ea8a810414f4 100644
--- a/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dts
+++ b/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dts
@@ -84,21 +84,23 @@
  * controller, so when unconmmenting this node you need to also comment the
  * max98089 node.
  */
-//&fusion_touch {
-//     status = "okay";
-//};
+&fusion_touch {
+       status = "okay";
+};

 /* Goodix touch */
 &goodix_touch {
-       status = "okay";
+       //status = "okay";
 };

 &goodix_touch2 {
-       status = "okay";
+       //status = "okay";
 };

 /* Parallel LCD */
 &lcdif {
+       /* Set display to Fusion 10" */
+       display = <&hsd101pfw2>;
        status = "okay";
 };

Fusion 7" display

The ConnectCore 6UL SBC Pro selects the AUO 10" LCD display by default. To enable the Fusion 7" display, make the following changes to your final platform DTS file (file imx6ul-ccimx6ulsbc.dts is used as example):

  • Make the Fusion 7" the default display.

  • Set the pinctrl to one without pinctrl_lcdif_hvsync since the 7" display doesn’t need VSYNC and HSYNC signals.

  • Remove the lcd-supply property because the LVDS bridge is not needed for this display.

  • Enable the Fusion touch controller and disable the Goodix.

diff --git a/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dts b/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dts
index 26c09cbefc7d..4a2cc2b2ff06 100644
--- a/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dts
+++ b/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dts
@@ -84,21 +84,26 @@
  * controller, so when unconmmenting this node you need to also comment the
  * max98089 node.
  */
-//&fusion_touch {
-//     status = "okay";
-//};
+&fusion_touch {
+       status = "okay";
+};

 /* Goodix touch */
 &goodix_touch {
-       status = "okay";
+       //status = "okay";
 };

 &goodix_touch2 {
-       status = "okay";
+       //status = "okay";
 };

 /* Parallel LCD */
 &lcdif {
+       /* Set display to Fusion 7" */
+       pinctrl-0 = <&pinctrl_lcdif_dat0_17
+                    &pinctrl_lcdif_clken>;
+       /delete-property/ aux-supply;
+       display = <&f07a0102>;
        status = "okay";
 };