From: Bryan O'Donoghue <bod@kernel.org>
To: Liviu Nicoara <lnicoara@thinkoid.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>
Cc: Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
Abel Vesa <abelvesa@kernel.org>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
Abel Vesa <abel.vesa@oss.qualcomm.com>
Subject: Re: [PATCH v3] arm64: dts: qcom: x1e80100-dell-xps13-9345: add the front camera
Date: Sat, 26 Sep 2026 15:38:13 +0100 [thread overview]
Message-ID: <6b039399-083f-41ba-b691-f3d5e715ff84@kernel.org> (raw)
In-Reply-To: <20260926122533.8200-1-lnicoara@thinkoid.org>
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>
prev parent reply other threads:[~2026-09-26 14:38 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <lVcrN5rxxI350G3UvKPxz-LATSmD1JKgO-AkmVL2XN3K_Hz2FCdk08a1btk7OPFln3a8gByLKKqg7vRtZlvUdg==@protonmail.internalid>
2026-09-26 12:25 ` Liviu Nicoara
2026-09-26 14:38 ` Bryan O'Donoghue [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6b039399-083f-41ba-b691-f3d5e715ff84@kernel.org \
--to=bod@kernel.org \
--cc=abel.vesa@oss.qualcomm.com \
--cc=abelvesa@kernel.org \
--cc=andersson@kernel.org \
--cc=bryan.odonoghue@linaro.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lnicoara@thinkoid.org \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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®