EDM-IMX95 TEVS Camera Usage Guide
  • 24 Mar 2025
  • 25 Minutes to read
  • Dark
    Light
  • PDF

EDM-IMX95 TEVS Camera Usage Guide

  • Dark
    Light
  • PDF

Article summary

Introduction

This article guides you how to get started with the TechNexion camera module on the EDM-IMX95 EVM board.

Background knowledge needed

You must first understand how to modify kernel configuration, rebuild, and replace the kernel and the device tree source (DTS).

IMX95-EVM for example

This article will base on Yocto 5.0 (Scarthgap) 2025Q2 Release, the Linux kernel version is 6.6.52_2.2.0.

Supported Camera Modules

Camera Series

Products

TEVS

TEVS-AR0144

TEVS-AR0145

TEVS-AR0234

TEVS-AR0521

TEVS-AR0522

TEVS-AR0522

TEVS-AR0821

TEVS-AR0822

TEVS-AR1335

VLS3

VLS3-AR0144

VLS3-AR0145

VLS3-AR0234

VLS3-AR0521

VLS3-AR0522

VLS3-AR0522

VLS3-AR0821

VLS3-AR0822

VLS3-AR1335

Supported Boards

SoM

Carrier Board

EDM-IMX95

IMX95-EVM


Overview


Connect debug console, power and camera to board

  1. Prepare DC12V power cable to plug in. If using VLS3 series camera must have DC 12V/minimum 3A power adapter by barrel jack connector.

  2. Preparing UART debug console connect to UART_A_A55 connector.

  3. Preparing 10.1 inch LVDS panel for output display.

  4. The IMX95 have 2 MIPI-CSI-2 interface. We refer to them as CSI1 and CSI2, they are 70-pin board-to-board connectors from Hirose. As below the picture shows the TEVS camera with connector.

    Figure1. TEVS camera module plug into CSI2 connector with Ribbon cable.

    CSI2 switch

    If using CSI2 connector please remember set the SW2 “ON“ to enable.

    Figure2. TEVS camera module plug into CSI1 connector with Ribbon cable.


Prepare Yocto demo image for testing TechNexion camera

The demo image contains the required device tree blobs and camera drivers to enable TechNexion cameras.
Prebuilt demo images can be available for download via TechNexion's server.

Image Download Link:
Supported Release List

You can find the prebuilt images page in Release Notes, take YP4.2 2025Q1 for example:

Flash image to e.MMC or SD Card.

  • Using 'uuu' to flash
    UUU

boot mode

Ensure the boot mode is configured as serial download mode.

  • Using u-boot's 'ums' Command to Write Flash Storage over USB-OTG

    UMS

u-boot

The board must also boot from either e.MMC with a version of U-boot that has the ums command enabled.


Build Yocto

Supported TechNexion Linux kernel branch for TechNexion camera modules.

Linux Kernel

branch

6.6.52

tn-imx_6.1.52_2.2.0-stable


Instructions for testing camera

Specify camera DTB in u-boot

  1. Connect debug console cable to  carrier board.

  2. Power on the board , and enter in u-boot prompt mode.
    (keep hit enter when the "Hit any key to stop autoboot : " is shown.)

  3. Specify camera dtb via fdtfile u-boot environment variable.

    For CIS1 connector :

    u-boot=> setenv fdtfile imx95-edm-evm-tevs.dtb

    For CIS2 connector :

    u-boot=> setenv fdtfile imx95-edm-evm-tevs-csi1.dtb
  4. Continue boot process.

    u-boot=> saveenv
    u-boot=> boot

    About device tree Blob

    Those dtb include LVDS 10.1 inch panel part that can drive the output display for checking camera streaming.

Setup the media controller before camera streaming

We can check whether camera have been link via media control command.

$ media-ctl -p

Get the media controller information as follows :

Media controller API version 6.6.52

Media device information
------------------------
driver          mxc-isi
model           FSL Capture Media Device
serial
bus info        platform:4ad50000.isi
hw revision     0x0
driver version  6.6.52

Device topology
- entity 1: crossbar (13 pads, 9 links, 8 routes)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
        routes:
                2/0 -> 5/0 [ACTIVE]
                2/0 -> 6/0 [ACTIVE]
                2/0 -> 7/0 [ACTIVE]
                2/0 -> 8/0 [ACTIVE]
                2/0 -> 9/0 [ACTIVE]
                2/0 -> 10/0 [ACTIVE]
                2/0 -> 11/0 [ACTIVE]
                2/0 -> 12/0 [ACTIVE]
        pad0: Sink
        pad1: Sink
        pad2: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                <- "4ac10000.syscon:formatter@20":1 [ENABLED,IMMUTABLE]
        pad3: Sink
        pad4: Sink
        pad5: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
        pad6: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.1":0 [ENABLED,IMMUTABLE]
        pad7: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.2":0 [ENABLED,IMMUTABLE]
        pad8: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.3":0 [ENABLED,IMMUTABLE]
        pad9: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.4":0 [ENABLED,IMMUTABLE]
        pad10: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.5":0 [ENABLED,IMMUTABLE]
        pad11: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.6":0 [ENABLED,IMMUTABLE]
        pad12: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                -> "mxc_isi.7":0 [ENABLED,IMMUTABLE]

