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)
- Download in Axon.
- Give permission
sudo chmod +x ./run.sh sudo ./run.sh- 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.cat kernel.org β currently exposes 8 modes including all of the above. - Rockchip downstream BSP:
drivers/media/i2c/imx415.cinrk3588-linuxβ exposes the same mode table withmipi_freq_idxcorrectly 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 | 30 fps linear | n/a (this IS the 4K frame) | |
| 3864Γ2192 | 12 | 20 / 30 fps linear | n/a | |
| 3864Γ2192 (HDR) | 10 | hdr: 1) |
60 fps 2-DOL HDR | |
| 1932Γ1090 | 10 | 60 fps 2Γ2 binned | n/a (1080p) | |
| 1944Γ1097 | 12 | only at 30 fps | n/a | |
| 1920Γ1080 | 10 | 60 fps windowed | n/a (1080p) | |
| 1280Γ720 | 10 | 60+ fps windowed | n/a | |
| 1280Γ960, etc. | 10 | 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
- The part is detected as a genuine IMX415 on 4 lanes (
dmesg: Detected IMX415 image sensor+detect imx415 lane 4). - The Sony IMX415 datasheet supports 4K@60 (2-DOL HDR) and 1080p@60 (2Γ2 binning / windowed) β the silicon can do it.
- The driver exposes a 5-step
link_frequencymenu (up to 1188 MHz/lane = 4.752 Gbps total), which is enough MIPI bandwidth for both 1080p@60 and 4K@60 in HDR. - The driverβs own
pixel_ratecontrol (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. - 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
- Current Axon driver supports 4K@30 only β this needs a kernel driver change, not just an overlay.
- Mainline
imx415.cwill NOT help β use the Rockchip-style driver in Vicharak kernel. - 4-lane MIPI is mandatory β enable overlay:
Enable 8.3MP Camera (IMX415) on CSI0 4lane - 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
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.