Driver for IMX415 4 lane

Hey can u provide the driver for the 4 lane imx415 module which can support 4k@60
For axon.

Okay, working on it.
Will update as check completes.

Could you send on which application you will run camera or send the command that you are going to use for your application !?
ffplay, gst-launch-1.0 etc.

I will using it with gstreamer and mediamtx
ffmpeg as well

More i will send later

run.sh (781 Bytes)

  1. Download in Axon.
  2. Give permission sudo chmod +x ./run.sh
  3. sudo ./run.sh
  4. You will find one overlays named as below :
Enable 8.3MP Camera (IMX415) on CSI0 4lane Alpha Axon V0.3 

Let us know.

Thanks,
Actually im out of town so will test it next week.
In the mean time if u have any update of the current driver please share that as well

IMX415 @ CSI0 β€” 60 fps driver-mode report

Generated against: Vicharak Axon, kernel 6.1.75-axon (Ubuntu 24.04.4) Date: 2026-08-15 Audience: Vicharak support / kernel team Severity: Driver feature gap (not a hardware fault)


1. TL;DR

The imx415 driver shipped in 6.1.75-axon (v00.01.08) only exposes 2 sensor modes, and both are hard-capped at 30 fps. The IMX415 sensor itself supports 4K@60 (via 2-DOL HDR), 1080p@60 (via 2Γ—2 binning), and other high-rate modes β€” these are missing from the driver. The fix is to backport the full mode table from the upstream Rockchip BSP imx415.c (or mainline drivers/media/i2c/imx415.c). The DT binding sony,imx415 does not need to change.


2. What the driver supports today (current state)

Item Value Evidence
Sensor detected IMX415, 4-lane MIPI dmesg: imx415 1-0037: Detected IMX415 image sensor + detect imx415 lane 4
IΒ²C address 0x37 on i2c-1 i2c_dev.txt
Driver version 00.01.08 (builtin) dmesg: imx415 1-0037: driver version: 00.01.08
DT node &i2c0 (fea90000) β†’ cam2-imx415@37 dmesg_imx.txt
MIPI route sensor β†’ rockchip-csi2-dphy0 β†’ csi2-dphy0-hw@fedc0000 β†’ rkcif-mipi-lvds2 β†’ rkisp0-vir2 media_topology.txt
Link-freq menu 5 entries: 297 / 446 / 743 / 891 / 1188 MHz per lane v4l2_subdev_all.txt
Medibus codes SGBRG10_1X10 (0x300e) + SGBRG12_1X12 (0x3010) v4l2_mbus_codes.txt
Frame sizes exposed (10bpp) only 3864Γ—2192 v4l2_framesizes.txt
Frame sizes exposed (12bpp) none (empty enum) v4l2_framesizes.txt
Max framerate exposed 30 fps (20 fps at 297 MHz) v4l2_intervals.txt
Driver mode-table entries used only cur_best_fit(0) under normal operation dmesg_modes_unique.txt
HDR modes exposed none (hdr: 0 only) dmesg_modes_unique.txt
Binned / windowed modes none v4l2_framesizes.txt

The full set of v4l2-ctl evidence is in v4l2_*.txt. The pipeline topology is in media_topology.txt.


3. What we need (target state)

The IMX415 datasheet supports these modes on a 4-lane MIPI CSI-2 D-PHY:

# Mode Resolution BPP Path Max FPS Driver source for the mode table
1 Linear full 3864Γ—2192 10 / 12 linear 30 βœ“ already present (mode 0)
2 2-DOL HDR full 3864Γ—2192 10 hdr combine 60 βœ— missing β€” needs cur_best_fit(N) for hdr: 1
3 2Γ—2 binned 1932Γ—1090 10 binning 60 βœ— missing (driver only has 1944Γ—1097@12b linear at 30)
4 2Γ—2 binned HDR 1932Γ—1090 10 binning + hdr 60 βœ— missing
5 Windowed / cropped 1920Γ—1080, 1280Γ—720, 1280Γ—960, etc. 10 ROI 60+ βœ— missing
6 HDR windowed 1920Γ—1080 10 ROI + hdr 60 βœ— missing