- entity 15: mxc_isi.0 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev1
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":5 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]

- entity 18: mxc_isi.0.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video0
        pad0: Sink
                <- "mxc_isi.0":1 [ENABLED,IMMUTABLE]

- entity 26: mxc_isi.1 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev2
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":6 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]

- entity 29: mxc_isi.1.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video1
        pad0: Sink
                <- "mxc_isi.1":1 [ENABLED,IMMUTABLE]

- entity 37: mxc_isi.2 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev3
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":7 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.2.capture":0 [ENABLED,IMMUTABLE]

- entity 40: mxc_isi.2.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video2
        pad0: Sink
                <- "mxc_isi.2":1 [ENABLED,IMMUTABLE]

- entity 48: mxc_isi.3 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev4
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":8 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.3.capture":0 [ENABLED,IMMUTABLE]

- entity 51: mxc_isi.3.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video3
        pad0: Sink
                <- "mxc_isi.3":1 [ENABLED,IMMUTABLE]

- entity 59: mxc_isi.4 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev5
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":9 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.4.capture":0 [ENABLED,IMMUTABLE]

- entity 62: mxc_isi.4.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video4
        pad0: Sink
                <- "mxc_isi.4":1 [ENABLED,IMMUTABLE]

- entity 70: mxc_isi.5 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev6
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":10 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.5.capture":0 [ENABLED,IMMUTABLE]

- entity 73: mxc_isi.5.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video5
        pad0: Sink
                <- "mxc_isi.5":1 [ENABLED,IMMUTABLE]

- entity 81: mxc_isi.6 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev7
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":11 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.6.capture":0 [ENABLED,IMMUTABLE]

- entity 84: mxc_isi.6.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video6
        pad0: Sink
                <- "mxc_isi.6":1 [ENABLED,IMMUTABLE]

- entity 92: mxc_isi.7 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev8
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":12 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.7.capture":0 [ENABLED,IMMUTABLE]

- entity 95: mxc_isi.7.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video7
        pad0: Sink
                <- "mxc_isi.7":1 [ENABLED,IMMUTABLE]

- entity 103: 4ac10000.syscon:formatter@20 (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev9
        routes:
                0/0 -> 1/0 [ACTIVE]
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
                <- "csidev-4ad30000.csi":1 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
                -> "crossbar":2 [ENABLED,IMMUTABLE]

- entity 108: csidev-4ad30000.csi (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev10
        routes:
                0/0 -> 1/0 [ACTIVE]
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
                <- "tevs 1-0048":0 []
        pad1: Source
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:smpte170m xfer:709 ycbcr:601 quantization:lim-range]
                -> "4ac10000.syscon:formatter@20":0 [ENABLED,IMMUTABLE]

- entity 113: tevs 1-0048 (1 pad, 1 link, 0 routes)
              type V4L2 subdev subtype Sensor flags 0
              device node name /dev/v4l-subdev11
        pad0: Source
                [stream:0 fmt:UYVY8_1X16/640x480@1/60 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/640x480
                 crop:(0,0)/640x480]
                -> "csidev-4ad30000.csi":0 []

Or it will be easier to understand if you output it as an image.

$ media-ctl --print-dot > graph.dot
$ dot -Tpng graph.dot > graph.png
# if you don't have tool, you need to install it as follows.
# sudo apt-get install -y graphviz.

We can observe that the link between ‘tevs 1-0048’ to ‘csidev-4ad30000’ is a dotted line. It’s means not available.

Need to enable the link between TEVS and CSI device.

$ media-ctl -l "'tevs 1-0048':0 -> 'csidev-4ad30000.csi':0 [1]"

Sets the resolution and format of all entities to the same as the camera.

You can list camera formats, resolutions and frame interval via v4l2 control command.

# formats
$ v4l2-ctl -d /dev/v4l-subdev11 --list-subdev-mbus-codes
ioctl: VIDIOC_SUBDEV_ENUM_MBUS_CODE (pad=0)
        0x200f: MEDIA_BUS_FMT_UYVY8_1X16

# resolutions
$ v4l2-ctl -d /dev/v4l-subdev11 --list-subdev-framesize code=0x200f
ioctl: VIDIOC_SUBDEV_ENUM_FRAME_SIZE (pad=0)
        Size Range: 640x480 - 640x480
        Size Range: 1280x720 - 1280x720
        Size Range: 1280x800 - 1280x800

# frame interval of resolution
$ v4l2-ctl -d /dev/v4l-subdev11 --list-subdev-frameintervals width=640,height=480,code=0x200f
ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=0)
        Interval: 0.017s (60.000 fps)

