[PATCH 0/2] arm64: dts: rockchip: enable OV9281 CAM0 and CAM1 on RK3588 Jaguar
Quentin Schulz
foss+kernel at 0leil.net
Mon Nov 2 12:30:49 PST 2026
RK3588 Jaguar has two proprietary camera connectors, P14 and P15. This
adds support for the only camera module we currently have for this
connector.
The camera module has a 2-lane OV9281 camera sensor, an IMU, a
magnetometer and an EEPROM.
We have new camera modules based on an OV13850 that should be coming up
soon, hence why I made the support into their own separate DTSO instead
of directly integrating them in the main DTS.
Known issues:
- lis2mdl driver currently doesn't support being instantiated twice, so
only one magnetometer will show up, if the two cameras modules are
connected,
- OV9281 test patterns (no upstream support) returns broken patterns,
see discussion on IRC
https://libera.catirclogs.org/linux-rockchip/2026-11-02, the image I
get without the test pattern *looks* okay to my non-expert eyes. In
any case, it's unlikely to be an issue in the Device Tree,
Image capture test:
#!/usr/bin/env bash
set -o pipefail
set -eux
CAM=$1
COLORFMT=$2
SIZE=$3
if [ "$COLORFMT" = "GREY" ] || [ "$COLORFMT" = "Y8" ]; then
MEDIACTLFMT="fmt:Y8_1X8/$SIZE field:none colorspace:raw xfer:none"
BITDEPTH=8
else
MEDIACTLFMT="fmt:Y10_1X10/$SIZE field:none colorspace:raw xfer:none"
BITDEPTH=10
fi
if [ "$CAM" = "P14" ]; then
MEDIACTL_SENSOR="ov9281 2-0060"
MEDIACTL_RKCIF="rkcif-mipi2"
MEDIACTL_CSIRX="dw-mipi-csi2rx fdd30000.csi"
else
MEDIACTL_SENSOR="ov9281 7-0060"
MEDIACTL_RKCIF="rkcif-mipi4"
MEDIACTL_CSIRX="dw-mipi-csi2rx fdd50000.csi"
fi
for dev in /sys/class/video4linux/video*/; do
if [ "$(cat "$dev/name")" != "$MEDIACTL_RKCIF-id0" ]; then
continue
fi
VIDEODEV=$(basename "$dev")
break
done
media-ctl -d 0 --set-v4l2 "'$MEDIACTL_SENSOR':0 [$MEDIACTLFMT]"
media-ctl -d 0 --set-v4l2 "'$MEDIACTL_RKCIF':0 [$MEDIACTLFMT]"
media-ctl -d 0 --set-v4l2 "'$MEDIACTL_CSIRX':0 [$MEDIACTLFMT]"
# Name the file a format YUView can recognize automatically
/root/yavta/build/yavta -f"$COLORFMT" -s$SIZE -c1 -n1 /dev/$VIDEODEV -Fframe-#_${SIZE}_${BITDEPTH}b_yuv400.yuv
With yavta[1] and checked with YUView[2] as gstreamer doesn't seem[3] to
have support for Y10.
Ran:
- ./test-cam.sh P14 Y8 1280x800
- ./test-cam.sh P15 Y8 1280x800
- ./test-cam.sh P14 Y10 1280x800
- ./test-cam.sh P15 Y10 1280x800
Pictures look decent to me.
Wrote random data to the EEPROMs and read it back identical.
Moved the cameras, accel and gyro raw sysfs values changed.
Magnetometers tested individually, with small magnet, raw values
changed.
I've not tested IIO buffers and/or the various interrupts.
[1] https://git.ideasonboard.com/camera/yavta
[2] https://github.com/IENT/YUView
[3] https://gitlab.freedesktop.org/gstreamer/gstreamer/-/work_items/3738
Light dependency on
https://lore.kernel.org/linux-media/20261102-v4l-y8-y10-csi-vicap-v2-0-0a4149d96dae@cherry.de/
for it to actually work (no impact on binding or device tree).
Signed-off-by: Quentin Schulz <quentin.schulz at cherry.de>
---
Quentin Schulz (2):
arm64: dts: rockchip: enable OV9281 CAM0 P14 on RK3588 Jaguar
arm64: dts: rockchip: enable OV9281 CAM1 P15 on RK3588 Jaguar
arch/arm64/boot/dts/rockchip/Makefile | 7 ++
.../dts/rockchip/rk3588-jaguar-p14-ov9281.dtso | 113 +++++++++++++++++++++
.../dts/rockchip/rk3588-jaguar-p15-ov9281.dtso | 112 ++++++++++++++++++++
arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts | 36 ++++++-
4 files changed, 267 insertions(+), 1 deletion(-)
---
base-commit: 233ebf31c98e1d7185d12d1ff332f3354f4950f5
change-id: 20261015-jaguar-cam0-cam1-dcc02f56766a
Best regards,
--
Quentin Schulz <quentin.schulz at cherry.de>
More information about the linux-arm-kernel
mailing list