// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
 * Copyright (c) 2022, Linaro Limited
 */

/dts-v1/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>

#include "sa8540p.dtsi"
#include "sa8540p-pmics.dtsi"

/ {
	model = "Qualcomm SA8540P Ride";
	compatible = "qcom,sa8540p-ride", "qcom,sa8540p";

	aliases {
		i2c0 = &i2c0;
		i2c1 = &i2c1;
		i2c12 = &i2c12;
		i2c15 = &i2c15;
		i2c18 = &i2c18;
		serial0 = &uart17;
	};

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

&apps_rsc {
	regulators-0 {
		compatible = "qcom,pm8150-rpmh-regulators";
		qcom,pmic-id = "a";

		vreg_l3a: ldo3 {
			regulator-name = "vreg_l3a";
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1208000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l5a: ldo5 {
			regulator-name = "vreg_l5a";
			regulator-min-microvolt = <912000>;
			regulator-max-microvolt = <912000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

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

		vreg_l11a: ldo11 {
			regulator-name = "vreg_l11a";
			regulator-min-microvolt = <880000>;
			regulator-max-microvolt = <880000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l13a: ldo13 {
			regulator-name = "vreg_l13a";
			regulator-min-microvolt = <3072000>;
			regulator-max-microvolt = <3072000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};
	};

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

		vreg_l1c: ldo1 {
			regulator-name = "vreg_l1c";
			regulator-min-microvolt = <912000>;
			regulator-max-microvolt = <912000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l2c: ldo2 {
			regulator-name = "vreg_l2c";
			regulator-min-microvolt = <3072000>;
			regulator-max-microvolt = <3072000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l4c: ldo4 {
			regulator-name = "vreg_l4c";
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1208000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

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

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

		vreg_l17c: ldo17 {
			regulator-name = "vreg_l17c";
			regulator-min-microvolt = <2504000>;
			regulator-max-microvolt = <2504000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
			regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM
						   RPMH_REGULATOR_MODE_HPM>;
			regulator-allow-set-load;
		};
	};

	regulators-2 {
		compatible = "qcom,pm8150-rpmh-regulators";
		qcom,pmic-id = "g";

		vreg_l3g: ldo3 {
			regulator-name = "vreg_l3g";
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

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

		vreg_l8g: ldo8 {
			regulator-name = "vreg_l8g";
			regulator-min-microvolt = <880000>;
			regulator-max-microvolt = <880000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};
	};
};

&i2c0 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c0_default>;

	status = "okay";
};

&i2c1 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c1_default>;

	status = "okay";
};

&i2c12 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c12_default>;

	status = "okay";
};

&i2c15 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c15_default>;

	status = "okay";
};

&i2c18 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c18_default>;

	status = "okay";
};

&pcie2a {
	ranges = <0x01000000 0x0 0x3c200000 0x0 0x3c200000 0x0 0x100000>,
		 <0x02000000 0x0 0x3c300000 0x0 0x3c300000 0x0 0x1d00000>,
		 <0x03000000 0x5 0x00000000 0x5 0x00000000 0x1 0x00000000>;

	perst-gpios = <&tlmm 143 GPIO_ACTIVE_LOW>;
	wake-gpios = <&tlmm 145 GPIO_ACTIVE_HIGH>;

	pinctrl-names = "default";
	pinctrl-0 = <&pcie2a_default>;

	status = "okay";
};

&pcie2a_phy {
	vdda-phy-supply = <&vreg_l11a>;
	vdda-pll-supply = <&vreg_l3a>;

	status = "okay";
};

&pcie3a {
	ranges = <0x01000000 0x0 0x40200000 0x0 0x40200000 0x0 0x100000>,
		 <0x02000000 0x0 0x40300000 0x0 0x40300000 0x0 0x20000000>,
		 <0x03000000 0x6 0x00000000 0x6 0x00000000 0x2 0x00000000>;

	perst-gpios = <&tlmm 151 GPIO_ACTIVE_LOW>;
	wake-gpios = <&tlmm 56 GPIO_ACTIVE_HIGH>;

	pinctrl-names = "default";
	pinctrl-0 = <&pcie3a_default>;

	status = "okay";
};

&pcie3a_phy {
	vdda-phy-supply = <&vreg_l11a>;
	vdda-pll-supply = <&vreg_l3a>;

	status = "okay";
};

&qup0 {
	status = "okay";
};

&qup1 {
	status = "okay";
};

&qup2 {
	status = "okay";
};

&remoteproc_nsp0 {
	firmware-name = "qcom/sa8540p/cdsp0.mbn";
	status = "okay";
};

&remoteproc_nsp1 {
	firmware-name = "qcom/sa8540p/cdsp1.mbn";
	status = "okay";
};

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

&ufs_mem_hc {
	reset-gpios = <&tlmm 228 GPIO_ACTIVE_LOW>;

	vcc-supply = <&vreg_l17c>;
	vccq-supply = <&vreg_l6c>;

	status = "okay";
};

&ufs_mem_phy {
	vdda-phy-supply = <&vreg_l8g>;
	vdda-pll-supply = <&vreg_l3g>;

	status = "okay";
};

&usb_0 {
	status = "okay";
};

&usb_0_dwc3 {
	dr_mode = "peripheral";
};

&usb_0_hsphy {
	vdda-pll-supply = <&vreg_l5a>;
	vdda18-supply = <&vreg_l7a>;
	vdda33-supply = <&vreg_l13a>;

	status = "okay";
};

&usb_0_qmpphy {
	vdda-phy-supply = <&vreg_l3a>;
	vdda-pll-supply = <&vreg_l5a>;

	status = "okay";
};

&usb_2_hsphy0 {
	vdda-pll-supply = <&vreg_l5a>;
	vdda18-supply = <&vreg_l7g>;
	vdda33-supply = <&vreg_l13a>;

	status = "okay";
};

&usb_2_qmpphy0 {
	vdda-phy-supply = <&vreg_l3a>;
	vdda-pll-supply = <&vreg_l5a>;

	status = "okay";
};

&xo_board_clk {
	clock-frequency = <38400000>;
};

/* PINCTRL */

&tlmm {
	i2c0_default: i2c0-default-state {
		/* To USB7002T-I/KDXVA0 USB hub (SIP1 only) */
		pins = "gpio135", "gpio136";
		function = "qup0";
		drive-strength = <2>;
		bias-pull-up;
	};

	i2c1_default: i2c1-default-state {
		/* To PM40028B-F3EI PCIe switch */
		pins = "gpio158", "gpio159";
		function = "qup1";
		drive-strength = <2>;
		bias-pull-up;
	};

	i2c12_default: i2c12-default-state {
		/* To Maxim max20411 */
		pins = "gpio0", "gpio1";
		function = "qup12";
		drive-strength = <2>;
		bias-pull-up;
	};

	i2c15_default: i2c15-default-state {
		/* To display connector (SIP1 only) */
		pins = "gpio36", "gpio37";
		function = "qup15";
		drive-strength = <2>;
		bias-pull-up;
	};

	i2c18_default: i2c18-default-state {
		/* To ASM330LHH IMU (SIP1 only) */
		pins = "gpio66", "gpio67";
		function = "qup18";
		drive-strength = <2>;
		bias-pull-up;
	};

	pcie2a_default: pcie2a-default-state {
		perst-pins {
			pins = "gpio143";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-down;
		};

		clkreq-pins {
			pins = "gpio142";
			function = "pcie2a_clkreq";
			drive-strength = <2>;
			bias-pull-up;
		};

		wake-pins {
			pins = "gpio145";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-up;
		};
	};

	pcie3a_default: pcie3a-default-state {
		perst-pins {
			pins = "gpio151";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-down;
		};

		clkreq-pins {
			pins = "gpio150";
			function = "pcie3a_clkreq";
			drive-strength = <2>;
			bias-pull-up;
		};

		wake-pins {
			pins = "gpio56";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-up;
		};
	};
};
