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 <clamor95@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
Svyatoslav Ryhel 2026-05-11 10:48:51 +03:00 committed by Thierry Reding
parent 4cc90d4c04
commit 8399055d9f
3 changed files with 214 additions and 14 deletions

View File

@ -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 {
/*

View File

@ -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 = <MEDIA_BUS_TYPE_CSI2_DPHY>;
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 {
/*

View File

@ -3,6 +3,7 @@
#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/mfd/max77620.h>
#include <dt-bindings/thermal/thermal.h>
@ -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 = <MEDIA_BUS_TYPE_CSI2_DPHY>;
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 = <MAX77620_FPS_SRC_NONE>;
};
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 = <MAX77620_FPS_SRC_NONE>;
};