The reference implementations are:

  • Upstream Linux: drivers/media/i2c/imx415.c at kernel.org β€” currently exposes 8 modes including all of the above.
  • Rockchip downstream BSP: drivers/media/i2c/imx415.c in rk3588-linux β€” exposes the same mode table with mipi_freq_idx correctly mapped to the 5 link-freq menu already on the Axon.

4. Side-by-side: current vs. required mode coverage

Resolution BPP Current driver Needed (per IMX415 datasheet) 4K60 path?
3864Γ—2192 10 :white_check_mark: 30 fps (mode 0) 30 fps linear n/a (this IS the 4K frame)
3864Γ—2192 12 :x: (empty enum) 20 / 30 fps linear n/a
3864Γ—2192 (HDR) 10 :x: (no hdr: 1) 60 fps 2-DOL HDR :white_check_mark: this is the only β€œ4K@60” path
1932Γ—1090 10 :x: (clamped to 3864Γ—2192) 60 fps 2Γ—2 binned n/a (1080p)
1944Γ—1097 12 :white_check_mark: 30 fps (mode 7) only at 30 fps n/a
1920Γ—1080 10 :x: (clamped) 60 fps windowed n/a (1080p)
1280Γ—720 10 :x: (clamped) 60+ fps windowed n/a
1280Γ—960, etc. 10 :x: (clamped) 60 fps windowed n/a

The 297/446/743/891/1188 MHz link-freq menu is already on the Axon and has enough bandwidth headroom (1188 MHz Γ— 4 lanes = 4.752 Gbps) for 1080p@60 and 4K@60 in HDR. The driver simply never references any output configuration that would use that bandwidth at 60 fps.


5. Live measurement (sensor under 30 fps linear)

Probe Result Interpretation
v4l2-ctl -d /dev/video11 --stream-mmap=4 --stream-count=90 30.00 fps (see earlier run in conversation) Sensor delivers exactly 30 fps in linear mode, as expected
v4l2-ctl --set-ctrl link_frequency=4 (max 1188 MHz) Still 30 fps reported in ENUM Mode table cap, not bandwidth
v4l2-ctl --set-ctrl vertical_blanking=46 (min) Still 30 fps reported in ENUM Same β€” min VTS still > required VTS for 60 fps
Force 1944Γ—1097@12bpp + max lf + min vblanking Still 30 fps in ENUM Mode table is the cap, not the sensor

6. Repro steps for the support team

# 1) Show sensor detection (4 lanes confirmed)
dmesg | grep imx415

# 2) Show only 1 frame size is exposed
v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-framesizes pad=0,stream=0,code=0x300e
# -> "Size Range: 3864x2192 - 3864x2192" (4 times, one per link-freq slot)

# 3) Show only 20/30 fps are exposed, never 60
v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-frameintervals \
    pad=0,stream=0,width=3864,height=2192,code=0x300e
# -> "Interval: 0.033s (30.000 fps)" and "0.050s (20.000 fps)" only

# 4) Show only 1 driver mode (cur_best_fit(0)) is ever used
#    (after letting a few seconds of operation pass)
dmesg | grep cur_best_fit | sort -u
# -> only "cur_best_fit(0)" β€” never 1, 2, 3, 4, 5, 6, 7

7. Why this is a driver bug, not a hardware issue

  1. The part is detected as a genuine IMX415 on 4 lanes (dmesg: Detected IMX415 image sensor + detect imx415 lane 4).
  2. The Sony IMX415 datasheet supports 4K@60 (2-DOL HDR) and 1080p@60 (2Γ—2 binning / windowed) β€” the silicon can do it.
  3. The driver exposes a 5-step link_frequency menu (up to 1188 MHz/lane = 4.752 Gbps total), which is enough MIPI bandwidth for both 1080p@60 and 4K@60 in HDR.
  4. The driver’s own pixel_rate control (read-only 356.8 MHz for mode 0) is computed from the mode table, not from the sensor β€” so the β€œmax 30 fps” ceiling is a driver-side decision, not a sensor-side limit.
  5. Manual attempts to force 60 fps (max link-freq, min vblanking, mode change to 1944Γ—1097@12b) all return 30 fps in ENUM_FRAMEINTERVAL β€” the driver itself rejects them.

