Issue: IMX708 sensor detected on Radxa Zero 3W, but ISP pipeline cannot start (VIDIOC_STREAMON → -ENODEV)

Hello,
I am working on getting the Sony IMX708 (Raspberry Pi Camera Module 3) running on Radxa Zero 3W (RK3566).

I have already completed the following steps:


:check_mark: 1. IMX708 kernel driver successfully ported from Raspberry Pi kernel

The original RPi driver was adapted and fixed to build on Radxa’s kernel:

  • missing headers (linux/unaligned.hasm/unaligned.h)

  • V4L2 API differences (v4l2_subdev_state_get_format, _get_crop, etc.)

  • probe signature differences (imx708_probe(client, id))

I compiled the module externally and loaded it successfully:

imx708: loading out-of-tree module taints kernel.
imx708 2-001a: camera module ID 0x0381

So the sensor initializes correctly over I²C.


:check_mark: 2. Device-tree overlay created and loaded successfully

I modified the radxa-zero3-rpi-camera-v2 overlay to match IMX708:

  • compatible = "sony,imx708"

  • reg = <0x1a>

  • clock-names = "inclk"

  • added required:

    link-frequencies = /bits/ 64 <450000000>;
    
    

After loading the overlay, the IMX708 probe works fully (no clock or DT errors).


:check_mark: 3. The sensor appears on I²C and responds properly

i2cdetect -y 2:

0x1a

Kernel:

imx708 2-001a: camera module ID 0x0381


:check_mark: 4. The ISP (rkisp) and CSI links are initialized

media-ctl -d /dev/media0 --print-topology shows:

  • rockchip-csi2-dphy0

  • rkisp-csi-subdev

  • rkisp-isp-subdev

  • rkisp_mainpath, rkisp_selfpath, etc.

All CSI/ISP internal links are in ENABLED state.


:cross_mark: Problem

Although the sensor probes successfully, it does not appear as a media entity.
/dev/media0 contains only ISP and CSI nodes, but no entity for IMX708.

As a result, when attempting to start streaming:

v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=1

I get:

VIDIOC_STREAMON returned -1 (No such device)

This indicates the ISP pipeline has no active upstream video source because the IMX708 sensor was never registered into the media graph.


:red_question_mark: What I believe is missing

The IMX708 driver I ported is written for Raspberry Pi’s Unicam pipeline, not for Rockchip’s rkisp_v5 media architecture.

Therefore it does not implement the Rockchip-specific media entity structure, pad definitions, and routing links needed for:

IMX708 → MIPI-CSI2 → rkisp-csi-subdev → rkisp-isp-subdev → rkisp_mainpath (/dev/video0)

Without being registered as a media entity, the ISP cannot pull frames from the sensor.


:folded_hands: What I need help with

I am looking for guidance or examples on:

:one: How to properly integrate a new sensor driver (IMX708) into the RK3566 rkisp_v5 media pipeline

  • entity initialization

  • pad formats

  • links to rockchip-csi2-dphy and rkisp-csi-subdev

  • correct integration via v4l2_subdev and media controller API

:two: Reference Rockchip sensor drivers for RK3566

(For example: IMX219 or OV5647 drivers customized by Radxa/Rockchip.)

:three: Any existing work or patches adding IMX708 to Rockchip platforms


:puzzle_piece: Additional details

  • Board: Radxa Zero 3W (AIC8800W WiFi)

  • Kernel: 6.1.84-10-rk2410-nocsf

  • Only /dev/media0 exists; /dev/media1 is absent.

  • Schematic: Sensor appears on I²C2 (address 0x1a), CSI2 interface, DPHY0.


:speech_balloon: Summary

The IMX708 is fully detected and initialized by the driver, but it is not registered as a media entity in the Rockchip ISP graph, so streaming cannot start.

I would appreciate guidance on how to properly adapt/extend the driver so that rkisp_v5 recognizes IMX708 as a valid upstream source.

Thank you!

1 Like

You can refer to this port here: IMX477 / IMX577 / IMX766 on Rock 5 - #8 by avaf

Care to share a photo of your setup / connection and your port? Maybe we can have a look and see if something is missing.

where you able to get it running?
would be interessting to me as well