From 8399055d9f98e94c33608fe9d61afc09a43cc4df Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Mon, 11 May 2026 10:48:51 +0300 Subject: [PATCH] ARM: tegra: lg-x3: Complete video device graph Add front and rear camera nodes and interlink them with Tegra CSI and VI. Adjust camera PMIC voltages to better fit requirements and fix the focuser node. Signed-off-by: Svyatoslav Ryhel Signed-off-by: Thierry Reding --- arch/arm/boot/dts/nvidia/tegra30-lg-p880.dts | 28 ++++ arch/arm/boot/dts/nvidia/tegra30-lg-p895.dts | 46 ++++++ arch/arm/boot/dts/nvidia/tegra30-lg-x3.dtsi | 154 +++++++++++++++++-- 3 files changed, 214 insertions(+), 14 deletions(-) diff --git a/arch/arm/boot/dts/nvidia/tegra30-lg-p880.dts b/arch/arm/boot/dts/nvidia/tegra30-lg-p880.dts index cc14e6dca770..1b21d7628c8c 100644 --- a/arch/arm/boot/dts/nvidia/tegra30-lg-p880.dts +++ b/arch/arm/boot/dts/nvidia/tegra30-lg-p880.dts @@ -12,6 +12,18 @@ aliases { mmc2 = &sdmmc1; /* WiFi */ }; + host1x@50000000 { + vi@54080000 { + csi@800 { + /delete-node/ channel@1; + }; + + ports { + /delete-node/ port@1; + }; + }; + }; + pinmux@70000868 { pinctrl-names = "default"; pinctrl-0 = <&state_default>; @@ -116,6 +128,22 @@ rmi4-f11@11 { }; }; + i2c@7000c500 { + camera-pmic@7d { + vt_1v2_front: ldo1 { + regulator-name = "vt_1v2_dig"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + + vt_2v7_front: ldo2 { + regulator-name = "vt_2v7_vana"; + regulator-min-microvolt = <2700000>; + regulator-max-microvolt = <2700000>; + }; + }; + }; + spi@7000dc00 { dsi@2 { /* diff --git a/arch/arm/boot/dts/nvidia/tegra30-lg-p895.dts b/arch/arm/boot/dts/nvidia/tegra30-lg-p895.dts index 414117fd4382..896639599c12 100644 --- a/arch/arm/boot/dts/nvidia/tegra30-lg-p895.dts +++ b/arch/arm/boot/dts/nvidia/tegra30-lg-p895.dts @@ -118,6 +118,52 @@ rmi4-f1a@1a { }; }; + i2c@7000c500 { + /* Aptina 1/6" HD SOC (MT9M114) */ + front-camera@48 { + compatible = "onnn,mt9m114"; + reg = <0x48>; + + clocks = <&tegra_car TEGRA30_CLK_CSUS>; + + reset-gpios = <&gpio TEGRA_GPIO(BB, 5) GPIO_ACTIVE_LOW>; + + vddio-supply = <&vio_1v8_front>; + vdd-supply = <&vt_1v8_front>; + vaa-supply = <&vt_2v8_front>; + + orientation = <0>; /* Front camera */ + + assigned-clocks = <&tegra_car TEGRA30_CLK_VI_SENSOR>, + <&tegra_car TEGRA30_CLK_CSUS>; + assigned-clock-rates = <24000000>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_PLL_P>, + <&tegra_car TEGRA30_CLK_VI_SENSOR>; + + port { + front_camera_output: endpoint { + bus-type = ; + link-frequencies = /bits/ 64 <384000000>; + remote-endpoint = <&csib_input>; + }; + }; + }; + + camera-pmic@7d { + vt_1v8_front: ldo1 { + regulator-name = "vt_1v8_dig"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + vt_2v8_front: ldo2 { + regulator-name = "vt_2v8_vana"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + }; + }; + spi@7000dc00 { dsi@2 { /* diff --git a/arch/arm/boot/dts/nvidia/tegra30-lg-x3.dtsi b/arch/arm/boot/dts/nvidia/tegra30-lg-x3.dtsi index 768e201456d8..d2a5904cebed 100644 --- a/arch/arm/boot/dts/nvidia/tegra30-lg-x3.dtsi +++ b/arch/arm/boot/dts/nvidia/tegra30-lg-x3.dtsi @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -74,6 +75,91 @@ trustzone@bfe00000 { }; host1x@50000000 { + vi@54080000 { + status = "okay"; + + csi@800 { + status = "okay"; + + avdd-dsi-csi-supply = <&avdd_dsi_csi>; + + /* CSI-A */ + channel@0 { + reg = <0>; + + nvidia,mipi-calibrate = <&csi 0>; /* CSIA pad */ + + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + csia_input: endpoint { + data-lanes = <1 2>; + remote-endpoint = <&rear_camera_output>; + }; + }; + + port@1 { + reg = <1>; + + csia_output: endpoint { + remote-endpoint = <&vi_ppa_input>; + }; + }; + }; + + /* CSI-B */ + channel@1 { + reg = <1>; + + nvidia,mipi-calibrate = <&csi 1>; /* CSIB pad */ + + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + csib_input: endpoint { + data-lanes = <3>; + remote-endpoint = <&front_camera_output>; + }; + }; + + port@1 { + reg = <1>; + + csib_output: endpoint { + remote-endpoint = <&vi_ppb_input>; + }; + }; + }; + }; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + vi_ppa_input: endpoint { + remote-endpoint = <&csia_output>; + }; + }; + + port@1 { + reg = <1>; + + vi_ppb_input: endpoint { + remote-endpoint = <&csib_output>; + }; + }; + }; + }; + lcd: dc@54200000 { rgb { status = "okay"; @@ -1112,29 +1198,68 @@ dw9714: coil@c { compatible = "dongwoon,dw9714"; reg = <0x0c>; - enable-gpios = <&gpio TEGRA_GPIO(R, 1) GPIO_ACTIVE_HIGH>; + powerdown-gpios = <&gpio TEGRA_GPIO(R, 1) GPIO_ACTIVE_LOW>; vcc-supply = <&vcc_focuser>; }; + /* SONY IMX111 1/4" BSI */ + rear-camera@10 { + compatible = "sony,imx111"; + reg = <0x10>; + + clocks = <&tegra_car TEGRA30_CLK_CSUS>; + + reset-gpios = <&gpio TEGRA_GPIO(K, 4) GPIO_ACTIVE_LOW>; + + iovdd-supply = <&vio_1v8_rear>; + dvdd-supply = <&vdd_1v2_rear>; + avdd-supply = <&vdd_2v7_rear>; + + orientation = <1>; /* Rear camera */ + rotation = <90>; + + nvmem = <&m24c08>; + lens-focus = <&dw9714>; + + assigned-clocks = <&tegra_car TEGRA30_CLK_VI_SENSOR>, + <&tegra_car TEGRA30_CLK_CSUS>; + assigned-clock-rates = <24000000>; + assigned-clock-parents = <&tegra_car TEGRA30_CLK_PLL_P>, + <&tegra_car TEGRA30_CLK_VI_SENSOR>; + + port { + rear_camera_output: endpoint { + data-lanes = <1 2>; + bus-type = ; + link-frequencies = /bits/ 64 <542400000>; + remote-endpoint = <&csia_input>; + }; + }; + }; + + /* rear camera sensor eeprom m24c08 from ST */ + m24c08: eeprom@50 { + compatible = "atmel,24c08"; + reg = <0x50>; + + /* if high then WP is on, if low then off */ + wp-gpios = <&gpio TEGRA_GPIO(K, 3) GPIO_ACTIVE_HIGH>; + + /* it is not OTP but writing is unwanted */ + read-only; + pagesize = <16>; + num-addresses = <1>; + + vcc-supply = <&vio_1v8_rear>; + }; + camera-pmic@7d { compatible = "ti,lp8720"; reg = <0x7d>; enable-gpios = <&gpio TEGRA_GPIO(BB, 4) GPIO_ACTIVE_HIGH>; - vt_1v2_front: ldo1 { - regulator-name = "vt_1v2_dig"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <1200000>; - }; - - vt_2v7_front: ldo2 { - regulator-name = "vt_2v7_vana"; - regulator-min-microvolt = <2700000>; - regulator-max-microvolt = <2700000>; - }; - vdd_2v7_rear: ldo3 { regulator-name = "8m_2v7_vana"; regulator-min-microvolt = <2700000>; @@ -1348,10 +1473,11 @@ vdd_1v2_mhl: ldo7 { maxim,active-fps-source = ; }; - ldo8 { + avdd_dsi_csi: ldo8 { regulator-name = "avdd_dsi_csi"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; + regulator-boot-on; maxim,active-fps-source = ; };