$ v4l2-ctl -d /dev/v4l-subdev11 --list-subdev-frameintervals width=1280,height=720,code=0x200f
ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=0)
        Interval: 0.017s (60.000 fps)

$ v4l2-ctl -d /dev/v4l-subdev11 --list-subdev-frameintervals width=1280,height=800,code=0x200f
ioctl: VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL (pad=0)
        Interval: 0.017s (60.000 fps)

Disable not used sources of crossbar, modify the route through the “crossbar” and only keep the channel of video0.

$ media-ctl -R "'crossbar' [2/0 -> 5/0 [1], 2/0 -> 6/0 [0], 2/0 -> 7/0 [0], 2/0 -> 8/0 [0], 2/0 -> 9/0 [0], 2/0 -> 10/0 [0], 2/0 -> 11/0 [0], 2/0 -> 12/0 [0]]"

Set resolution to 1280×720.

$ media-ctl -V "'crossbar':2 [fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]"
$ media-ctl -V "'mxc_isi.0':0 [fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]"
$ media-ctl -V "'4ac10000.syscon:formatter@20':0 [fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]"
$ media-ctl -V "'csidev-4ad30000.csi':0 [fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]"
$ media-ctl -V "'tevs 1-0048':0 [fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]"

Start camera video stream via gstreamer

Specify the capture device you just get and start gstreamer to get video stream on screen.

$ gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=YUY2, width=1280, height=720" ! waylandsink sync=false

We can get media controller as below :

$ media-ctl -p
Media controller API version 6.6.52

Media device information
------------------------
driver          mxc-isi
model           FSL Capture Media Device
serial
bus info        platform:4ad50000.isi
hw revision     0x0
driver version  6.6.52

Device topology
- entity 1: crossbar (13 pads, 9 links, 8 routes)
            type V4L2 subdev subtype Unknown flags 0
            device node name /dev/v4l-subdev0
        routes:
                2/0 -> 5/0 [ACTIVE]
                2/0 -> 6/0 [INACTIVE]
                2/0 -> 7/0 [INACTIVE]
                2/0 -> 8/0 [INACTIVE]
                2/0 -> 9/0 [INACTIVE]
                2/0 -> 10/0 [INACTIVE]
                2/0 -> 11/0 [INACTIVE]
                2/0 -> 12/0 [INACTIVE]
        pad0: Sink
        pad1: Sink
        pad2: Sink
                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]
                <- "4ac10000.syscon:formatter@20":1 [ENABLED,IMMUTABLE]
        pad3: Sink
        pad4: Sink
        pad5: Source
                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]
                -> "mxc_isi.0":0 [ENABLED,IMMUTABLE]
        pad6: Source
                -> "mxc_isi.1":0 [ENABLED,IMMUTABLE]
        pad7: Source
                -> "mxc_isi.2":0 [ENABLED,IMMUTABLE]
        pad8: Source
                -> "mxc_isi.3":0 [ENABLED,IMMUTABLE]
        pad9: Source
                -> "mxc_isi.4":0 [ENABLED,IMMUTABLE]
        pad10: Source
                -> "mxc_isi.5":0 [ENABLED,IMMUTABLE]
        pad11: Source
                -> "mxc_isi.6":0 [ENABLED,IMMUTABLE]
        pad12: Source
                -> "mxc_isi.7":0 [ENABLED,IMMUTABLE]

- entity 15: mxc_isi.0 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev1
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601
                 compose.bounds:(0,0)/1280x720
                 compose:(0,0)/1280x720]
                <- "crossbar":5 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1280x720 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1280x720
                 crop:(0,0)/1280x720]
                -> "mxc_isi.0.capture":0 [ENABLED,IMMUTABLE]

- entity 18: mxc_isi.0.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video0
        pad0: Sink
                <- "mxc_isi.0":1 [ENABLED,IMMUTABLE]

- entity 26: mxc_isi.1 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev2
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":6 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.1.capture":0 [ENABLED,IMMUTABLE]

- entity 29: mxc_isi.1.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video1
        pad0: Sink
                <- "mxc_isi.1":1 [ENABLED,IMMUTABLE]

- entity 37: mxc_isi.2 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev3
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":7 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.2.capture":0 [ENABLED,IMMUTABLE]

- entity 40: mxc_isi.2.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video2
        pad0: Sink
                <- "mxc_isi.2":1 [ENABLED,IMMUTABLE]

- entity 48: mxc_isi.3 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev4
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":8 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.3.capture":0 [ENABLED,IMMUTABLE]

