[PATCH 1/2] arm64: dts: rockchip: enable OV9281 CAM0 P14 on RK3588 Jaguar
Quentin Schulz
foss+kernel at 0leil.net
Mon Nov 2 12:30:50 PST 2026
From: Quentin Schulz <quentin.schulz at cherry.de>
RK3588 Jaguar has two proprietary camera connectors, P14 and P15. This
adds support for the only camera module we currently have for this
connector, on P14.
The camera module has a 2-lane OV9281 camera sensor, an IMU, a
magnetometer and an EEPROM.
Signed-off-by: Quentin Schulz <quentin.schulz at cherry.de>
---
arch/arm64/boot/dts/rockchip/Makefile | 5 +
.../dts/rockchip/rk3588-jaguar-p14-ov9281.dtso | 113 +++++++++++++++++++++
arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts | 36 ++++++-
3 files changed, 153 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile
index 442d322a20cf7..cf977e883c374 100644
--- a/arch/arm64/boot/dts/rockchip/Makefile
+++ b/arch/arm64/boot/dts/rockchip/Makefile
@@ -204,6 +204,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-h96-max-v58.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar-can1-can2-uart4.dtbo
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar-ethernet-switch.dtbo
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar-p14-ov9281.dtbo
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar-pre-ict-tester.dtbo
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-lubancat-5io.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-mnt-reform2.dtb
@@ -336,6 +337,10 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar-can1-can2-uart4.dtb
rk3588-jaguar-can1-can2-uart4-dtbs := rk3588-jaguar.dtb \
rk3588-jaguar-can1-can2-uart4.dtbo
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar-p14-ov9281-p15-ov9281.dtb
+rk3588-jaguar-p14-ov9281-p15-ov9281-dtbs := rk3588-jaguar.dtb \
+ rk3588-jaguar-p14-ov9281.dtbo
+
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar-ethernet-switch.dtb
rk3588-jaguar-ethernet-switch-dtbs := rk3588-jaguar.dtb \
rk3588-jaguar-ethernet-switch.dtbo
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-jaguar-p14-ov9281.dtso b/arch/arm64/boot/dts/rockchip/rk3588-jaguar-p14-ov9281.dtso
new file mode 100644
index 0000000000000..155101c8497de
--- /dev/null
+++ b/arch/arm64/boot/dts/rockchip/rk3588-jaguar-p14-ov9281.dtso
@@ -0,0 +1,113 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2026 Cherry Embedded Solutions GmbH
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/clock/rockchip,rk3588-cru.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/media/video-interfaces.h>
+#include <dt-bindings/pinctrl/rockchip.h>
+
+&csi_dphy0 {
+ status = "okay";
+};
+
+&csi2 {
+ status = "okay";
+};
+
+&csi2_in {
+ csi2_input: endpoint {
+ bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+ data-lanes = <1 2>;
+ link-frequencies = /bits/ 64 <400000000>;
+ remote-endpoint = <&cam0_output>;
+ };
+};
+
+&i2c2 {
+ #address-cells = <1>;
+ clock-frequency = <400000>;
+ #size-cells = <0>;
+ status = "okay";
+
+ magnetometer at 1e {
+ compatible = "st,lis2mdl";
+ reg = <0x1e>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <RK_PC7 IRQ_TYPE_EDGE_RISING>;
+ pinctrl-0 = <&cam0_imu_int3>;
+ pinctrl-names = "default";
+ vdd-supply = <&vcc_2v8_imu>;
+ vddio-supply = <&vcc_1v8_s3>;
+ };
+
+ eeprom at 50 {
+ compatible = "st,24c64", "atmel,24c64";
+ reg = <0x50>;
+ pagesize = <32>;
+ vcc-supply = <&vcc_1v8_s3>;
+ };
+
+ camera at 60 {
+ compatible = "ovti,ov9281";
+ reg = <0x60>;
+ assigned-clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;
+ assigned-clock-rates = <24000000>;
+ avdd-supply = <&vcc_2v8_cam>;
+ clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;
+ dovdd-supply = <&vcc_1v8_s3>;
+ dvdd-supply = <&cam_vcc_1v2>;
+ pinctrl-0 = <&cam0_rst &mipim0_camera1_clk>;
+ pinctrl-names = "default";
+ reset-gpios = <&gpio0 RK_PB0 GPIO_ACTIVE_HIGH>;
+
+ port {
+ cam0_output: endpoint {
+ bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+ data-lanes = <1 2>;
+ link-frequencies = /bits/ 64 <400000000>;
+ remote-endpoint = <&csi2_input>;
+ };
+ };
+ };
+
+ imu at 6a {
+ compatible = "st,lsm6dsr";
+ reg = <0x6a>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <RK_PC0 IRQ_TYPE_EDGE_RISING>;
+ pinctrl-0 = <&csi0_imu_int1>;
+ pinctrl-names = "default";
+ vdd-supply = <&vcc_2v8_imu>;
+ vddio-supply = <&vcc_1v8_s3>;
+ };
+};
+
+&pinctrl {
+ cam0_p14 {
+ cam0_imu_int3: cam0-imu-int3 {
+ rockchip,pins = <1 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+
+ cam0_rst: cam0-reset {
+ rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+
+ csi0_imu_int1: csi0-imu-int1 {
+ rockchip,pins = <1 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+};
+
+&vicap {
+ status = "okay";
+};
+
+&vicap_mmu {
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts b/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts
index 0446834e84d5d..99baf89167d35 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588-jaguar.dts
@@ -40,6 +40,16 @@ aliases {
rtc0 = &rtc_twi;
};
+ cam_vcc_1v2: regulator-cam-vcc-1v2 {
+ compatible = "regulator-fixed";
+ regulator-name = "cam_vcc_1v2";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ vin-supply = <&vcc_1v2_s3>;
+ };
+
chosen {
stdout-path = "serial2:115200n8";
};
@@ -123,7 +133,26 @@ vcc_1v2_s3: regulator-vcc-1v2-s3 {
vin-supply = <&vcc5v0_sys>;
};
- /* Exposed on P14 and P15 */
+ vcc_2v8_cam: regulator-vcc-2v8-cam {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc_2v8_cam";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ vin-supply = <&vcc_2v8_s3>;
+ };
+
+ vcc_2v8_imu: regulator-vcc-2v8-imu {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc_2v8_imu";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ vin-supply = <&vcc_2v8_s3>;
+ };
+
vcc_2v8_s3: regulator-vcc-2v8-s3 {
compatible = "regulator-fixed";
regulator-name = "vcc_2v8_s3";
@@ -437,6 +466,11 @@ &i2c1 {
pinctrl-names = "default";
};
+&i2c2 {
+ pinctrl-0 = <&i2c2m3_xfer>;
+ pinctrl-names = "default";
+};
+
&i2c6 {
pinctrl-0 = <&i2c6m4_xfer>;
pinctrl-names = "default";
--
2.56.0
More information about the linux-arm-kernel
mailing list