Image Processing Unit (IPU)

The Image Processing Unit (IPU) is designed to support video and graphics processing functions and to interface with video and still image sensors and displays.

The IPU driver provides the following software support:

Kernel configuration

You can manage the IPU driver support through the kernel configuration option:

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

Platform driver mapping

The IPU drivers for the i.MX6 are located at drivers/mxc/ipu3:

File Description
ipu_common.c IPU common library functions
ipu_ic.c IPU IC base driver
ipu_device.c IPU driver device interface and fops functions
ipu_capture.c IPU CSI capture base driver
ipu_disp.c IPU display functions
ipu_calc_stripes_sizes.c Multi-stripes method functions for ipu_device.c
vdoa.c VDOA post-processing driver, used by ipu_device.c

drivers/video/mxc:

File Description
mxc_ipuv3_fb.c Driver for synchronous frame buffer
mxc_hdmi.c Display driver for HDMI interface
ldb.c Driver for synchronous frame buffer for on chip LVDS
mxc_dispdrv.c Display driver framework for synchronous frame buffer
mxc_edid.c Driver for EDID

Device tree bindings and customization

The i.MX6 IPU device tree binding is documented at Documentation/devicetree/bindings/fb/fsl_ipuv3_fb.txt.

The IPU is defined in the i.MX6 CPU and ConnectCore 6 SBC device tree files.

Definition of the GPU interface

Common i.MX6 device tree
ipu1: ipu@02400000 {
            compatible = "fsl,imx6q-ipu";
            reg = <0x02400000 0x400000>;
            interrupts = <0 6 IRQ_TYPE_LEVEL_HIGH>,
                     <0 5 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&clks IMX6QDL_CLK_IPU1>,
                 <&clks IMX6QDL_CLK_IPU1_DI0>, <&clks IMX6QDL_CLK_IPU1_DI1>,
                 <&clks IMX6QDL_CLK_IPU1_DI0_SEL>, <&clks IMX6QDL_CLK_IPU1_DI1_SEL>,
                 <&clks IMX6QDL_CLK_LDB_DI0>, <&clks IMX6QDL_CLK_LDB_DI1>;
            clock-names = "bus",
                      "di0", "di1",
                      "di0_sel", "di1_sel",
                      "ldb_di0", "ldb_di1";
            resets = <&src 2>;
            bypass_reset = <0>;
};

IOMUX configuration

Since the IPU is an internal CPU device, it doesn't have an IOMUX configuration.