Show Contents

# Video

Note This section contains Linux BSP documentation for kernel v4.1. Click here for v4.9 BSP documentation.

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.

## Platform driver mapping

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/fb/mxsfb.txt.

The PXP system documented at Documentation/devicetree/bindings/video/fsl,pxp.txt.

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>;
        display = <&f07a0102>;
        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>;
                };
            };
        };

        f10a0102: 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>;
                };
            };
        };
    };

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

- Fusion 7" parallel LCD (f07a0102)
- Fusion 10" LVDS (f10a0102)

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

The other supported display (Fusion 10") is 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 the LVDS Fusion 10" display instead, the following changes are needed:

    ConnectCore 6UL SBC Pro

    diff --git a/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dtsi b/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dtsi
    index db4210b3f571..e0cd7eb27560 100644
    --- a/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dtsi
    +++ b/arch/arm/boot/dts/imx6ul-ccimx6ulsbc.dtsi
    @@ -218,8 +218,10 @@
     &lcdif {
            pinctrl-names = "default";
            pinctrl-0 = <&pinctrl_lcdif_dat0_17
    -                    &pinctrl_lcdif_clken>;
    -       display = <&f07a0102>;
    +                    &pinctrl_lcdif_clken
    +                    &pinctrl_lcdif_hvsync>;
    +       lcd-supply = <&ldo4_ext>;       /* BU90T82 LVDS bridge power */
    +       display = <&f10a0102>;
            status = "disabled";
            f07a0102: display@0 {

- A new pinctrl_lcdif_hvsync IOMUX is required, because the Fusion 10" LVDS display needs to use VSYNC and HSYNC signals.
- A new lcd-supply property is needed since this regulator powers the parallel-to-LVDS bridge that is required to convert the LCD lines into LVDS.
- The display property must change to point to the Fusion 10" LVDS display node.

### PXP system

    ConnectCore 6UL SBC Pro device tree

    &pxp_v4l2 {
        status = "okay";
    };

    &pxp {
        status = "okay";
    };

## Using 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.

### Playing 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:

    gst-launch-1.0 playbin uri=file:///tmp/big-buck-bunny_trailer_640x360.webm

Note 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/.

Note You will only be able to play small-sized videos flawlessly due to the lack of a Video Processing Unit (VPU).

© 2018 Digi International Inc. All rights reserved.
Video updated on 22 January 2018 02:43:37 PM