- entity 51: mxc_isi.3.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video3
        pad0: Sink
                <- "mxc_isi.3":1 [ENABLED,IMMUTABLE]

- entity 59: mxc_isi.4 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev5
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":9 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.4.capture":0 [ENABLED,IMMUTABLE]

- entity 62: mxc_isi.4.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video4
        pad0: Sink
                <- "mxc_isi.4":1 [ENABLED,IMMUTABLE]

- entity 70: mxc_isi.5 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev6
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":10 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.5.capture":0 [ENABLED,IMMUTABLE]

- entity 73: mxc_isi.5.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video5
        pad0: Sink
                <- "mxc_isi.5":1 [ENABLED,IMMUTABLE]

- entity 81: mxc_isi.6 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev7
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":11 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.6.capture":0 [ENABLED,IMMUTABLE]

- entity 84: mxc_isi.6.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video6
        pad0: Sink
                <- "mxc_isi.6":1 [ENABLED,IMMUTABLE]

- entity 92: mxc_isi.7 (2 pads, 2 links, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
             device node name /dev/v4l-subdev8
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 compose.bounds:(0,0)/1920x1080
                 compose:(0,0)/1920x1080]
                <- "crossbar":12 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:YUV8_1X24/1920x1080 field:none colorspace:jpeg xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1920x1080
                 crop:(0,0)/1920x1080]
                -> "mxc_isi.7.capture":0 [ENABLED,IMMUTABLE]

- entity 95: mxc_isi.7.capture (1 pad, 1 link)
             type Node subtype V4L flags 0
             device node name /dev/video7
        pad0: Sink
                <- "mxc_isi.7":1 [ENABLED,IMMUTABLE]

- entity 103: 4ac10000.syscon:formatter@20 (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev9
        routes:
                0/0 -> 1/0 [ACTIVE]
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]
                <- "csidev-4ad30000.csi":1 [ENABLED,IMMUTABLE]
        pad1: Source
                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]
                -> "crossbar":2 [ENABLED,IMMUTABLE]

- entity 108: csidev-4ad30000.csi (2 pads, 2 links, 1 route)
              type V4L2 subdev subtype Unknown flags 0
              device node name /dev/v4l-subdev10
        routes:
                0/0 -> 1/0 [ACTIVE]
        pad0: Sink
                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]
                <- "tevs 1-0048":0 [ENABLED]
        pad1: Source
                [stream:0 fmt:UYVY8_1X16/1280x720 field:none colorspace:srgb xfer:srgb ycbcr:601]
                -> "4ac10000.syscon:formatter@20":0 [ENABLED,IMMUTABLE]

- entity 113: tevs 1-0048 (1 pad, 1 link, 0 routes)
              type V4L2 subdev subtype Sensor flags 0
              device node name /dev/v4l-subdev11
        pad0: Source
                [stream:0 fmt:UYVY8_1X16/1280x720@1/60 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range
                 crop.bounds:(0,0)/1280x720
                 crop:(0,0)/1280x720]
                -> "csidev-4ad30000.csi":0 [ENABLED]

Trouble shooting

Ensure camera device tree blob (DTB) is specified correctly in u-boot.

u-boot=> printenv fdtfile
#for CSI1
fdtfile=imx95-edm-evm-tevs.dtb
#for CSI2
fdtfile=imx95-edm-evm-tevs-csi1.dtb

We can check whether camera have been initialized correctly.

$ dmesg -t | grep tevs
platform 4ad30000.csi: Fixed dependency cycle(s) with /soc/bus@44000000/i2c@44350000/tevs@48
tevs 1-0048: tevs_probe() device node: tevs@48
tevs 1-0048: Version:24.9.0.1
tevs 1-0048: Product:TEVS-AR0144, HeaderVer:3, MIPI_Rate:800
tevs 1-0048: probe success

Ensure camera device tree blob(DTB) is specified correctly.

$ dmesg -t | grep -i model
Machine model: TechNexion EDM-IMX95 and EVM baseboard with TechNexion TEVS camera
mali 4d900000.gpu: Using configured power model mali-tvax-power-model, and fallback mali-simple-power-model


 v4l2-ctl --list-device

Shell

Get the device number of camera capture device. As example we have camera on CSI1, that we can see /dev/video0 specify the capture device.

mxc-isi-cap (platform:4ad50000.isi):
        /dev/video0
        /dev/video1
        /dev/video2
        /dev/video3
        /dev/video4
        /dev/video5
        /dev/video6
        /dev/video7
        /dev/media0

mxc-jpeg codec (platform:4c500000.jpegdec):
        /dev/video10

mxc-jpeg codec (platform:4c550000.jpegenc):
        /dev/video11

wave6-dec (platform:wave6-dec):
        /dev/video8

wave6-enc (platform:wave6-enc):
        /dev/video9


Was this article helpful?