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 |
---|---|
Video driver |
|
PXP driver |
Device tree bindings and customization
The LCD interface is documented at
Documentation/devicetree/bindings/display/fsl,lcdif.yaml
.
The PXP system documented at
Documentation/devicetree/bindings/media/fsl-pxp.txt
.
The device tree contains entries for:
-
The LCD interface
-
The supported displays
-
-
The PXP system
LCD interface
/* 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
&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
:
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";
};