8. Suggested fix

Two options, in order of preference:

Option A β€” Vendor backport (recommended): Pull the latest imx415.c from Rockchip’s rk3588-linux BSP. It exposes the same DT binding (sony,imx415) and the same link_frequency menu already on the Axon, but with the full mode table including 2-DOL HDR, 2Γ—2 binning, and windowed modes. No DT changes needed.

Option B β€” Upstream backport: Replace with mainline drivers/media/i2c/imx415.c from kernel.org. Same binding, slightly different control IDs (exposure / analogue_gain / link_frequency) β€” fully backward compatible with the existing DT.

Option C β€” Minimal patch: If neither full backport is feasible right now, the minimum patch to add support for 1080p@60 is ~20 lines: add 2 entries to the driver’s supported_modes[] table for 1932Γ—1090 @ 10bpp linear and 1920Γ—1080 @ 10bpp linear, both with mipi_freq_idx = 4 (1188 MHz). A reference diff is available on request.


9. Workaround until the fix lands

We’re using the 3864Γ—2192 @ 30 fps linear mode, which is the only mode the driver exposes. This is confirmed working at 30.00 fps via:

v4l2-ctl -d /dev/video11 --set-fmt-video=width=1920,height=1080,pixelformat=NV12 \
    --stream-mmap=4 --stream-count=90 --stream-poll
# <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps

For higher framerates we’d need a kernel rebuild with the upstream imx415.c.


10. Files in this attachment bundle

