* [PATCH v3 0/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays
@ 2026-08-12 2:22 Hongyang Zhao
2026-08-12 2:22 ` [PATCH v3 1/2] arm64: dts: qcom: qcs6490-rubikpi3: Add 3.3 V output supply Hongyang Zhao
2026-08-12 2:22 ` [PATCH v3 2/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays Hongyang Zhao
0 siblings, 2 replies; 5+ messages in thread
From: Hongyang Zhao @ 2026-08-12 2:22 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Frank Li, Sascha Hauer, Pengutronix Kernel Team,
Fabio Estevam
Cc: Bryan O'Donoghue, Roger Shimizu, linux-arm-msm, devicetree,
linux-kernel, imx, linux-arm-kernel, Hongyang Zhao
RUBIK Pi 3 provides two camera connectors but ships without camera
modules, and each connector can be used with different sensors. Describe
only the board-level 3.3 V output rail in the base DTS and add optional,
per-connector overlays for Raspberry Pi Camera Module V2 IMX219 sensors.
CAM1 is connected to CCI1 and CSIPHY1, while CAM2 is connected to CCI0
and CSIPHY4. The overlays can be used independently or combined, and the
Makefile provides composed DTBs for both single-camera configurations and
the dual-IMX219 configuration.
Both single-camera configurations and the dual-camera configuration were
validated at 3280x2464. In the dual-camera configuration, both sensors
streamed concurrently and their privacy LEDs followed the streaming state.
Signed-off-by: Hongyang Zhao <hongyang.zhao@thundersoft.com>
---
Changes in v3:
- Drop regulator-boot-on from VCC3V3_OUTPUT because the boot firmware
does not enable the rail.
- Clarify that PWR_EN controls the camera module power domain, while the
baseboard has no dedicated per-camera regulator.
- Drop the fixed 3.3 V constraints from the module power-domain
regulators.
- Add Bryan's Reviewed-by tags.
- Rebase onto next-20260810.
- Link to v2: https://lore.kernel.org/r/20260723-rubikpi-next-20260615-v2-0-47c5add80114@thundersoft.com
Changes in v2:
- Keep the optional IMX219 sensors out of the base board DTS and add one
overlay per camera connector.
- Add composed DTBs for CAM1, CAM2, and dual-IMX219 configurations.
- Correct the power model: VCC3V3_OUTPUT is board-level, while each
PWR_EN controls the module-local sensor rails.
- Model the 24 MHz sensor input clock separately for each camera module.
- Describe CAMERA1_GPIO and CAMERA2_GPIO as privacy indicator LEDs and
associate each one with the corresponding sensor.
- Drop output-high and output-low from the GPIO pinctrl states.
- Rebase onto next-20260721.
- Link to v1: https://lore.kernel.org/r/20260616-rubikpi-next-20260615-v1-1-3d96b89397ff@thundersoft.com
---
Hongyang Zhao (2):
arm64: dts: qcom: qcs6490-rubikpi3: Add 3.3 V output supply
arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays
arch/arm64/boot/dts/qcom/Makefile | 15 +++
.../qcs6490-thundercomm-rubikpi3-cam1-imx219.dtso | 115 +++++++++++++++++++++
.../qcs6490-thundercomm-rubikpi3-cam2-imx219.dtso | 115 +++++++++++++++++++++
.../boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts | 23 +++++
4 files changed, 268 insertions(+)
---
base-commit: 3d08ff75a47a3e7e2ab45a3bcab6723b4d906422
change-id: 20260616-rubikpi-next-20260615-462417aa865a
Best regards,
--
Hongyang Zhao <hongyang.zhao@thundersoft.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 1/2] arm64: dts: qcom: qcs6490-rubikpi3: Add 3.3 V output supply
2026-08-12 2:22 [PATCH v3 0/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays Hongyang Zhao
@ 2026-08-12 2:22 ` Hongyang Zhao
2026-08-18 12:39 ` Konrad Dybcio
2026-08-12 2:22 ` [PATCH v3 2/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays Hongyang Zhao
1 sibling, 1 reply; 5+ messages in thread
From: Hongyang Zhao @ 2026-08-12 2:22 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Frank Li, Sascha Hauer, Pengutronix Kernel Team,
Fabio Estevam
Cc: Bryan O'Donoghue, Roger Shimizu, linux-arm-msm, devicetree,
linux-kernel, imx, linux-arm-kernel, Hongyang Zhao
Describe the GPIO-controlled VCC3V3_OUTPUT rail. This board-level rail
supplies the two camera connectors and the 40-pin expansion header.
Keep the rail enabled because expansion-header consumers are not
represented in the Device Tree.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Hongyang Zhao <hongyang.zhao@thundersoft.com>
---
.../boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts | 23 ++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts
index 13e8e62f6205..0f21777c480b 100644
--- a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts
+++ b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3.dts
@@ -214,6 +214,22 @@ vreg_usbhub_rest_1v8: regulator-usbhub-rest-1v8 {
regulator-boot-on;
};
+ vreg_vcc3v3_output: regulator-vcc3v3-output {
+ compatible = "regulator-fixed";
+
+ regulator-name = "vcc3v3_output";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+
+ gpio = <&tlmm 14 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ pinctrl-0 = <&vcc3v3_output_en>;
+ pinctrl-names = "default";
+
+ regulator-always-on;
+ };
+
vph_pwr: regulator-vph-pwr {
compatible = "regulator-fixed";
@@ -1251,6 +1267,13 @@ usb_eth_power: usb-eth-power-state {
bias-disable;
};
+ vcc3v3_output_en: vcc3v3-output-en-state {
+ pins = "gpio14";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
wifi_reset_active: wifi-reset-active-state {
pins = "gpio16";
function = "gpio";
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 2/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays
2026-08-12 2:22 [PATCH v3 0/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays Hongyang Zhao
2026-08-12 2:22 ` [PATCH v3 1/2] arm64: dts: qcom: qcs6490-rubikpi3: Add 3.3 V output supply Hongyang Zhao
@ 2026-08-12 2:22 ` Hongyang Zhao
2026-08-18 12:41 ` Konrad Dybcio
1 sibling, 1 reply; 5+ messages in thread
From: Hongyang Zhao @ 2026-08-12 2:22 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Frank Li, Sascha Hauer, Pengutronix Kernel Team,
Fabio Estevam
Cc: Bryan O'Donoghue, Roger Shimizu, linux-arm-msm, devicetree,
linux-kernel, imx, linux-arm-kernel, Hongyang Zhao
RUBIK Pi 3 ships without camera sensors, and its two connectors support
multiple modules. Keep module-specific nodes out of the base board DTS
and add per-connector overlays for Raspberry Pi Camera Module V2 IMX219
sensors.
CAM1 uses CCI1 and CSIPHY1, while CAM2 uses CCI0 and CSIPHY4. Each
overlay describes the 24 MHz sensor input clock and models the module
power domain controlled through the connector PWR_EN signal. The
baseboard supplies VCC3V3_OUTPUT separately and has no per-camera
regulator.
Describe each connector CAMERA_GPIO signal as a privacy indicator LED
and associate it with the corresponding sensor. This lets the V4L2 core
control the LED while the sensor is streaming.
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
Signed-off-by: Hongyang Zhao <hongyang.zhao@thundersoft.com>
---
arch/arm64/boot/dts/qcom/Makefile | 15 +++
.../qcs6490-thundercomm-rubikpi3-cam1-imx219.dtso | 115 +++++++++++++++++++++
.../qcs6490-thundercomm-rubikpi3-cam2-imx219.dtso | 115 +++++++++++++++++++++
3 files changed, 245 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 1c86e7e98f55..c4afe71436c4 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -186,6 +186,21 @@ dtb-$(CONFIG_ARCH_QCOM) += qcs6490-rb3gen2-industrial-mezzanine.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs6490-rb3gen2-vision-mezzanine.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs6490-thundercomm-minipc-g1iot.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs6490-thundercomm-rubikpi3.dtb
+
+qcs6490-thundercomm-rubikpi3-cam1-imx219-dtbs := \
+ qcs6490-thundercomm-rubikpi3.dtb \
+ qcs6490-thundercomm-rubikpi3-cam1-imx219.dtbo
+qcs6490-thundercomm-rubikpi3-cam2-imx219-dtbs := \
+ qcs6490-thundercomm-rubikpi3.dtb \
+ qcs6490-thundercomm-rubikpi3-cam2-imx219.dtbo
+qcs6490-thundercomm-rubikpi3-dual-imx219-dtbs := \
+ qcs6490-thundercomm-rubikpi3.dtb \
+ qcs6490-thundercomm-rubikpi3-cam1-imx219.dtbo \
+ qcs6490-thundercomm-rubikpi3-cam2-imx219.dtbo
+
+dtb-$(CONFIG_ARCH_QCOM) += qcs6490-thundercomm-rubikpi3-cam1-imx219.dtb
+dtb-$(CONFIG_ARCH_QCOM) += qcs6490-thundercomm-rubikpi3-cam2-imx219.dtb
+dtb-$(CONFIG_ARCH_QCOM) += qcs6490-thundercomm-rubikpi3-dual-imx219.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs6490-vicharak-axon-mini.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs8300-ride.dtb
diff --git a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3-cam1-imx219.dtso b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3-cam1-imx219.dtso
new file mode 100644
index 000000000000..b6d7a8235720
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3-cam1-imx219.dtso
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2026, Thundercomm All rights reserved.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+
+&{/} {
+ cam1_imx219_clk: clock-camera1-24m {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <24000000>;
+ };
+
+ leds-camera1 {
+ compatible = "gpio-leds";
+
+ pinctrl-0 = <&cam1_privacy_led_state>;
+ pinctrl-names = "default";
+
+ cam1_privacy_led: led-camera1 {
+ function = LED_FUNCTION_INDICATOR;
+ function-enumerator = <1>;
+ gpios = <&tlmm 18 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ };
+ };
+
+ /* Camera module power domain controlled through connector PWR_EN. */
+ vreg_cam1_pwr: regulator-camera1-pwr {
+ compatible = "regulator-fixed";
+
+ regulator-name = "vreg_camera1_pwr";
+
+ gpio = <&tlmm 57 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ pinctrl-0 = <&cam1_pwr_en>;
+ pinctrl-names = "default";
+
+ vin-supply = <&vreg_vcc3v3_output>;
+ };
+};
+
+&camss {
+ vdda-phy-supply = <&vreg_l10c_0p88>;
+ vdda-pll-supply = <&vreg_l6b_1p2>;
+
+ status = "okay";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@1 {
+ reg = <1>;
+
+ csiphy1_ep: endpoint {
+ data-lanes = <0 1>;
+ remote-endpoint = <&cam1_imx219_ep>;
+ };
+ };
+ };
+};
+
+&cci1 {
+ status = "okay";
+};
+
+&cci1_i2c0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ camera@10 {
+ compatible = "sony,imx219";
+ reg = <0x10>;
+
+ clocks = <&cam1_imx219_clk>;
+
+ VANA-supply = <&vreg_cam1_pwr>;
+ VDIG-supply = <&vreg_cam1_pwr>;
+ VDDL-supply = <&vreg_cam1_pwr>;
+
+ leds = <&cam1_privacy_led>;
+ led-names = "privacy";
+
+ port {
+ cam1_imx219_ep: endpoint {
+ data-lanes = <1 2>;
+ link-frequencies = /bits/ 64 <456000000>;
+ remote-endpoint = <&csiphy1_ep>;
+ };
+ };
+ };
+};
+
+&tlmm {
+ cam1_privacy_led_state: cam1-privacy-led-state {
+ pins = "gpio18";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ cam1_pwr_en: cam1-pwr-en-state {
+ pins = "gpio57";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-disable;
+ };
+};
diff --git a/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3-cam2-imx219.dtso b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3-cam2-imx219.dtso
new file mode 100644
index 000000000000..ff1ccf965df8
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/qcs6490-thundercomm-rubikpi3-cam2-imx219.dtso
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2026, Thundercomm All rights reserved.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+
+&{/} {
+ cam2_imx219_clk: clock-camera2-24m {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <24000000>;
+ };
+
+ leds-camera2 {
+ compatible = "gpio-leds";
+
+ pinctrl-0 = <&cam2_privacy_led_state>;
+ pinctrl-names = "default";
+
+ cam2_privacy_led: led-camera2 {
+ function = LED_FUNCTION_INDICATOR;
+ function-enumerator = <2>;
+ gpios = <&tlmm 19 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ };
+ };
+
+ /* Camera module power domain controlled through connector PWR_EN. */
+ vreg_cam2_pwr: regulator-camera2-pwr {
+ compatible = "regulator-fixed";
+
+ regulator-name = "vreg_camera2_pwr";
+
+ gpio = <&tlmm 58 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ pinctrl-0 = <&cam2_pwr_en>;
+ pinctrl-names = "default";
+
+ vin-supply = <&vreg_vcc3v3_output>;
+ };
+};
+
+&camss {
+ vdda-phy-supply = <&vreg_l10c_0p88>;
+ vdda-pll-supply = <&vreg_l6b_1p2>;
+
+ status = "okay";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@4 {
+ reg = <4>;
+
+ csiphy4_ep: endpoint {
+ data-lanes = <0 1>;
+ remote-endpoint = <&cam2_imx219_ep>;
+ };
+ };
+ };
+};
+
+&cci0 {
+ status = "okay";
+};
+
+&cci0_i2c0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ camera@10 {
+ compatible = "sony,imx219";
+ reg = <0x10>;
+
+ clocks = <&cam2_imx219_clk>;
+
+ VANA-supply = <&vreg_cam2_pwr>;
+ VDIG-supply = <&vreg_cam2_pwr>;
+ VDDL-supply = <&vreg_cam2_pwr>;
+
+ leds = <&cam2_privacy_led>;
+ led-names = "privacy";
+
+ port {
+ cam2_imx219_ep: endpoint {
+ data-lanes = <1 2>;
+ link-frequencies = /bits/ 64 <456000000>;
+ remote-endpoint = <&csiphy4_ep>;
+ };
+ };
+ };
+};
+
+&tlmm {
+ cam2_privacy_led_state: cam2-privacy-led-state {
+ pins = "gpio19";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-disable;
+ };
+
+ cam2_pwr_en: cam2-pwr-en-state {
+ pins = "gpio58";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-disable;
+ };
+};
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/2] arm64: dts: qcom: qcs6490-rubikpi3: Add 3.3 V output supply
2026-08-12 2:22 ` [PATCH v3 1/2] arm64: dts: qcom: qcs6490-rubikpi3: Add 3.3 V output supply Hongyang Zhao
@ 2026-08-18 12:39 ` Konrad Dybcio
0 siblings, 0 replies; 5+ messages in thread
From: Konrad Dybcio @ 2026-08-18 12:39 UTC (permalink / raw)
To: Hongyang Zhao, Bjorn Andersson, Konrad Dybcio, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Frank Li, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam
Cc: Bryan O'Donoghue, Roger Shimizu, linux-arm-msm, devicetree,
linux-kernel, imx, linux-arm-kernel
On 8/12/26 4:22 AM, Hongyang Zhao wrote:
> Describe the GPIO-controlled VCC3V3_OUTPUT rail. This board-level rail
> supplies the two camera connectors and the 40-pin expansion header.
>
> Keep the rail enabled because expansion-header consumers are not
> represented in the Device Tree.
>
> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> Signed-off-by: Hongyang Zhao <hongyang.zhao@thundersoft.com>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Konrad
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3 2/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays
2026-08-12 2:22 ` [PATCH v3 2/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays Hongyang Zhao
@ 2026-08-18 12:41 ` Konrad Dybcio
0 siblings, 0 replies; 5+ messages in thread
From: Konrad Dybcio @ 2026-08-18 12:41 UTC (permalink / raw)
To: Hongyang Zhao, Bjorn Andersson, Konrad Dybcio, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Frank Li, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam
Cc: Bryan O'Donoghue, Roger Shimizu, linux-arm-msm, devicetree,
linux-kernel, imx, linux-arm-kernel
On 8/12/26 4:22 AM, Hongyang Zhao wrote:
> RUBIK Pi 3 ships without camera sensors, and its two connectors support
> multiple modules. Keep module-specific nodes out of the base board DTS
> and add per-connector overlays for Raspberry Pi Camera Module V2 IMX219
> sensors.
>
> CAM1 uses CCI1 and CSIPHY1, while CAM2 uses CCI0 and CSIPHY4. Each
> overlay describes the 24 MHz sensor input clock and models the module
> power domain controlled through the connector PWR_EN signal. The
> baseboard supplies VCC3V3_OUTPUT separately and has no per-camera
> regulator.
>
> Describe each connector CAMERA_GPIO signal as a privacy indicator LED
> and associate it with the corresponding sensor. This lets the V4L2 core
> control the LED while the sensor is streaming.
>
> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> Signed-off-by: Hongyang Zhao <hongyang.zhao@thundersoft.com>
> ---
[...]
> + camera@10 {
> + compatible = "sony,imx219";
> + reg = <0x10>;
> +
> + clocks = <&cam1_imx219_clk>;
> +
> + VANA-supply = <&vreg_cam1_pwr>;
> + VDIG-supply = <&vreg_cam1_pwr>;
> + VDDL-supply = <&vreg_cam1_pwr>;
> +
> + leds = <&cam1_privacy_led>;
> + led-names = "privacy";
No reset GPIOs?
You should also have a reference to the mclk pin state to make sure
the correct pin function kicks in
Konrad
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-08-18 12:41 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-12 2:22 [PATCH v3 0/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays Hongyang Zhao
2026-08-12 2:22 ` [PATCH v3 1/2] arm64: dts: qcom: qcs6490-rubikpi3: Add 3.3 V output supply Hongyang Zhao
2026-08-18 12:39 ` Konrad Dybcio
2026-08-12 2:22 ` [PATCH v3 2/2] arm64: dts: qcom: qcs6490-rubikpi3: Add IMX219 camera overlays Hongyang Zhao
2026-08-18 12:41 ` Konrad Dybcio
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox