// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
 */

/dts-v1/;

/* PM7250B is configured to use SID8/9 */
#define PM7250B_SID 8
#define PM7250B_SID1 9

#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include "sc7280.dtsi"
#include "pm7250b.dtsi"
#include "pm7325.dtsi"
#include "pm8350c.dtsi"
#include "pmk8350.dtsi"

/delete-node/ &ipa_fw_mem;
/delete-node/ &rmtfs_mem;
/delete-node/ &adsp_mem;
/delete-node/ &cdsp_mem;
/delete-node/ &video_mem;
/delete-node/ &wlan_ce_mem;
/delete-node/ &wpss_mem;
/delete-node/ &xbl_mem;

/ {
	model = "Qualcomm Technologies, Inc. Robotics RB3gen2";
	compatible = "qcom,qcs6490-rb3gen2", "qcom,qcm6490";
	chassis-type = "embedded";

	aliases {
		serial0 = &uart5;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	dp-connector {
		compatible = "dp-connector";
		label = "DP";
		type = "mini";

		hpd-gpios = <&tlmm 60 GPIO_ACTIVE_HIGH>;

		port {
			dp_connector_in: endpoint {
				remote-endpoint = <&mdss_edp_out>;
			};
		};
	};

	reserved-memory {
		xbl_mem: xbl@80700000 {
			reg = <0x0 0x80700000 0x0 0x100000>;
			no-map;
		};

		cdsp_secure_heap_mem: cdsp-secure-heap@81800000 {
			reg = <0x0 0x81800000 0x0 0x1e00000>;
			no-map;
		};

		camera_mem: camera@84300000 {
			reg = <0x0 0x84300000 0x0 0x500000>;
			no-map;
		};

		wpss_mem: wpss@84800000 {
			reg = <0x0 0x84800000 0x0 0x1900000>;
			no-map;
		};

		adsp_mem: adsp@86100000 {
			reg = <0x0 0x86100000 0x0 0x2800000>;
			no-map;
		};

		cdsp_mem: cdsp@88900000 {
			reg = <0x0 0x88900000 0x0 0x1e00000>;
			no-map;
		};

		video_mem: video@8a700000 {
			reg = <0x0 0x8a700000 0x0 0x700000>;
			no-map;
		};

		cvp_mem: cvp@8ae00000 {
			reg = <0x0 0x8ae00000 0x0 0x500000>;
			no-map;
		};

		ipa_fw_mem: ipa-fw@8b300000 {
			reg = <0x0 0x8b300000 0x0 0x10000>;
			no-map;
		};

		ipa_gsi_mem: ipa-gsi@8b310000 {
			reg = <0x0 0x8b310000 0x0 0xa000>;
			no-map;
		};

		gpu_microcode_mem: gpu-microcode@8b31a000 {
			reg = <0x0 0x8b31a000 0x0 0x2000>;
			no-map;
		};

		tz_stat_mem: tz-stat@c0000000 {
			reg = <0x0 0xc0000000 0x0 0x100000>;
			no-map;
		};

		tags_mem: tags@c0100000 {
			reg = <0x0 0xc0100000 0x0 0x1200000>;
			no-map;
		};

		qtee_mem: qtee@c1300000 {
			reg = <0x0 0xc1300000 0x0 0x500000>;
			no-map;
		};

		trusted_apps_mem: trusted-apps@c1800000 {
			reg = <0x0 0xc1800000 0x0 0x1c00000>;
			no-map;
		};

		debug_vm_mem: debug-vm@d0600000 {
			reg = <0x0 0xd0600000 0x0 0x100000>;
			no-map;
		};
	};

	pmic-glink {
		compatible = "qcom,qcm6490-pmic-glink", "qcom,pmic-glink";

		#address-cells = <1>;
		#size-cells = <0>;

		connector@0 {
			compatible = "usb-c-connector";
			reg = <0>;
			power-role = "dual";
			data-role = "dual";

			ports {
				#address-cells = <1>;
				#size-cells = <0>;

				port@0 {
					reg = <0>;

					pmic_glink_hs_in: endpoint {
						remote-endpoint = <&usb_1_dwc3_hs>;
					};
				};

				port@1 {
					reg = <1>;

					pmic_glink_ss_in: endpoint {
						remote-endpoint = <&redriver_usb_con_ss>;
					};
				};

				port@2 {
					reg = <2>;

					pmic_glink_sbu_in: endpoint {
						remote-endpoint = <&redriver_usb_con_sbu>;
					};
				};
			};
		};
	};

	vph_pwr: vph-pwr-regulator {
		compatible = "regulator-fixed";
		regulator-name = "vph_pwr";
		regulator-min-microvolt = <3700000>;
		regulator-max-microvolt = <3700000>;
	};
};

&apps_rsc {
	regulators-0 {
		compatible = "qcom,pm7325-rpmh-regulators";
		qcom,pmic-id = "b";

		vdd-s1-supply = <&vph_pwr>;
		vdd-s2-supply = <&vph_pwr>;
		vdd-s3-supply = <&vph_pwr>;
		vdd-s4-supply = <&vph_pwr>;
		vdd-s5-supply = <&vph_pwr>;
		vdd-s6-supply = <&vph_pwr>;
		vdd-s7-supply = <&vph_pwr>;
		vdd-s8-supply = <&vph_pwr>;
		vdd-l1-l4-l12-l15-supply = <&vreg_s7b_0p972>;
		vdd-l2-l7-supply = <&vreg_bob_3p296>;
		vdd-l3-supply = <&vreg_s2b_0p876>;
		vdd-l5-supply = <&vreg_s2b_0p876>;
		vdd-l6-l9-l10-supply = <&vreg_s8b_1p272>;
		vdd-l8-supply = <&vreg_s7b_0p972>;
		vdd-l11-l17-l18-l19-supply = <&vreg_s1b_1p872>;
		vdd-l13-supply = <&vreg_s7b_0p972>;
		vdd-l14-l16-supply = <&vreg_s8b_1p272>;

		vreg_s1b_1p872: smps1 {
			regulator-name = "vreg_s1b_1p872";
			regulator-min-microvolt = <1840000>;
			regulator-max-microvolt = <2040000>;
		};

		vreg_s2b_0p876: smps2 {
			regulator-name = "vreg_s2b_0p876";
			regulator-min-microvolt = <570070>;
			regulator-max-microvolt = <1050000>;
		};

		vreg_s7b_0p972: smps7 {
			regulator-name = "vreg_s7b_0p972";
			regulator-min-microvolt = <535000>;
			regulator-max-microvolt = <1120000>;
		};

		vreg_s8b_1p272: smps8 {
			regulator-name = "vreg_s8b_1p272";
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1500000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_RET>;
		};

		vreg_l1b_0p912: ldo1 {
			regulator-name = "vreg_l1b_0p912";
			regulator-min-microvolt = <825000>;
			regulator-max-microvolt = <925000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l2b_3p072: ldo2 {
			regulator-name = "vreg_l2b_3p072";
			regulator-min-microvolt = <2700000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l3b_0p504: ldo3 {
			regulator-name = "vreg_l3b_0p504";
			regulator-min-microvolt = <312000>;
			regulator-max-microvolt = <910000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l4b_0p752: ldo4 {
			regulator-name = "vreg_l4b_0p752";
			regulator-min-microvolt = <752000>;
			regulator-max-microvolt = <820000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		reg_l5b_0p752: ldo5 {
			regulator-name = "reg_l5b_0p752";
			regulator-min-microvolt = <552000>;
			regulator-max-microvolt = <832000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l6b_1p2: ldo6 {
			regulator-name = "vreg_l6b_1p2";
			regulator-min-microvolt = <1140000>;
			regulator-max-microvolt = <1260000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l7b_2p952: ldo7 {
			regulator-name = "vreg_l7b_2p952";
			regulator-min-microvolt = <2952000>;
			regulator-max-microvolt = <2952000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l8b_0p904: ldo8 {
			regulator-name = "vreg_l8b_0p904";
			regulator-min-microvolt = <870000>;
			regulator-max-microvolt = <970000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l9b_1p2: ldo9 {
			regulator-name = "vreg_l9b_1p2";
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
			regulator-allow-set-load;
			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
						   RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l11b_1p504: ldo11 {
			regulator-name = "vreg_l11b_1p504";
			regulator-min-microvolt = <1504000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l12b_0p751: ldo12 {
			regulator-name = "vreg_l12b_0p751";
			regulator-min-microvolt = <751000>;
			regulator-max-microvolt = <824000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l13b_0p53: ldo13 {
			regulator-name = "vreg_l13b_0p53";
			regulator-min-microvolt = <530000>;
			regulator-max-microvolt = <824000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l14b_1p08: ldo14 {
			regulator-name = "vreg_l14b_1p08";
			regulator-min-microvolt = <1080000>;
			regulator-max-microvolt = <1304000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l15b_0p765: ldo15 {
			regulator-name = "vreg_l15b_0p765";
			regulator-min-microvolt = <765000>;
			regulator-max-microvolt = <1020000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l16b_1p1: ldo16 {
			regulator-name = "vreg_l16b_1p1";
			regulator-min-microvolt = <1100000>;
			regulator-max-microvolt = <1300000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l17b_1p7: ldo17 {
			regulator-name = "vreg_l17b_1p7";
			regulator-min-microvolt = <1700000>;
			regulator-max-microvolt = <1900000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l18b_1p8: ldo18 {
			regulator-name = "vreg_l18b_1p8";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l19b_1p8: ldo19 {
			regulator-name = "vreg_l19b_1p8";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};
	};

	regulators-1 {
		compatible = "qcom,pm8350c-rpmh-regulators";
		qcom,pmic-id = "c";

		vdd-s1-supply = <&vph_pwr>;
		vdd-s2-supply = <&vph_pwr>;
		vdd-s3-supply = <&vph_pwr>;
		vdd-s4-supply = <&vph_pwr>;
		vdd-s5-supply = <&vph_pwr>;
		vdd-s6-supply = <&vph_pwr>;
		vdd-s7-supply = <&vph_pwr>;
		vdd-s8-supply = <&vph_pwr>;
		vdd-s9-supply = <&vph_pwr>;
		vdd-s10-supply = <&vph_pwr>;
		vdd-l1-l12-supply = <&vreg_s1b_1p872>;
		vdd-l2-l8-supply = <&vreg_s1b_1p872>;
		vdd-l3-l4-l5-l7-l13-supply = <&vreg_bob_3p296>;
		vdd-l6-l9-l11-supply = <&vreg_bob_3p296>;
		vdd-l10-supply = <&vreg_s7b_0p972>;
		vdd-bob-supply = <&vph_pwr>;

		vreg_s1c_2p19: smps1 {
			regulator-name = "vreg_s1c_2p19";
			regulator-min-microvolt = <2190000>;
			regulator-max-microvolt = <2210000>;
		};

		vreg_s2c_0p752: smps2 {
			regulator-name = "vreg_s2c_0p752";
			regulator-min-microvolt = <750000>;
			regulator-max-microvolt = <800000>;
		};

		vreg_s5c_0p752: smps5 {
			regulator-name = "vreg_s5c_0p752";
			regulator-min-microvolt = <465000>;
			regulator-max-microvolt = <1050000>;
		};

		vreg_s7c_0p752: smps7 {
			regulator-name = "vreg_s7c_0p752";
			regulator-min-microvolt = <465000>;
			regulator-max-microvolt = <800000>;
		};

		vreg_s9c_1p084: smps9 {
			regulator-name = "vreg_s9c_1p084";
			regulator-min-microvolt = <1010000>;
			regulator-max-microvolt = <1170000>;
		};

		vreg_l1c_1p8: ldo1 {
			regulator-name = "vreg_l1c_1p8";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1980000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l2c_1p62: ldo2 {
			regulator-name = "vreg_l2c_1p62";
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <1980000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l3c_2p8: ldo3 {
			regulator-name = "vreg_l3c_2p8";
			regulator-min-microvolt = <2800000>;
			regulator-max-microvolt = <3540000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l4c_1p62: ldo4 {
			regulator-name = "vreg_l4c_1p62";
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <3300000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l5c_1p62: ldo5 {
			regulator-name = "vreg_l5c_1p62";
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <3300000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l6c_2p96: ldo6 {
			regulator-name = "vreg_l6c_2p96";
			regulator-min-microvolt = <1650000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l7c_3p0: ldo7 {
			regulator-name = "vreg_l7c_3p0";
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l8c_1p62: ldo8 {
			regulator-name = "vreg_l8c_1p62";
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l9c_2p96: ldo9 {
			regulator-name = "vreg_l9c_2p96";
			regulator-min-microvolt = <2700000>;
			regulator-max-microvolt = <35440000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l10c_0p88: ldo10 {
			regulator-name = "vreg_l10c_0p88";
			regulator-min-microvolt = <720000>;
			regulator-max-microvolt = <1050000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l11c_2p8: ldo11 {
			regulator-name = "vreg_l11c_2p8";
			regulator-min-microvolt = <2800000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l12c_1p65: ldo12 {
			regulator-name = "vreg_l12c_1p65";
			regulator-min-microvolt = <1650000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l13c_2p7: ldo13 {
			regulator-name = "vreg_l13c_2p7";
			regulator-min-microvolt = <2700000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_bob_3p296: bob {
			regulator-name = "vreg_bob_3p296";
			regulator-min-microvolt = <3008000>;
			regulator-max-microvolt = <3960000>;
		};
	};
};

&gcc {
	protected-clocks = <GCC_CFG_NOC_LPASS_CLK>,
			   <GCC_MSS_CFG_AHB_CLK>,
			   <GCC_MSS_GPLL0_MAIN_DIV_CLK_SRC>,
			   <GCC_MSS_OFFLINE_AXI_CLK>,
			   <GCC_MSS_Q6SS_BOOT_CLK_SRC>,
			   <GCC_MSS_Q6_MEMNOC_AXI_CLK>,
			   <GCC_MSS_SNOC_AXI_CLK>,
			   <GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
			   <GCC_QSPI_CORE_CLK>,
			   <GCC_QSPI_CORE_CLK_SRC>,
			   <GCC_SEC_CTRL_CLK_SRC>,
			   <GCC_WPSS_AHB_BDG_MST_CLK>,
			   <GCC_WPSS_AHB_CLK>,
			   <GCC_WPSS_RSCP_CLK>;
};

&i2c1 {
	status = "okay";

	typec-mux@1c {
		compatible = "onnn,nb7vpq904m";
		reg = <0x1c>;

		vcc-supply = <&vreg_l18b_1p8>;

		retimer-switch;
		orientation-switch;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;

				redriver_usb_con_ss: endpoint {
					remote-endpoint = <&pmic_glink_ss_in>;
				};
			};

			port@1 {
				reg = <1>;

				redriver_phy_con_ss: endpoint {
					remote-endpoint = <&usb_dp_qmpphy_out>;
					data-lanes = <0 1 2 3>;
				};
			};

			port@2 {
				reg = <2>;

				redriver_usb_con_sbu: endpoint {
					remote-endpoint = <&pmic_glink_sbu_in>;
				};
			};
		};
	};
};

&mdss {
	status = "okay";
};

&mdss_dp {
	status = "okay";
};

&mdss_dp_out {
	data-lanes = <0 1>;
	remote-endpoint = <&usb_dp_qmpphy_dp_in>;
};

&mdss_edp {
	status = "okay";
};

&mdss_edp_out {
	data-lanes = <0 1 2 3>;
	link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;

	remote-endpoint = <&dp_connector_in>;
};

&mdss_edp_phy {
	status = "okay";
};

&qupv3_id_0 {
	status = "okay";
};

&remoteproc_adsp {
	firmware-name = "qcom/qcs6490/adsp.mbn";
	status = "okay";
};

&remoteproc_cdsp {
	firmware-name = "qcom/qcs6490/cdsp.mbn";
	status = "okay";
};

&remoteproc_mpss {
	firmware-name = "qcom/qcs6490/modem.mdt";
	status = "okay";
};

&remoteproc_wpss {
	firmware-name = "qcom/qcs6490/wpss.mbn";
	status = "okay";
};

&tlmm {
	gpio-reserved-ranges = <32 2>, /* ADSP */
			       <48 4>; /* NFC */
};

&uart5 {
	compatible = "qcom,geni-debug-uart";
	status = "okay";
};

&usb_1 {
	status = "okay";
};

&usb_1_dwc3 {
	dr_mode = "otg";
	usb-role-switch;
};

&usb_1_dwc3_hs {
	remote-endpoint = <&pmic_glink_hs_in>;
};

&usb_1_dwc3_ss {
	remote-endpoint = <&usb_dp_qmpphy_usb_ss_in>;
};

&usb_1_hsphy {
	vdda-pll-supply = <&vreg_l10c_0p88>;
	vdda33-supply = <&vreg_l2b_3p072>;
	vdda18-supply = <&vreg_l1c_1p8>;

	status = "okay";
};

&usb_1_qmpphy {
	vdda-phy-supply = <&vreg_l6b_1p2>;
	vdda-pll-supply = <&vreg_l1b_0p912>;

	orientation-switch;

	status = "okay";
};

&usb_dp_qmpphy_out {
	remote-endpoint = <&redriver_phy_con_ss>;
};

&usb_dp_qmpphy_usb_ss_in {
	remote-endpoint = <&usb_1_dwc3_ss>;
};

&usb_dp_qmpphy_dp_in {
	remote-endpoint = <&mdss_dp_out>;
};

&ufs_mem_hc {
	reset-gpios = <&tlmm 175 GPIO_ACTIVE_LOW>;
	vcc-supply = <&vreg_l7b_2p952>;
	vcc-max-microamp = <800000>;
	vccq-supply = <&vreg_l9b_1p2>;
	vccq-max-microamp = <900000>;
	vccq2-supply = <&vreg_l9b_1p2>;
	vccq2-max-microamp = <900000>;

	status = "okay";
};

&ufs_mem_phy {
	vdda-phy-supply = <&vreg_l10c_0p88>;
	vdda-pll-supply = <&vreg_l6b_1p2>;

	status = "okay";
};

&wifi {
	memory-region = <&wlan_fw_mem>;
};

/* PINCTRL - ADDITIONS TO NODES IN PARENT DEVICE TREE FILES */

&edp_hot_plug_det {
	function = "gpio";
	bias-disable;
};