File What it contains
IMX415_60fps_Driver_Report.md This document
system_info.txt uname -a and /etc/os-release
dmesg_imx.txt `dmesg
dmesg_modes_unique.txt Unique cur_best_fit entries the driver ever logs
dmesg_full.txt First 100 lines of dmesg for context
media_topology.txt media-ctl -d /dev/media0 -p (full pipeline graph)
v4l2_subdev_all.txt v4l2-ctl -d /dev/v4l-subdev2 --all (full control list)
v4l2_framesizes.txt ENUM_FRAME_SIZE for 10bpp + 12bpp
v4l2_intervals.txt ENUM_FRAME_INTERVAL for 3864Γ—2192
v4l2_mbus_codes.txt ENUM_MBUS_CODE
v4l2_devices.txt All V4L2 devices on the system
v4l2_video11.txt ISP mainpath format list + current fmt
v4l2_video0.txt CIF raw path format list + current fmt
v4l2_fps_measured.txt Live FPS measurement (90 frames)
modinfo_imx.txt modinfo imx415 (driver build info)
i2c_dev.txt IΒ²C device tree for the sensor

imx415_60fps_evidence.zip (11.2 KB)

Thanks for sharing the report.

We checked the current mainline driver as well. According to our review and available references, mainline also does not support 4K@60 on IMX415. It is quite different from the Rockchip kernel driver, but in this case the difference does not help for your requirement; mainline basically supports full resolution around 30 fps and does not expose the HDR/binning/windowed high-fps modes needed for 4K@60.

So the issue is not that hardware is failing. Camera detection, 4-lane MIPI, and 4K@30 are working fine. The missing part is the driver mode table / high-speed MIPI configuration for 60 fps.

We also checked other RK3588 implementations. Some boards are able to run IMX415 4K@60, but only after customizing the imx415 driver (like adding 1782 Mbps/lane mode, updated register sequence, and 4K@60 mode (3864x2192, 10-bit linear, 60 fps)). There is no ready-made patch for Axon that we can directly apply.

We will figure out the required changes and try to implement this on our side. Will update you as the check/implementation completes.

Thanks.

U can give me some pilots with changing speeds and i can test them for u

This will take time, since many other request are pending, maybe we can guide you how to do it and you can try on your own, we can actively help.

Sure please guide for something on how to start at least

Hello, I’ve compiled everything I’ve found regarding custom driver support for 4K@60fps in the following guide. You can try it here:

IMX415 4K@60 on Axon (RK3588) β€” Step-by-Step Guide

Target: 3864Γ—2192 @ 60 fps (β‰ˆ 4K@60)
Platform: Vicharak Axon, kernel 6.1.x-axon
Official kernel build guide: Build Vicharak Kernel from source | Vicharak


Important notes before starting

  1. Current Axon driver supports 4K@30 only β€” this needs a kernel driver change, not just an overlay.
  2. Mainline imx415.c will NOT help β€” use the Rockchip-style driver in Vicharak kernel.
  3. 4-lane MIPI is mandatory β€” enable overlay: Enable 8.3MP Camera (IMX415) on CSI0 4lane
  4. Backup your system before kernel changes.

Phase 0 β€” Confirm baseline (4K@30 working)

Step 0.1 β€” Verify sensor

dmesg | grep imx415

Expected: Detected IMX415, lane 4, driver version shown.

Step 0.2 β€” Check pipeline

media-ctl -d /dev/media0 -p

Step 0.3 β€” Confirm max fps today is 30

v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-frameintervals \
  pad=0,stream=0,width=3864,height=2192,code=0x300e

Step 0.4 β€” Measure live fps

v4l2-ctl -d /dev/video11 --set-fmt-video=width=3840,height=2160,pixelformat=NV12 \
  --stream-mmap=4 --stream-count=90 --stream-poll

Expected today: ~30.00 fps


Phase 1 β€” Download kernel source (Vicharak official method)

Follow Vicharak kernel guide:
https://docs.vicharak.in/vicharak_sbcs/axon/axon-linux/linux-development-guide/linux-kernel/

Step 1.1 β€” Install build dependencies

On Ubuntu 20.04+ / Debian 11+ (host PC or on Axon itself):

sudo apt-get update

sudo apt-get install build-essential python3 python-is-python3 libssl-dev \
git-core gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler \
gcc-aarch64-linux-gnu mtools parted llvm clang pv bc bison flex gawk

Step 1.2 β€” Clone Vicharak kernel (use branch 6.1)

git clone https://github.com/vicharak-in/rockchip-linux-kernel -b 6.1 --recursive
cd rockchip-linux-kernel

This is the same repo and branch mentioned in the official Vicharak doc.

Step 1.3 β€” Initialize build script (optional but recommended)

git submodule update --init

Phase 2 β€” Patch IMX415 driver for 4K@60

Driver file:

drivers/media/i2c/imx415.c

Backup first:

cp drivers/media/i2c/imx415.c drivers/media/i2c/imx415.c.backup

Step 2.1 β€” What to add

Item Value
Resolution 3864 Γ— 2192
Format RAW10 (SGBRG10_1X10)
FPS 60 (10000/600000)
HDR OFF (NO_HDR)
MIPI 4 lanes
Lane rate 1782 Mbps/lane

Stock mode uses 891 Mbps/lane β†’ 30 fps.
4K@60 needs 1782 Mbps/lane register set from Sony datasheet / community patches.

Step 2.2 β€” Add 1782M register table

Add register sequence, for example:

static __maybe_unused const struct regval imx415_linear_10bit_3864x2192_1782M_regs[] = {
    /* 4-lane RAW10, 1782Mbps, 60fps - from reference patch */
    {0x3002, 0x00},
    {0x3008, 0x7F},
    {0x300A, 0x5B},
    {0x3031, 0x00},
    {0x3032, 0x00},
    /* ... full list from reference ... */
    {REG_NULL, 0x00},
};

Reference patch:

Step 2.3 β€” Update link frequency table (if needed)

#define MIPI_FREQ_1782M 1782000000

static const s64 link_freq_items[] = {
    MIPI_FREQ_297M,
    MIPI_FREQ_446M,
    MIPI_FREQ_743M,
    MIPI_FREQ_891M,
    MIPI_FREQ_1188M,
    MIPI_FREQ_1782M,   /* add if missing */
};

Step 2.4 β€” Add 4K@60 mode in supported_modes[]

{
    .bus_fmt = MEDIA_BUS_FMT_SGBRG10_1X10,
    .width = 3864,
    .height = 2192,
    .max_fps = {
        .numerator = 10000,
        .denominator = 600000,
    },
    .exp_def = 0x08ca - 0x08,
    .hts_def = 0x0226 * IMX415_4LANES * 4,
    .vts_def = 0x08ca,
    .global_reg_list = NULL,
    .reg_list = imx415_linear_10bit_3864x2192_1782M_regs,
    .hdr_mode = NO_HDR,
    .mipi_freq_idx = 5,          /* verify index matches 1782M entry */
    .bpp = 10,
    .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0,
    .xvclk = IMX415_XVCLK_FREQ_37M,
},

Important: mipi_freq_idx, hts_def, and vts_def must match the register table. Wrong values cause black screen or stuck at 30 fps.


Phase 3 β€” Build kernel (Vicharak official method)

Doc: Build Vicharak Kernel from source | Vicharak

Method A β€” Vicharak build script (recommended)

cd rockchip-linux-kernel
git submodule update --init

./vicharak/build.sh lunch
# Select: 3) rk3588_axon.mk

./vicharak/build.sh kernel

Success output files:

out/arch/arm64/boot/Image
out/arch/arm64/boot/dts/rockchip/rk3588-axon-linux.dtb
out/modules_rk3588_axon/lib/modules/

Method B β€” Manual build

cd rockchip-linux-kernel

export CROSS_COMPILE=aarch64-linux-gnu-

make O=out ARCH=arm64 rockchip_linux_defconfig

./scripts/kconfig/merge_config.sh -m out/.config arch/arm64/configs/rk3588_axon.config

make O=out ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)

Note: If building natively on Axon, you can skip CROSS_COMPILE.

Build modules (if needed):

make O=out ARCH=arm64 modules_install INSTALL_MOD_PATH=modules -j$(nproc)

Warning from Vicharak doc: If kernel source has local changes, version may become 6.1.75+ instead of 6.1.75. Always update both Image and matching modules together.


Phase 4 β€” Install built kernel on Axon board

Doc section: How to flash compiled Linux Kernel

Step 4.1 β€” Check current kernel on board

On Axon:

uname -r

Example: 6.1.75-axon

Step 4.2 β€” Backup current kernel on board

sudo mv /boot/Image-6.1.75-axon /boot/bak-Image-6.1.75-axon

Replace 6.1.75-axon with your uname -r output.

Step 4.3 β€” Copy built files to board

If built on host PC:

scp out/arch/arm64/boot/Image <user>@<device-ip>:~/
scp out/arch/arm64/boot/dts/rockchip/rk3588-axon-linux.dtb <user>@<device-ip>:~/
scp -r out/arch/arm64/boot/dts/rockchip/overlays <user>@<device-ip>:~/
scp out/modules_rk3588_axon.tar.gz <user>@<device-ip>:~/

If built directly on Axon, use paths under out/ locally.

Step 4.4 β€” Flash kernel on board

On Axon:

sudo cp ~/Image /boot/Image-$(uname -r)
sudo cp ~/rk3588-axon-linux.dtb /boot/rk3588-axon-linux-$(uname -r).dtb
sudo cp -r ~/overlays /boot/overlays-$(uname -r)/

Install modules (if packaged):

sudo tar -xvf modules_rk3588_axon.tar.gz -C /

Step 4.5 β€” Reboot

sudo reboot

Phase 5 β€” Validate 4K@60

Step 5.1 β€” Check frame intervals

v4l2-ctl -d /dev/v4l-subdev2 --list-subdev-frameintervals \
  pad=0,stream=0,width=3864,height=2192,code=0x300e

Success: 60.000 fps or 10000/600000

Step 5.2 β€” Check media graph

media-ctl -d /dev/media0 -p

Look for: 3864x2192@10000/600000

Step 5.3 β€” Check MIPI rate in dmesg

dmesg | grep -E "imx415|data_rate"

Success: data_rate_mbps 1782 (approx)

Step 5.4 β€” Measure fps

grep '' /sys/class/video4linux/video*/name | grep mainpath

v4l2-ctl -d /dev/video11 --set-fmt-video=width=3840,height=2160,pixelformat=NV12 \
  --stream-mmap=4 --stream-count=120 --stream-skip=30 --stream-poll

Success: 60.00 fps


Phase 6 β€” Test GStreamer / ffmpeg / MediaMTX

GStreamer

gst-launch-1.0 v4l2src device=/dev/video11 ! \
  video/x-raw,format=NV12,width=3840,height=2160,framerate=60/1 ! \
  fpsdisplaysink video-sink=autovideosink sync=false

ffmpeg

ffmpeg -f v4l2 -input_format nv12 -video_size 3840x2160 -framerate 60 \
  -i /dev/video11 -t 10 -y test_4k60.nv12

Then integrate with MediaMTX for streaming.


Troubleshooting

Problem Likely cause Fix
Still 30 fps Mode not selected Check supported_modes[] and default mode
Black screen Wrong regs / mipi index Match 1782M table + mipi_freq_idx
MIPI CRC errors Lane rate mismatch Fix link freq + DPHY timing
Sensor 60, ISP 30 Pipeline limit Check rkisp load / output node
Boot failure after flash Image/modules mismatch Flash Image + modules together, restore backup if needed

To restore backup kernel:

sudo cp /boot/bak-Image-6.1.75-axon /boot/Image-6.1.75-axon
sudo reboot

Reference links

Vicharak kernel build (official):
https://docs.vicharak.in/vicharak_sbcs/axon/axon-linux/linux-development-guide/linux-kernel/

Kernel source:

git clone https://github.com/vicharak-in/rockchip-linux-kernel -b 6.1 --recursive

4K@60 driver reference patch:

Rockchip Toybrick 4K@60 thread:

LubanCat RK3588 guide:
https://www.171host.com/762253.html


Quick checklist

[ ] Camera works at 4K@30 on Axon (4-lane overlay enabled)
[ ] Cloned kernel: git clone ... rockchip-linux-kernel -b 6.1 --recursive
[ ] Patched drivers/media/i2c/imx415.c (1782M regs + 60fps mode)
[ ] Built kernel using Vicharak build script or manual method
[ ] Backed up old kernel on board
[ ] Flashed new Image + dtb + modules
[ ] Rebooted and verified uname -r
[ ] v4l2 shows 60fps interval
[ ] video11 measures ~60.00 fps
[ ] GStreamer / ffmpeg / MediaMTX tested

Summary

Step Action
1 Confirm 4K@30 baseline
2 Clone Vicharak kernel 6.1 branch
3 Patch imx415.c for 4K@60
4 Build kernel (Vicharak script or manual)
5 Backup and flash Image + dtb + modules on Axon
6 Reboot and validate 60 fps
7 Test GStreamer / ffmpeg / MediaMTX

Bottom line: Use Vicharak kernel 6.1 repo, patch imx415.c, build and flash per official Vicharak kernel guide. Overlay alone cannot enable 4K@60.

Thanks for the guide i will try all of this and keep u updated on any issue i face
Please dont close this thread for now

1 Like

test.zip (8.0 KB)

please try this i have included a patch which needs to be installed on imx415.c please review and test.
also i think overlay i created is wrong so please check that as well.

Sure, I’ll apply and test the patch and also review the overlay. and update you.