Re: [PATCH v3] arm64: dts: qcom: x1e80100-dell-xps13-9345: add the front camera

From: Aleksandrs Vinarskis

Date: Sun Oct 11 2026 - 14:29:14 EST



On 9/26/26 14: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@xxxxxxxxxxxx>
> ---

Great to see a follow up!

The initial patch for camera from Laurentiu Tudor that Abel was referring to
was never submitted upstream, as it depends on CAMSS PHY and DT camera
series which are trying to find their way upstream for over a year now.

For reference, it can be found here:
https://gitlab.com/Linaro/arm64-laptops/linux/-/commit/d79e44083197b263ee59dc3521a2b16ad2a12bd8

Either way very nice to see someone following up to have it upstreamed.


> 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@xxxxxxxxxxxx/
> v1: https://lore.kernel.org/all/20260925181024.20352-1-lnicoara@xxxxxxxxxxxx/
>
> Depends on the x1e80100 camera DT series, v7:
> https://lore.kernel.org/all/20260917-x1e-camss-csi2-phy-dtsi-v7-0-1a63eb35838b@xxxxxxxxxx/
> 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@xxxxxxxxxx/
>
> 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.
> + */

Just an FYI: CAMF_RES_QRD.bin is an AeoB file. Some time ago I made a
repo to
keep a list of already de-compiled files for other developers to use,
might come
handy. Here is one for Dell XPS 13 9345' front camera:

https://github.com/alexVinarskis/qcom-aeob-dumps/blob/master/dell-xps-9345/CAMF_RES_QRD.json#L245-L257

IMO this comment can be dropped.

> + 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>;

Windows may only be switching one rail, however there in fact a 2v8 rail
provided by LDO 7B.
You can find it in:
* Tudor's patch linked above
* Device's schematics

I would recommend to add it.

Regards,
Alex

> +
> + 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