Skip to main content

IMX95 Camera Usage Guide

πŸš€ Introduction​

This article guides you how to get started using TechNexion camera modules on EDM-IMX95 EVM board.

Background knowledge needed

You must have the background knowledge to modify the kernel configuration, rebuild, and replace the kernel and the device tree source (DTS).

e.g. IMX95-EVM Baseboard

This article uses the IMX95-EVM baseboard as an example.

This article is based on the πŸ”— Yocto 6.0 (Wrynose) 2026Q3 Release.
The corresponding Linux kernel version is 6.18.20-2.0.0.

πŸ“Έ Supported Camera Modules​

Camera SeriesProducts
TEVS
TEVS-AR0144
TEVS-AR0145
TEVS-AR0234
TEVS-AR0235
TEVS-AR0246
TEVS-AR0521
TEVS-AR0522
TEVS-AR0544
TEVS-AR0821
TEVS-AR0822
TEVS-AR0830
TEVS-AR1335
TEVS-AR2020
Camera Sensor Comparison

🧩 Supported Boards​

SoMBoard
EDM-IMX95IMX95-EVM

πŸ”§ Hardware Setup Instructions​

1. Power Supply Preparation​

  • Use a DC 5V or 12V power cable to supply power to the board.

2. Debug Console Connection​

  • Prepare a USB-to-UART cable if you're connecting to a PC.
  • Connect it to the UART_A_A55 connector.

3. Display Output Connection​

  • Prepare a 10.1 inch LVDS panel for output display.
  • Connect the display to the LVDS connector on the board.

4. Camera Interface (CSI) Overview​

  • The board features two MIPI CSI-2 interfaces, referred to as CSI1 and CSI2.
  • These use 70-pin board-to-board connectors manufactured by Hirose.
  • The image below shows a TEVS camera connected to the CSI2 interface.
Figure 1. TEVS camera module plugged into the CSI2 connector using a ribbon cable.

CSI2 Switch

If you are using the CSI2 connector, please remember to set the SW2 switch to the ON position to enable it.

Figure 2. TEVS camera module plugged into the CSI1 connector using a ribbon cable.


πŸ’» Prepare Yocto demo image for testing TechNexion camera​

To test TechNexion cameras, you will need a Yocto-based demo image that includes the necessary device tree blobs and camera drivers.

πŸ”½ Downloading the Demo Image​

Prebuilt demo images are available for download on TechNexion's official server.

πŸ”— Supported Release List

πŸ’Ύ Flashing the Image​

You can flash the image to either e.MMC or an SD Card using one of the following methods:

1. Using uuu Tool (Universal Update Utility)​

TechNexion provides a guide to flash the image using the uuu tool: πŸ”— How to Flash with UUU

Boot Mode

Before flashing, ensure the board is set to Serial Download Mode in the boot configuration.


2. Using ums Command in U-Boot (USB Mass Storage)​

Alternatively, you can write the image directly to flash storage over USB-OTG using U-Boot’s ums command: πŸ”— Using UMS in U-Boot

U-Boot Requirement

The board must be booted with a version of U-Boot that supports the ums command. Typically, this is done from the existing e.MMC.


πŸ› οΈ Build Yocto​

TechNexion supports building a Yocto-based Linux image tailored for camera modules using the following kernel and branch.

πŸ“¦ Supported Linux Kernel​

Linux Kernel VersionYocto Branch
6.18.20tn-imx_6.18.20_2.0.0-stable

πŸ“ Source and Build Instructions​

πŸ”— Fetch Yocto Source

πŸ“– Build Yocto (Instructions for EDM-IMX95)


πŸ“Έ Camera Testing Instructions​

Specify Camera DTBO in U-Boot​

  1. Connect the debug console cable to carrier board.

  2. Power on the board and interrupt the boot process. Keep pressing Enter when the following message appears: Hit any key to stop autoboot:

  3. Specify the appropriate device tree for cameras using the dtoverlay environment variable in U-Boot:

u-boot=> setenv dtoverlay lvds-vl10112880 tevs-csi0 tevs-csi1
About device tree Blob

The command above is an example for connecting two cameras simultaneously. If only one camera is connected, simply select the corresponding DTBO for the CSI port.

  1. Continue boot process.
u-boot=> saveenv
u-boot=> boot

πŸŽ₯ Start Camera Video Stream via GStreamer​

Launch GStreamer Pipeline​

  1. List supported cameras:

    $ cam -l
    ...
    Available cameras:
    1: 'tevs' (/base/soc/bus@44000000/i2c@44350000/tevs@48)

    # If connect second camera
    2: 'tevs' (/base/soc/bus@42000000/i2c@42540000/tevs@48)

    This command will display available cameras and their names.

  2. Check supported resolutions:

    $ cam -c 1 --info
    ...
    Using camera /base/soc/bus@44000000/i2c@44350000/tevs@48 as cam0
    0: 1280x800-YUYV/Rec709/sRGB/Rec601/Limited
    * Pixelformat: NV12 (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800
    * Pixelformat: ABGR8888 (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800
    * Pixelformat: BGR888 (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800
    * Pixelformat: RGB888 (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800
    * Pixelformat: XRGB8888 (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800
    * Pixelformat: YUV444 (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800
    * Pixelformat: RGB565 (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800
    * Pixelformat: NV16 (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800
    * Pixelformat: YUYV (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800
    * Pixelformat: AVUY8888 (640x480)-(1280x800)/(+0,+0)
    - 640x480
    - 1280x720
    - 1280x800

    Replace 1 with the camera number from the previous step. This shows all supported pixel formats and resolutions.

  3. Launch GStreamer pipeline with libcamerasrc:

    $ gst-launch-1.0 libcamerasrc camera-name=$CAMERA_NAME ! \
    video/x-raw,format=YUY2,width=<res_w>,height=<res_h> ! \
    waylandsink sync=false

    Replace $CAMERA_NAME with the actual camera name from step 1, and <res_w> and <res_h> with your desired resolution (e.g., 1280x720).

    Recommended Format

    YUY2 (YUYV) format is recommended for optimal performance and compatibility with most display sinks.


Check Media Controller​

We can get media controller as below :

$ media-ctl -p
Media controller API version 6.18.20

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

Device topology
- entity 1: crossbar (13 pads, 10 links, 8 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev8
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,MUST_CONNECT
pad1: SINK,MUST_CONNECT
pad2: SINK,MUST_CONNECT
[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,MUST_CONNECT
pad4: SINK,MUST_CONNECT
<- "mxc_isi.output":0 [ENABLED,IMMUTABLE]
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-subdev9
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-subdev10
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-subdev11
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-subdev12
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-subdev13
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-subdev14
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-subdev15
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-subdev16
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: mxc_isi.output (1 pad, 1 link)
type Node subtype V4L flags 0
pad0: SOURCE
-> "crossbar":4 [ENABLED,IMMUTABLE]

- entity 110: 4ac10000.syscon:formatter@20 (2 pads, 2 links, 1 route)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev17
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 113: neoisp-0 (6 pads, 6 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev0
pad0: SINK
<- "neoisp-input0-0":0 [ENABLED,IMMUTABLE]
pad1: SINK
<- "neoisp-input1-0":0 []
pad2: SINK
<- "neoisp-params-0":0 [ENABLED]
pad3: SOURCE
-> "neoisp-frame-0":0 [ENABLED]
pad4: SOURCE
-> "neoisp-ir-0":0 []
pad5: SOURCE
-> "neoisp-stats-0":0 [ENABLED]

- entity 120: neoisp-input0-0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video11
pad0: SOURCE
-> "neoisp-0":0 [ENABLED,IMMUTABLE]

- entity 126: neoisp-input1-0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video12
pad0: SOURCE
-> "neoisp-0":1 []

- entity 132: neoisp-params-0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video13
pad0: SOURCE
-> "neoisp-0":2 [ENABLED]

- entity 138: neoisp-frame-0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video14
pad0: SINK
<- "neoisp-0":3 [ENABLED]

- entity 144: neoisp-ir-0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video15
pad0: SINK
<- "neoisp-0":4 []

- entity 150: neoisp-stats-0 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video16
pad0: SINK
<- "neoisp-0":5 [ENABLED]

- entity 158: neoisp-1 (6 pads, 6 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev1
pad0: SINK
<- "neoisp-input0-1":0 [ENABLED,IMMUTABLE]
pad1: SINK
<- "neoisp-input1-1":0 []
pad2: SINK
<- "neoisp-params-1":0 [ENABLED]
pad3: SOURCE
-> "neoisp-frame-1":0 [ENABLED]
pad4: SOURCE
-> "neoisp-ir-1":0 []
pad5: SOURCE
-> "neoisp-stats-1":0 [ENABLED]

- entity 165: neoisp-input0-1 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video17
pad0: SOURCE
-> "neoisp-1":0 [ENABLED,IMMUTABLE]

- entity 171: neoisp-input1-1 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video18
pad0: SOURCE
-> "neoisp-1":1 []

- entity 177: neoisp-params-1 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video19
pad0: SOURCE
-> "neoisp-1":2 [ENABLED]

- entity 183: neoisp-frame-1 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video20
pad0: SINK
<- "neoisp-1":3 [ENABLED]

- entity 189: neoisp-ir-1 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video21
pad0: SINK
<- "neoisp-1":4 []

- entity 195: neoisp-stats-1 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video22
pad0: SINK
<- "neoisp-1":5 [ENABLED]

- entity 203: neoisp-2 (6 pads, 6 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev2
pad0: SINK
<- "neoisp-input0-2":0 [ENABLED,IMMUTABLE]
pad1: SINK
<- "neoisp-input1-2":0 []
pad2: SINK
<- "neoisp-params-2":0 [ENABLED]
pad3: SOURCE
-> "neoisp-frame-2":0 [ENABLED]
pad4: SOURCE
-> "neoisp-ir-2":0 []
pad5: SOURCE
-> "neoisp-stats-2":0 [ENABLED]

- entity 210: neoisp-input0-2 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video23
pad0: SOURCE
-> "neoisp-2":0 [ENABLED,IMMUTABLE]

- entity 216: neoisp-input1-2 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video24
pad0: SOURCE
-> "neoisp-2":1 []

- entity 222: neoisp-params-2 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video25
pad0: SOURCE
-> "neoisp-2":2 [ENABLED]

- entity 228: neoisp-frame-2 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video26
pad0: SINK
<- "neoisp-2":3 [ENABLED]

- entity 234: neoisp-ir-2 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video27
pad0: SINK
<- "neoisp-2":4 []

- entity 240: neoisp-stats-2 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video28
pad0: SINK
<- "neoisp-2":5 [ENABLED]

- entity 248: neoisp-3 (6 pads, 6 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev3
pad0: SINK
<- "neoisp-input0-3":0 [ENABLED,IMMUTABLE]
pad1: SINK
<- "neoisp-input1-3":0 []
pad2: SINK
<- "neoisp-params-3":0 [ENABLED]
pad3: SOURCE
-> "neoisp-frame-3":0 [ENABLED]
pad4: SOURCE
-> "neoisp-ir-3":0 []
pad5: SOURCE
-> "neoisp-stats-3":0 [ENABLED]

- entity 255: neoisp-input0-3 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video29
pad0: SOURCE
-> "neoisp-3":0 [ENABLED,IMMUTABLE]

- entity 261: neoisp-input1-3 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video30
pad0: SOURCE
-> "neoisp-3":1 []

- entity 267: neoisp-params-3 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video31
pad0: SOURCE
-> "neoisp-3":2 [ENABLED]

- entity 273: neoisp-frame-3 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video32
pad0: SINK
<- "neoisp-3":3 [ENABLED]

- entity 279: neoisp-ir-3 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video33
pad0: SINK
<- "neoisp-3":4 []

- entity 285: neoisp-stats-3 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video34
pad0: SINK
<- "neoisp-3":5 [ENABLED]

- entity 293: neoisp-4 (6 pads, 6 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev4
pad0: SINK
<- "neoisp-input0-4":0 [ENABLED,IMMUTABLE]
pad1: SINK
<- "neoisp-input1-4":0 []
pad2: SINK
<- "neoisp-params-4":0 [ENABLED]
pad3: SOURCE
-> "neoisp-frame-4":0 [ENABLED]
pad4: SOURCE
-> "neoisp-ir-4":0 []
pad5: SOURCE
-> "neoisp-stats-4":0 [ENABLED]

- entity 300: neoisp-input0-4 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video35
pad0: SOURCE
-> "neoisp-4":0 [ENABLED,IMMUTABLE]

- entity 306: neoisp-input1-4 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video36
pad0: SOURCE
-> "neoisp-4":1 []

- entity 312: neoisp-params-4 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video37
pad0: SOURCE
-> "neoisp-4":2 [ENABLED]

- entity 318: neoisp-frame-4 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video38
pad0: SINK
<- "neoisp-4":3 [ENABLED]

- entity 324: neoisp-ir-4 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video39
pad0: SINK
<- "neoisp-4":4 []

- entity 330: neoisp-stats-4 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video40
pad0: SINK
<- "neoisp-4":5 [ENABLED]

- entity 338: neoisp-5 (6 pads, 6 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev5
pad0: SINK
<- "neoisp-input0-5":0 [ENABLED,IMMUTABLE]
pad1: SINK
<- "neoisp-input1-5":0 []
pad2: SINK
<- "neoisp-params-5":0 [ENABLED]
pad3: SOURCE
-> "neoisp-frame-5":0 [ENABLED]
pad4: SOURCE
-> "neoisp-ir-5":0 []
pad5: SOURCE
-> "neoisp-stats-5":0 [ENABLED]

- entity 345: neoisp-input0-5 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video41
pad0: SOURCE
-> "neoisp-5":0 [ENABLED,IMMUTABLE]

- entity 351: neoisp-input1-5 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video42
pad0: SOURCE
-> "neoisp-5":1 []

- entity 357: neoisp-params-5 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video43
pad0: SOURCE
-> "neoisp-5":2 [ENABLED]

- entity 363: neoisp-frame-5 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video44
pad0: SINK
<- "neoisp-5":3 [ENABLED]

- entity 369: neoisp-ir-5 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video45
pad0: SINK
<- "neoisp-5":4 []

- entity 375: neoisp-stats-5 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video46
pad0: SINK
<- "neoisp-5":5 [ENABLED]

- entity 383: neoisp-6 (6 pads, 6 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev6
pad0: SINK
<- "neoisp-input0-6":0 [ENABLED,IMMUTABLE]
pad1: SINK
<- "neoisp-input1-6":0 []
pad2: SINK
<- "neoisp-params-6":0 [ENABLED]
pad3: SOURCE
-> "neoisp-frame-6":0 [ENABLED]
pad4: SOURCE
-> "neoisp-ir-6":0 []
pad5: SOURCE
-> "neoisp-stats-6":0 [ENABLED]

- entity 390: neoisp-input0-6 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video47
pad0: SOURCE
-> "neoisp-6":0 [ENABLED,IMMUTABLE]

- entity 396: neoisp-input1-6 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video48
pad0: SOURCE
-> "neoisp-6":1 []

- entity 402: neoisp-params-6 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video49
pad0: SOURCE
-> "neoisp-6":2 [ENABLED]

- entity 408: neoisp-frame-6 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video50
pad0: SINK
<- "neoisp-6":3 [ENABLED]

- entity 414: neoisp-ir-6 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video51
pad0: SINK
<- "neoisp-6":4 []

- entity 420: neoisp-stats-6 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video52
pad0: SINK
<- "neoisp-6":5 [ENABLED]

- entity 428: neoisp-7 (6 pads, 6 links, 0 routes)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev7
pad0: SINK
<- "neoisp-input0-7":0 [ENABLED,IMMUTABLE]
pad1: SINK
<- "neoisp-input1-7":0 []
pad2: SINK
<- "neoisp-params-7":0 [ENABLED]
pad3: SOURCE
-> "neoisp-frame-7":0 [ENABLED]
pad4: SOURCE
-> "neoisp-ir-7":0 []
pad5: SOURCE
-> "neoisp-stats-7":0 [ENABLED]

- entity 435: neoisp-input0-7 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video53
pad0: SOURCE
-> "neoisp-7":0 [ENABLED,IMMUTABLE]

- entity 441: neoisp-input1-7 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video54
pad0: SOURCE
-> "neoisp-7":1 []

- entity 447: neoisp-params-7 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video55
pad0: SOURCE
-> "neoisp-7":2 [ENABLED]

- entity 453: neoisp-frame-7 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video56
pad0: SINK
<- "neoisp-7":3 [ENABLED]

- entity 459: neoisp-ir-7 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video57
pad0: SINK
<- "neoisp-7":4 []

- entity 465: neoisp-stats-7 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video58
pad0: SINK
<- "neoisp-7":5 [ENABLED]

- entity 475: csidev-4ad30000.csi (2 pads, 2 links, 1 route)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev18
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 480: tevs 1-0048 (1 pad, 1 link, 0 routes)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev19
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)/1280x800
crop:(0,0)/640x480]
-> "csidev-4ad30000.csi":0 []


🚨 Troubleshooting​

Verify Camera Initialization​

Use dmesg to check if the TEVS camera module was initialized correctly.

$ dmesg -t | grep tevs
tevs 1-0048: tevs_probe() device node: tevs@48
tevs 1-0048: Version:26.3.0.1
tevs 1-0048: Product:TEVS-AR0144, HeaderVer:3, MIPI_Rate:800
tevs 1-0048: Chip ID: 0x0356
tevs 1-0048: probe success

# If connect second camera
tevs 3-0048: tevs_probe() device node: tevs@48
tevs 3-0048: Version:26.3.0.1
tevs 3-0048: Product:TEVS-AR0144, HeaderVer:3, MIPI_Rate:800
tevs 3-0048: Chip ID: 0x0356
tevs 3-0048: probe success

Check Available Devices​

Verify that the video devices are available.

  $ v4l2-ctl --list-devices

Example output:

mxc-isi-cap (platform:4ad50000.isi):
/dev/video0
...
/dev/video8
/dev/media0

neoisp (platform:4ae00000.isp):
/dev/video11
...
/dev/video58

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

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

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

wave6-enc (platform:wave6-enc):
/dev/video10
Important

Ensure that /dev/media0 is present in the device list. This media controller device is essential for configuring the camera pipeline and managing the video capture interfaces.