From: David Heidelberg <[email protected]>

The Pixel 3 features two front-facing Sony IMX355 sensors with
different focal lengths (standard and wide-angle).

Both sensors are connected via CSIPHY1 and controlled over CCI I2C1,
using MCLK2 as the clock source. Describe the camera nodes and
associated resources in the device tree.

This enables support for the dual front camera configuration.

Signed-off-by: David Heidelberg <[email protected]>
---
 arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi | 193 ++++++++++++++++++++-
 1 file changed, 192 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 6930066857768..070023a9813ce 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm845-google-common.dtsi
@@ -6,6 +6,7 @@
 #include <dt-bindings/dma/qcom-gpi.h>
 #include <dt-bindings/input/linux-event-codes.h>
 #include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/media/video-interfaces.h>
 #include <dt-bindings/regulator/qcom,rpmh-regulator.h>
 
 #include "sdm845.dtsi"
@@ -132,6 +133,38 @@ vreg_s4a_1p8: regulator-vreg-s4a-1p8 {
                vin-supply = <&vph_pwr>;
        };
 
+       camera_front_avdd: front-cam-avdd-regulator {
+               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_pin>;
+               pinctrl-names = "default";
+
+               vin-supply = <&vreg_bob>;
+       };
+
+       camera_front_aux_avdd: front-cam-aux-avdd-regulator {
+               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_pin>;
+               pinctrl-names = "default";
+
+               vin-supply = <&vreg_bob>;
+       };
+
        wcn3990-pmu {
                compatible = "qcom,wcn3990-pmu";
 
@@ -214,6 +247,9 @@ vreg_s7a_1p025: smps7 {
                        regulator-max-microvolt = <1028000>;
                };
 
+               vdda_mipi_csi0_0p9:
+               vdda_mipi_csi1_0p9:
+               vdda_mipi_csi2_0p9:
                vdda_mipi_dsi0_pll:
                vreg_l1a_0p875: ldo1 {
                        regulator-min-microvolt = <880000>;
@@ -288,6 +324,13 @@ vreg_l21a_2p95: ldo21 {
                        regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
                };
 
+               vreg_l22a_3p3: ldo22 {
+                       regulator-min-microvolt = <2864000>;
+                       regulator-max-microvolt = <2864000>;
+
+                       regulator-boot-on;
+               };
+
                vreg_l24a_3p075: ldo24 {
                        regulator-min-microvolt = <3088000>;
                        regulator-max-microvolt = <3088000>;
@@ -319,6 +362,11 @@ vreg_l28a_3p0: ldo28 {
                         */
                        regulator-always-on;
                };
+
+               vreg_lvs1_1p8: lvs1 {
+                       regulator-min-microvolt = <1800000>;
+                       regulator-max-microvolt = <1800000>;
+               };
        };
 
        regulators-1 {
@@ -351,6 +399,53 @@ vreg_s3c_0p6: smps3 {
        };
 };
 
+&camss {
+       vdda-phy-supply = <&vreg_l1a_0p875>;
+       vdda-pll-supply = <&vreg_l26a_1p2>;
+
+       vdda-csi0-supply = <&vdda_mipi_csi0_0p9>;
+       vdda-csi1-supply = <&vdda_mipi_csi1_0p9>;
+       vdda-csi2-supply = <&vdda_mipi_csi2_0p9>;
+
+       /*
+        * MCLK2 (GPIO15) is shared between both front camera sensors.
+        * The clock is generated by CAMSS, therefore the pin is
+        * configured here rather than in individual sensor nodes.
+        */
+       pinctrl-0 = <&cam_mclk2_default>;
+       pinctrl-names = "default";
+
+       status = "okay";
+
+       ports {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               port@1 {
+                       reg = <1>;
+                       camss_endpoint1: endpoint {
+                               bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+                               data-lanes = <0 1 2 3>;
+                               remote-endpoint = <&cam_aux_front_endpoint>;
+                       };
+               };
+
+               port@2 {
+                       reg = <2>;
+                       camss_endpoint2: endpoint {
+                               bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+                               data-lanes = <0 1 2 3>;
+                               remote-endpoint = <&cam_front_endpoint>;
+                       };
+               };
+       };
+};
+
+&cci0_sleep {
+       /* bus has external pull-up, don't pull down */
+       bias-disable;
+};
+
 &cci {
        status = "okay";
 };
@@ -358,7 +453,71 @@ &cci {
 &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>;
+               /*
+                * The sensor can accept a 24 MHz clock, but 19.2 MHz has
+                * better driver compatibility.
+                */
+               assigned-clock-rates = <19200000>;
+
+               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_pin>;
+               pinctrl-names = "default";
+
+               rotation = <270>;
+               orientation = <0>;
+
+               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>;
+               /*
+                * The sensor can accept a 24 MHz clock, but 19.2 MHz has
+                * better driver compatibility.
+                */
+               assigned-clock-rates = <19200000>;
+
+               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_pin>;
+               pinctrl-names = "default";
+
+               rotation = <270>;
+               orientation = <0>;
+
+               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 */
 };
@@ -459,6 +618,38 @@ &tlmm {
        gpio-reserved-ranges = < 0 4>, /* SPI (Intel MNH Pixel Visual Core) */
                               <81 4>; /* SPI (most likely Fingerprint Cards 
FPC1075) */
 
+       cam_front_avdd_default_pin: cam-avdd-default-pins {
+               pins = "gpio8";
+               function = "gpio";
+
+               bias-disable;
+               drive-strength = <2>;
+       };
+
+       cam_front_aux_reset_default_pin: cam-front-aux-reset-default-pins {
+               pins = "gpio9";
+               function = "gpio";
+
+               bias-disable;
+               drive-strength = <2>;
+       };
+
+       cam_front_aux_avdd_default_pin: cam-avdd-aux-default-pins {
+               pins = "gpio14";
+               function = "gpio";
+
+               bias-disable;
+               drive-strength = <2>;
+       };
+
+       cam_front_reset_default_pin: cam-front-reset-default-pins {
+               pins = "gpio21";
+               function = "gpio";
+
+               bias-disable;
+               drive-strength = <2>;
+       };
+
        touchscreen_reset: ts-reset-state {
                pins = "gpio99";
                function = "gpio";

-- 
2.53.0



Reply via email to