From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 726EC4B4033; Thu, 17 Sep 2026 09:46:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789638384; cv=none; b=SaFY5lyps5/dzOjrLr6yIaHkppQmItCozb0ldjJs6dkxqTCUEAjreihp7uHT/ik5oFCkk3e9F3Yyvbtc+NQ1ZICUd9JTUcHGMJZIhcg0HA5W80SV5rKqxRaEDW3p1/s25G/lskmNFZYZVFRNT1nY2LnooDhnkXll6wXdbSkELZc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789638384; c=relaxed/simple; bh=zFod11MciWEyWioDWv/SF9cUW0h2eOLJBr4tz3VH72o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mqJud4DhNWMhJrF+1gQAbJRPSp5B7tWTA0Ddu1+LDlaoRrssI6hpWC8H7XOrOkHWg0OC22baLwxkJEkYSikKWbWygjEIwiKXbc3Lm4rxNPWdsgEezz3c1sJjsawlm7WKKrPI5+p2rQzE5nCVy8wi7Vn6Fur5Yu7nvZ12HcfF75E= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bQQ6VIiI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="bQQ6VIiI" Received: by smtp.kernel.org (Postfix) with ESMTPS id 33B05C2BCB3; Thu, 17 Sep 2026 09:46:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1789638383; bh=zFod11MciWEyWioDWv/SF9cUW0h2eOLJBr4tz3VH72o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=bQQ6VIiIV7OqWioXeAbHCTSIz6LptoTlXaFuG2qit6cyqU0HCvSnnk1k1SYp98ZEz vDxeSfOeEx2f2w3F9Go3+Jc5oYtsbW2Z5EeGHARfF2Uio44tir+5QPF2Jb6JbxaNgH fiRhwfYen+LxRsvmI5av6lqCvVDwQmDo2/pjvAQLfcFV4mI2AllC2Ns4bV60wc4wiL VAXLuQQ2ZX+58O/eOnRZg8XXnwD8l9E79yR8Wm5wP8UHS910fkYVH+eNbFAgdVzIGe aej9HqRN7R1K5DYY8U+Y/vvH9fWxOpUhw5ZCYKiZco6yPNgfVDTVF0L/XugbOOb+kC pBhWvotkhcgyQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 11902C982D0; Thu, 17 Sep 2026 09:46:23 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Thu, 17 Sep 2026 11:46:20 +0200 Subject: [PATCH v10 1/2] arm64: dts: qcom: sdm845-google: Add dual front IMX355 cameras Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260917-pixel3-camera-v10-1-df631279b39d@ixit.cz> References: <20260917-pixel3-camera-v10-0-df631279b39d@ixit.cz> In-Reply-To: <20260917-pixel3-camera-v10-0-df631279b39d@ixit.cz> To: Bjorn Andersson , Konrad Dybcio , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Konrad Dybcio , Petr Hodina , Richard Acayan , linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=6989; i=david@ixit.cz; h=from:subject:message-id; bh=jGzk6kIhqrBSfmOX35wd7xGwnEvYmyg5GpJ/96Me5tY=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBqq7btjkSaBStYkqnc0fp4HE5cGI43vY3K5Jme6 uuzgq4M5ESJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaqu27QAKCRBgAj/E00kg ctvrD/9NQZ9r3koURz1nCx1A1Zpo9snZa7NRfol60Rx1VqUDIGJizKlh0u+uNO4dmdhMd6IVu3G KDoku7nsJfas5PIq3Bxo/SRNluQIjvvaYYhHDEiOXmvSU00GjV8MbNEXrBWmomE0yxdsT4KSHim +M5O5YQQ7PGDzWCzDKiu9WSBob5meBfUDa6j9SBcsPkHzXMaPy9xcxDqGSqk5D6T2oAmpPALJR0 Kfo/vk0UW99XVaYrsgd/6OzzaW/5fSsX0i8bzMp+LI89N4TKsPgt9bAVOkTIfnxqSzb3oCk+4kU hd24IMjBt6vcZTgbX1r6h1VAGBA7/7rv1DPcoiaHH21nYIzkwAKC0/zau6QfDEEeaYMPDmi1kDV ikwJr/YakG/PNxQVooOYAgB+JshG+MlAb9HTFVFC5mpELaYxLrh24/T3jtkIzKdeGyftEKc4Nic 1wxmpnkfk8+Cf3W0HUHEA7mWE09CJ6m1ZCVdqfUK34Ndt7YDySt6zfQv61+lMj6DHL+7sGmYyET Z7us1DMyR9jyKj0kGy27pCA9UpBtuwbWPnkjBB15kSJYSMwEzf/2wVMBb5BgRXEZ0MU0P6XsFua oT5lanc1QxaA8ABBVe/x9EBDB5N+3C1sgTHo0ZtOl081xV9z7Vk12oceq31sae9UoVC6kK4IXF7 oZKlxFR1mntDKFg== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg The Pixel 3 features two front-facing Sony IMX355 sensors with different focal lengths (standard and wide-angle). Sensors are connected via CSIPHY port 1 and 2 and controlled over CCI I2C1, using MCLK2 as the clock source. This enables support for the dual front camera configuration. Signed-off-by: David Heidelberg --- arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi | 171 ++++++++++++++++++++- 1 file changed, 170 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi index f1379857e2742..8b430776e8a54 100644 --- a/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi +++ b/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi @@ -1,16 +1,17 @@ // SPDX-License-Identifier: GPL-2.0-only /dts-v1/; #include #include #include #include +#include #include #include "sdm845.dtsi" #include "pm8998.dtsi" #include "pmi8998.dtsi" /delete-node/ &mpss_region; /delete-node/ &venus_mem; @@ -108,16 +109,48 @@ gpio-keys { key-vol-up { label = "Volume Up"; linux,code = ; gpios = <&pm8998_gpios 6 GPIO_ACTIVE_LOW>; debounce-interval = <15>; }; }; + camera_front_avdd: regulator-front-cam-avdd { + compatible = "regulator-fixed"; + regulator-name = "front_cam_avdd"; + + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + + gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&cam_front_avdd_default>; + pinctrl-names = "default"; + + vin-supply = <&vreg_bob>; + }; + + camera_front_aux_avdd: regulator-front-cam-aux-avdd { + compatible = "regulator-fixed"; + regulator-name = "front_cam_aux_avdd"; + + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + + gpios = <&tlmm 14 GPIO_ACTIVE_HIGH>; + enable-active-high; + + pinctrl-0 = <&cam_front_aux_avdd_default>; + pinctrl-names = "default"; + + vin-supply = <&vreg_bob>; + }; + vph_pwr: regulator-vph-pwr { compatible = "regulator-fixed"; regulator-name = "vph_pwr"; regulator-min-microvolt = <3700000>; regulator-max-microvolt = <3700000>; }; vreg_s4a_1p8: regulator-vreg-s4a-1p8 { @@ -314,16 +347,21 @@ vreg_l28a_3p0: ldo28 { regulator-initial-mode = ; regulator-boot-on; /* * We can't properly bring the panel back if it gets turned off * so keep it's regulators always on for now. */ regulator-always-on; }; + + vreg_lvs1_1p8: lvs1 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; }; regulators-1 { compatible = "qcom,pmi8998-rpmh-regulators"; qcom,pmic-id = "b"; vdd-bob-supply = <&vph_pwr>; @@ -346,24 +384,127 @@ regulators-2 { vreg_s3c_0p6: smps3 { regulator-min-microvolt = <600000>; regulator-max-microvolt = <600000>; }; }; }; +&camss { + vdda-phy-supply = <&vreg_l1a_0p875>; + vdda-pll-supply = <&vreg_l26a_1p2>; + + /* + * MCLK2 (GPIO15) is shared between both front camera sensors. + * The clock is generated by CAMCC, therefore the pin is + * configured here rather than in individual sensor nodes. + */ + pinctrl-0 = <&cam_mclk2_default>; + pinctrl-1 = <&cam_mclk2_sleep>; + pinctrl-names = "default", "sleep"; + + status = "okay"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@1 { + reg = <1>; + + camss_endpoint1: endpoint { + bus-type = ; + data-lanes = <0 1 2 3>; + remote-endpoint = <&cam_aux_front_endpoint>; + }; + }; + + port@2 { + reg = <2>; + + camss_endpoint2: endpoint { + bus-type = ; + data-lanes = <0 1 2 3>; + remote-endpoint = <&cam_front_endpoint>; + }; + }; + }; +}; + +&cci0_sleep { + /* bus has external pull-up */ + /delete-property/ bias-pull-down; + bias-disable; +}; + &cci { status = "okay"; }; &cci_i2c1 { /* actuator @0c */ - /* front camera, imx355 @1a */ + front_cam: camera@10 { + compatible = "sony,imx355"; + reg = <0x10>; + + clocks = <&clock_camcc CAM_CC_MCLK2_CLK>; + assigned-clocks = <&clock_camcc CAM_CC_MCLK2_CLK>; + assigned-clock-rates = <24000000>; + + reset-gpios = <&tlmm 21 GPIO_ACTIVE_LOW>; + + avdd-supply = <&camera_front_avdd>; + dvdd-supply = <&vreg_s3a_1p35>; + dovdd-supply = <&vreg_lvs1_1p8>; + + pinctrl-0 = <&cam_front_reset_default>; + pinctrl-names = "default"; + + rotation = <270>; + orientation = <0>; /* MEDIA_ORIENTATION_FRONT */ + + port { + cam_front_endpoint: endpoint { + data-lanes = <1 2 3 4>; + link-frequencies = /bits/ 64 <360000000>; + remote-endpoint = <&camss_endpoint2>; + }; + }; + }; + + front_aux_cam: camera@1a { + compatible = "sony,imx355"; + reg = <0x1a>; + + clocks = <&clock_camcc CAM_CC_MCLK2_CLK>; + assigned-clocks = <&clock_camcc CAM_CC_MCLK2_CLK>; + assigned-clock-rates = <24000000>; + + reset-gpios = <&tlmm 9 GPIO_ACTIVE_LOW>; + + avdd-supply = <&camera_front_aux_avdd>; + dvdd-supply = <&vreg_s3a_1p35>; + dovdd-supply = <&vreg_lvs1_1p8>; + + pinctrl-0 = <&cam_front_aux_reset_default>; + pinctrl-names = "default"; + + rotation = <270>; + orientation = <0>; /* MEDIA_ORIENTATION_FRONT */ + + port { + cam_aux_front_endpoint: endpoint { + data-lanes = <1 2 3 4>; + link-frequencies = /bits/ 64 <360000000>; + remote-endpoint = <&camss_endpoint1>; + }; + }; + }; /* eeprom @50, at24 driver says 8K */ }; &cdsp_pas { firmware-name = "qcom/sdm845/Google/blueline/cdsp.mbn"; status = "okay"; @@ -497,16 +638,44 @@ firmware-pins { pins = "gpio79"; function = "gpio"; drive-strength = <2>; bias-pull-down; }; }; + cam_front_avdd_default: cam-avdd-default-state { + pins = "gpio8"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + cam_front_aux_reset_default: cam-front-aux-reset-default-state { + pins = "gpio9"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + cam_front_aux_avdd_default: cam-avdd-aux-default-state { + pins = "gpio14"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + + cam_front_reset_default: cam-front-reset-default-state { + pins = "gpio21"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; + touchscreen_reset: ts-reset-state { pins = "gpio99"; function = "gpio"; drive-strength = <8>; bias-pull-up; }; touchscreen_pins: ts-pins-gpio-state { -- 2.55.0