* [PATCH v3] arm64: dts: qcom: x1e80100-dell-xps13-9345: add the front camera
@ 2026-09-26 12:25 ` Liviu Nicoara
2026-09-26 14:38 ` Bryan O'Donoghue
0 siblings, 1 reply; 2+ messages in thread
From: Liviu Nicoara @ 2026-09-26 12:25 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio
Cc: Bryan O'Donoghue, Bryan O'Donoghue, Abel Vesa,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel, Abel Vesa
Describe the OV02C10 front camera on CCI1 bus 1 at 0x36, fed by MCLK4
at 19.2 MHz into CSIPHY4 over two D-PHY lanes at 400 MHz, the only
link frequency the ov02c10 driver offers.
The wiring comes from the Windows driver store. CAMF_RES_QRD.bin
switches a single rail, GPIO 91, before releasing reset on GPIO 237;
GPIOs 235 and 236 are muxed to aon_cci there, the CCI1 bus 1 pins, not
rail enables. No camera resource file votes a PMIC rail for the
sensor, so avdd and dvdd are left out and fall to dummy regulators.
The CSI PHY file votes LDO1_C at 1.2 V and LDO2_C at 0.88 V for the
PHYs, which is vdda-1p2 and vdda-0p9 here, as on the Inspiron 14 Plus.
MCLK drive strength is 2 mA, as CAMP_RES_QRD.bin programs GPIO 100,
and tested streaming.
The module sits upside down in the lid: with both sensor flips on, the
picture is upright and unmirrored, so rotation is 180.
The white camera indicator on GPIO 110 becomes the sensor's privacy LED,
so the V4L2 core lights it while the sensor streams and takes it away
from sysfs; the comment waiting for a "camera on" trigger goes, and
panic-indicator stays, as on the X13s.
Assisted-by: LLM
Signed-off-by: Liviu Nicoara <lnicoara@thinkoid.org>
---
v3: add the Signed-off-by missing from v2; no other change.
v2:
- Drop the dependency paragraph from the commit message (Abel).
- Say in the message that panic-indicator stays, as on the X13s.
No change to the DT.
v2: https://lore.kernel.org/all/20260926122032.4847-1-lnicoara@thinkoid.org/
v1: https://lore.kernel.org/all/20260925181024.20352-1-lnicoara@thinkoid.org/
Depends on the x1e80100 camera DT series, v7:
https://lore.kernel.org/all/20260917-x1e-camss-csi2-phy-dtsi-v7-0-1a63eb35838b@linaro.org/
and on the CAMSS PHY API series, v20 patches 5/6 and 6/6, which read the
CAMSS endpoint's data-lanes as 1-based:
https://lore.kernel.org/all/20260918-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v20-0-dc244e124e71@linaro.org/
Built and checked (dtbs_check, W=1) on next-20260925 with the DT series
applied. Run-tested on 7.2.6 with the same board hunks, the CSI2 PHY
driver v18, the PHY API series v20 and patches 1-4 of the DT series:
the sensor streams at 30 fps through libcamera's software ISP, and the
privacy LED lights while it streams and goes out after.
Bryan, happy for you to fold this into your next version of the DT
series if that is easier.
.../dts/qcom/x1e80100-dell-xps13-9345.dts | 120 +++++++++++++++++-
1 file changed, 118 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts b/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
index ad62350ba670..73f06fdcd138 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
+++ b/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
@@ -10,6 +10,8 @@
#include <dt-bindings/input/gpio-keys.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
+#include <dt-bindings/media/video-interfaces.h>
+#include <dt-bindings/media/video-interface-devices.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include "hamoa.dtsi"
@@ -46,14 +48,13 @@ leds {
pinctrl-names = "default";
pinctrl-0 = <&cam_indicator_en>;
- led-camera-indicator {
+ privacy_led: led-camera-indicator {
label = "white:camera-indicator";
function = LED_FUNCTION_INDICATOR;
color = <LED_COLOR_ID_WHITE>;
gpios = <&tlmm 110 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "none";
default-state = "off";
- /* Reuse as a panic indicator until we get a "camera on" trigger */
panic-indicator;
};
};
@@ -151,6 +152,25 @@ linux,cma {
};
};
+ /*
+ * The one rail Windows switches for the front camera
+ * (CAMF_RES_QRD.bin: TLMM 91 high before reset release), the 1.8 V
+ * LDO enable on the sibling thena boards.
+ */
+ vreg_cam_1p8: regulator-cam-1p8 {
+ compatible = "regulator-fixed";
+
+ regulator-name = "VREG_CAM_1P8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+
+ gpio = <&tlmm 91 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ pinctrl-0 = <&cam_ldo_en>;
+ pinctrl-names = "default";
+ };
+
vreg_edp_3p3: regulator-edp-3p3 {
compatible = "regulator-fixed";
@@ -674,6 +694,78 @@ vreg_l3j_0p8: ldo3 {
};
};
+&camss {
+ status = "okay";
+};
+
+&camss_csiphy4_in_port {
+ camss_csiphy4_inep: endpoint {
+ data-lanes = <1 2>;
+ remote-endpoint = <&csiphy4_out_ep>;
+ };
+};
+
+&cci1 {
+ status = "okay";
+};
+
+&cci1_i2c1 {
+ camera@36 {
+ compatible = "ovti,ov02c10";
+ reg = <0x36>;
+
+ reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&cam_rgb_default>;
+ pinctrl-names = "default";
+
+ clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
+ assigned-clock-rates = <19200000>;
+
+ orientation = <MEDIA_ORIENTATION_FRONT>;
+ /* upside down in the lid; both sensor flips give an upright, unmirrored image */
+ rotation = <180>;
+
+ leds = <&privacy_led>;
+ led-names = "privacy";
+
+ /*
+ * Windows switches no rail for avdd or dvdd, only GPIO 91; they
+ * are left to dummy regulators rather than invented.
+ */
+ dovdd-supply = <&vreg_cam_1p8>;
+
+ port {
+ ov02c10_ep: endpoint {
+ data-lanes = <1 2>;
+ link-frequencies = /bits/ 64 <400000000>;
+ remote-endpoint = <&csiphy4_in_ep>;
+ };
+ };
+ };
+};
+
+&csiphy4 {
+ vdda-0p9-supply = <&vreg_l2c_0p8>;
+ vdda-1p2-supply = <&vreg_l1c_1p2>;
+
+ status = "okay";
+};
+
+&csiphy4_in_port {
+ csiphy4_in_ep: endpoint {
+ bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+ data-lanes = <1 2>;
+ remote-endpoint = <&ov02c10_ep>;
+ };
+};
+
+&csiphy4_out_port {
+ csiphy4_out_ep: endpoint {
+ remote-endpoint = <&camss_csiphy4_inep>;
+ };
+};
+
&gpu {
status = "okay";
};
@@ -1102,6 +1194,30 @@ cam_indicator_en: cam-indicator-en-state {
bias-disable;
};
+ cam_ldo_en: cam-ldo-en-state {
+ pins = "gpio91";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+
+ cam_rgb_default: cam-rgb-default-state {
+ /* 2 mA streams; the sibling X1E boards use 16 */
+ mclk-pins {
+ pins = "gpio100";
+ function = "cam_aon";
+ drive-strength = <2>;
+ bias-disable;
+ };
+
+ reset-n-pins {
+ pins = "gpio237";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+
edp_bl_en: edp-bl-en-state {
pins = "gpio74";
function = "gpio";
base-commit: f5f84daefcd92d7a630066635ecea1433ed5eac7
prerequisite-patch-id: a7fbea14628b62a8de096dea420473b283010aba
prerequisite-patch-id: 270d82b4c1760f1ec0a64a1b56c68ce26e6ae3b1
prerequisite-patch-id: a12186bafac9b287c19fd719aeceb8ff1372dfbf
prerequisite-patch-id: 4bc923fa59ee4c1ff68e64497f11e937c0ab3918
prerequisite-patch-id: 4d000086386a3b344b1d6d345ab93d9b2b569615
prerequisite-patch-id: 8cde6fd860c857dd7f3efce25970c88c783193b3
prerequisite-patch-id: 1f22ff7fc93d0135e8759d45955bf998b037e11e
prerequisite-patch-id: edb32e32f2b6be0b93f66d8da460c9f9de0c52e2
prerequisite-patch-id: 09444936808e801a58c83356c9ae95415bacc83a
prerequisite-patch-id: 348caa9cd0d1d70f181a47b40e2d75e8b25b5938
prerequisite-patch-id: 1c4e4c457d8f95d8f5aaa2d93976c374b8282bf0
prerequisite-patch-id: deedbed2643ca8a0f26bd87175d787d2f0c87417
--
2.55.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH v3] arm64: dts: qcom: x1e80100-dell-xps13-9345: add the front camera
2026-09-26 12:25 ` [PATCH v3] arm64: dts: qcom: x1e80100-dell-xps13-9345: add the front camera Liviu Nicoara
@ 2026-09-26 14:38 ` Bryan O'Donoghue
0 siblings, 0 replies; 2+ messages in thread
From: Bryan O'Donoghue @ 2026-09-26 14:38 UTC (permalink / raw)
To: Liviu Nicoara, Bjorn Andersson, Konrad Dybcio
Cc: Bryan O'Donoghue, Abel Vesa, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, linux-arm-msm, devicetree,
linux-kernel, Abel Vesa
On 26/09/2026 13:25, Liviu Nicoara wrote:
> Describe the OV02C10 front camera on CCI1 bus 1 at 0x36, fed by MCLK4
> at 19.2 MHz into CSIPHY4 over two D-PHY lanes at 400 MHz, the only
> link frequency the ov02c10 driver offers.
>
> The wiring comes from the Windows driver store. CAMF_RES_QRD.bin
> switches a single rail, GPIO 91, before releasing reset on GPIO 237;
> GPIOs 235 and 236 are muxed to aon_cci there, the CCI1 bus 1 pins, not
> rail enables. No camera resource file votes a PMIC rail for the
> sensor, so avdd and dvdd are left out and fall to dummy regulators.
> The CSI PHY file votes LDO1_C at 1.2 V and LDO2_C at 0.88 V for the
> PHYs, which is vdda-1p2 and vdda-0p9 here, as on the Inspiron 14 Plus.
> MCLK drive strength is 2 mA, as CAMP_RES_QRD.bin programs GPIO 100,
> and tested streaming.
>
> The module sits upside down in the lid: with both sensor flips on, the
> picture is upright and unmirrored, so rotation is 180.
>
> The white camera indicator on GPIO 110 becomes the sensor's privacy LED,
> so the V4L2 core lights it while the sensor streams and takes it away
> from sysfs; the comment waiting for a "camera on" trigger goes, and
> panic-indicator stays, as on the X13s.
>
> Assisted-by: LLM
> Signed-off-by: Liviu Nicoara <lnicoara@thinkoid.org>
> ---
> v3: add the Signed-off-by missing from v2; no other change.
>
> v2:
> - Drop the dependency paragraph from the commit message (Abel).
> - Say in the message that panic-indicator stays, as on the X13s.
> No change to the DT.
>
> v2: https://lore.kernel.org/all/20260926122032.4847-1-lnicoara@thinkoid.org/
> v1: https://lore.kernel.org/all/20260925181024.20352-1-lnicoara@thinkoid.org/
>
> Depends on the x1e80100 camera DT series, v7:
> https://lore.kernel.org/all/20260917-x1e-camss-csi2-phy-dtsi-v7-0-1a63eb35838b@linaro.org/
> and on the CAMSS PHY API series, v20 patches 5/6 and 6/6, which read the
> CAMSS endpoint's data-lanes as 1-based:
> https://lore.kernel.org/all/20260918-b4-linux-next-25-03-13-dtsi-x1e80100-camss-v20-0-dc244e124e71@linaro.org/
>
> Built and checked (dtbs_check, W=1) on next-20260925 with the DT series
> applied. Run-tested on 7.2.6 with the same board hunks, the CSI2 PHY
> driver v18, the PHY API series v20 and patches 1-4 of the DT series:
> the sensor streams at 30 fps through libcamera's software ISP, and the
> privacy LED lights while it streams and goes out after.
>
> Bryan, happy for you to fold this into your next version of the DT
> series if that is easier.
>
> .../dts/qcom/x1e80100-dell-xps13-9345.dts | 120 +++++++++++++++++-
> 1 file changed, 118 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts b/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
> index ad62350ba670..73f06fdcd138 100644
> --- a/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
> +++ b/arch/arm64/boot/dts/qcom/x1e80100-dell-xps13-9345.dts
> @@ -10,6 +10,8 @@
> #include <dt-bindings/input/gpio-keys.h>
> #include <dt-bindings/input/input.h>
> #include <dt-bindings/leds/common.h>
> +#include <dt-bindings/media/video-interfaces.h>
> +#include <dt-bindings/media/video-interface-devices.h>
> #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
>
> #include "hamoa.dtsi"
> @@ -46,14 +48,13 @@ leds {
> pinctrl-names = "default";
> pinctrl-0 = <&cam_indicator_en>;
>
> - led-camera-indicator {
> + privacy_led: led-camera-indicator {
> label = "white:camera-indicator";
> function = LED_FUNCTION_INDICATOR;
> color = <LED_COLOR_ID_WHITE>;
> gpios = <&tlmm 110 GPIO_ACTIVE_HIGH>;
> linux,default-trigger = "none";
> default-state = "off";
> - /* Reuse as a panic indicator until we get a "camera on" trigger */
> panic-indicator;
> };
> };
> @@ -151,6 +152,25 @@ linux,cma {
> };
> };
>
> + /*
> + * The one rail Windows switches for the front camera
> + * (CAMF_RES_QRD.bin: TLMM 91 high before reset release), the 1.8 V
> + * LDO enable on the sibling thena boards.
> + */
> + vreg_cam_1p8: regulator-cam-1p8 {
> + compatible = "regulator-fixed";
> +
> + regulator-name = "VREG_CAM_1P8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> +
> + gpio = <&tlmm 91 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> +
> + pinctrl-0 = <&cam_ldo_en>;
> + pinctrl-names = "default";
> + };
> +
> vreg_edp_3p3: regulator-edp-3p3 {
> compatible = "regulator-fixed";
>
> @@ -674,6 +694,78 @@ vreg_l3j_0p8: ldo3 {
> };
> };
>
> +&camss {
> + status = "okay";
> +};
> +
> +&camss_csiphy4_in_port {
> + camss_csiphy4_inep: endpoint {
> + data-lanes = <1 2>;
> + remote-endpoint = <&csiphy4_out_ep>;
> + };
> +};
> +
> +&cci1 {
> + status = "okay";
> +};
> +
> +&cci1_i2c1 {
> + camera@36 {
> + compatible = "ovti,ov02c10";
> + reg = <0x36>;
> +
> + reset-gpios = <&tlmm 237 GPIO_ACTIVE_LOW>;
> + pinctrl-0 = <&cam_rgb_default>;
> + pinctrl-names = "default";
> +
> + clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clocks = <&camcc CAM_CC_MCLK4_CLK>;
> + assigned-clock-rates = <19200000>;
> +
> + orientation = <MEDIA_ORIENTATION_FRONT>;
> + /* upside down in the lid; both sensor flips give an upright, unmirrored image */
> + rotation = <180>;
> +
> + leds = <&privacy_led>;
> + led-names = "privacy";
> +
> + /*
> + * Windows switches no rail for avdd or dvdd, only GPIO 91; they
> + * are left to dummy regulators rather than invented.
> + */
> + dovdd-supply = <&vreg_cam_1p8>;
> +
> + port {
> + ov02c10_ep: endpoint {
> + data-lanes = <1 2>;
> + link-frequencies = /bits/ 64 <400000000>;
> + remote-endpoint = <&csiphy4_in_ep>;
> + };
> + };
> + };
> +};
> +
> +&csiphy4 {
> + vdda-0p9-supply = <&vreg_l2c_0p8>;
> + vdda-1p2-supply = <&vreg_l1c_1p2>;
> +
> + status = "okay";
> +};
> +
> +&csiphy4_in_port {
> + csiphy4_in_ep: endpoint {
> + bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
> + data-lanes = <1 2>;
> + remote-endpoint = <&ov02c10_ep>;
> + };
> +};
> +
> +&csiphy4_out_port {
> + csiphy4_out_ep: endpoint {
> + remote-endpoint = <&camss_csiphy4_inep>;
> + };
> +};
> +
> &gpu {
> status = "okay";
> };
> @@ -1102,6 +1194,30 @@ cam_indicator_en: cam-indicator-en-state {
> bias-disable;
> };
>
> + cam_ldo_en: cam-ldo-en-state {
> + pins = "gpio91";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + };
> +
> + cam_rgb_default: cam-rgb-default-state {
> + /* 2 mA streams; the sibling X1E boards use 16 */
> + mclk-pins {
> + pins = "gpio100";
> + function = "cam_aon";
> + drive-strength = <2>;
> + bias-disable;
> + };
> +
> + reset-n-pins {
> + pins = "gpio237";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + };
> + };
> +
> edp_bl_en: edp-bl-en-state {
> pins = "gpio74";
> function = "gpio";
>
> base-commit: f5f84daefcd92d7a630066635ecea1433ed5eac7
> prerequisite-patch-id: a7fbea14628b62a8de096dea420473b283010aba
> prerequisite-patch-id: 270d82b4c1760f1ec0a64a1b56c68ce26e6ae3b1
> prerequisite-patch-id: a12186bafac9b287c19fd719aeceb8ff1372dfbf
> prerequisite-patch-id: 4bc923fa59ee4c1ff68e64497f11e937c0ab3918
> prerequisite-patch-id: 4d000086386a3b344b1d6d345ab93d9b2b569615
> prerequisite-patch-id: 8cde6fd860c857dd7f3efce25970c88c783193b3
> prerequisite-patch-id: 1f22ff7fc93d0135e8759d45955bf998b037e11e
> prerequisite-patch-id: edb32e32f2b6be0b93f66d8da460c9f9de0c52e2
> prerequisite-patch-id: 09444936808e801a58c83356c9ae95415bacc83a
> prerequisite-patch-id: 348caa9cd0d1d70f181a47b40e2d75e8b25b5938
> prerequisite-patch-id: 1c4e4c457d8f95d8f5aaa2d93976c374b8282bf0
> prerequisite-patch-id: deedbed2643ca8a0f26bd87175d787d2f0c87417
> --
> 2.55.0
>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-09-26 14:38 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <lVcrN5rxxI350G3UvKPxz-LATSmD1JKgO-AkmVL2XN3K_Hz2FCdk08a1btk7OPFln3a8gByLKKqg7vRtZlvUdg==@protonmail.internalid>
2026-09-26 12:25 ` [PATCH v3] arm64: dts: qcom: x1e80100-dell-xps13-9345: add the front camera Liviu Nicoara
2026-09-26 14:38 ` Bryan O'Donoghue
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®