IMX95 Camera Usage Guide
π Introductionβ
This article guides you how to get started using TechNexion camera modules on EDM-IMX95 EVM board.
You must have the background knowledge to modify the kernel configuration, rebuild, and replace the kernel and the device tree source (DTS).
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β
- TEVS Series
- TEVM Series
| Camera Series | Products |
|---|---|
| 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 Series | Products |
|---|---|
| TEVM | TEVM-AR0144 TEVM-AR0145 TEVM-AR0234 TEVM-AR0235 TEVM-AR0246 TEVM-AR0521 TEVM-AR0522 TEVM-AR0544 TEVM-AR0821 TEVM-AR0822 TEVM-AR0830 TEVM-AR1335 TEVM-AR2020 |

π§© Supported Boardsβ
| SoM | Board |
|---|---|
| EDM-IMX95 | IMX95-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.
If you are using the CSI2 connector, please remember to set the SW2 switch to the ON position to enable it.
π» 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.
Download Link:β
πΎ 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
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
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 Version | Yocto Branch |
|---|---|
| 6.18.20 | tn-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β
-
Connect the debug console cable to carrier board.
-
Power on the board and interrupt the boot process. Keep pressing
Enterwhen the following message appears:Hit any key to stop autoboot: -
Specify the appropriate device tree for cameras using the
dtoverlayenvironment variable in U-Boot:
u-boot=> setenv dtoverlay lvds-vl10112880 tevs-csi0 tevs-csi1
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.
- Continue boot process.
u-boot=> saveenv
u-boot=> boot
π₯ Start Camera Video Stream via GStreamerβ
Launch GStreamer Pipelineβ
-
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.
-
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
- 1280x800Replace
1with the camera number from the previous step. This shows all supported pixel formats and resolutions. -
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=falseReplace
$CAMERA_NAMEwith the actual camera name from step 1, and<res_w>and<res_h>with your desired resolution (e.g., 1280x720).Recommended FormatYUY2 (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
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.