// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (c) 2018, Linaro Limited
 */

#include <dt-bindings/gpio/gpio.h>
#include "qcs404.dtsi"
#include "pms405.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>

/ {
	aliases {
		serial0 = &blsp1_uart2;
		serial1 = &blsp1_uart3;
	};

	chosen {
		stdout-path = "serial0";
	};

	vph_pwr: vph-pwr-regulator {
		compatible = "regulator-fixed";
		regulator-name = "vph_pwr";
		regulator-always-on;
		regulator-boot-on;
	};

	vdd_ch0_3p3:
	vdd_esmps3_3p3: vdd-esmps3-3p3-regulator {
		compatible = "regulator-fixed";
		regulator-name = "eSMPS3_3P3";

		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};

	usb3_vbus_reg: regulator-usb3-vbus {
		compatible = "regulator-fixed";
		regulator-name = "VBUS_BOOST_5V";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		gpio = <&pms405_gpios 3 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&usb_vbus_boost_pin>;
		vin-supply = <&vph_pwr>;
		enable-active-high;

		/* TODO: Drop this when introducing role switching */
		regulator-always-on;
	};
};

&blsp1_uart3 {
	status = "okay";

	bluetooth {
		compatible = "qcom,wcn3990-bt";
		vddio-supply = <&vreg_l6_1p8>;
		vddxo-supply = <&vreg_l5_1p8>;
		vddrf-supply = <&vreg_l1_1p3>;
		vddch0-supply = <&vdd_ch0_3p3>;

		local-bd-address = [ 02 00 00 00 5a ad ];

		max-speed = <3200000>;
	};
};

&blsp1_dma {
	qcom,controlled-remotely;
};

&blsp2_dma {
	qcom,controlled-remotely;
};

&gcc {
	protected-clocks = <GCC_BIMC_CDSP_CLK>,
			   <GCC_CDSP_CFG_AHB_CLK>,
			   <GCC_CDSP_BIMC_CLK_SRC>,
			   <GCC_CDSP_TBU_CLK>,
			   <141>, /* GCC_WCSS_Q6_AHB_CLK */
			   <142>; /* GCC_WCSS_Q6_AXIM_CLK */
};

&pms405_spmi_regulators {
	vdd_s3-supply = <&vph_pwr>;

	pms405_s3: s3 {
		regulator-always-on;
		regulator-boot-on;
		regulator-name = "vdd_apc";
		regulator-initial-mode = <1>;
		regulator-min-microvolt = <1048000>;
		regulator-max-microvolt = <1384000>;
	};
};

&pcie {
	status = "okay";

	perst-gpios = <&tlmm 43 GPIO_ACTIVE_LOW>;

	pinctrl-names = "default";
	pinctrl-0 = <&perst_state>;
};

&pcie_phy {
	status = "okay";

	vdda-vp-supply = <&vreg_l3_1p05>;
	vdda-vph-supply = <&vreg_l5_1p8>;
};

&remoteproc_adsp {
	status = "okay";
};

&remoteproc_cdsp {
	status = "okay";
};

&remoteproc_wcss {
	status = "okay";
};

&rpm_requests {
	regulators {
		compatible = "qcom,rpm-pms405-regulators";

		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_l1_l2-supply = <&vreg_s5_1p35>;
		vdd_l3_l8-supply = <&vreg_s5_1p35>;
		vdd_l4-supply = <&vreg_s5_1p35>;
		vdd_l5_l6-supply = <&vreg_s4_1p8>;
		vdd_l7-supply = <&vph_pwr>;
		vdd_l9-supply = <&vreg_s5_1p35>;
		vdd_l10_l11_l12_l13-supply = <&vph_pwr>;

		vreg_s4_1p8: s4 {
			regulator-min-microvolt = <1728000>;
			regulator-max-microvolt = <1920000>;
		};

		vreg_s5_1p35: s5 {
			regulator-min-microvolt = <1352000>;
			regulator-max-microvolt = <1352000>;
		};

		vreg_l1_1p3: l1 {
			regulator-min-microvolt = <1240000>;
			regulator-max-microvolt = <1352000>;
		};

		vreg_l2_1p275: l2 {
			regulator-min-microvolt = <1048000>;
			regulator-max-microvolt = <1280000>;
		};

		vreg_l3_1p05: l3 {
			regulator-min-microvolt = <1048000>;
			regulator-max-microvolt = <1160000>;
		};

		vreg_l4_1p2: l4 {
			regulator-min-microvolt = <1144000>;
			regulator-max-microvolt = <1256000>;
		};

		vreg_l5_1p8: l5 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		vreg_l6_1p8: l6 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-always-on;
		};

		vreg_l7_1p8: l7 {
			regulator-min-microvolt = <1616000>;
			regulator-max-microvolt = <3000000>;
		};

		vreg_l8_1p2: l8 {
			regulator-min-microvolt = <1136000>;
			regulator-max-microvolt = <1352000>;
		};

		vreg_l10_3p3: l10 {
			regulator-min-microvolt = <2936000>;
			regulator-max-microvolt = <3088000>;
		};

		vreg_l11_sdc2: l11 {
			regulator-min-microvolt = <2696000>;
			regulator-max-microvolt = <3304000>;
		};

		vreg_l12_3p3: l12 {
			regulator-min-microvolt = <3050000>;
			regulator-max-microvolt = <3300000>;
		};

		vreg_l13_3p3: l13 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3300000>;
		};
	};
};

&sdcc1 {
	status = "okay";

	supports-cqe;
	mmc-ddr-1_8v;
	mmc-hs400-1_8v;
	bus-width = <8>;
	non-removable;

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc1_on>;
	pinctrl-1 = <&sdc1_off>;
};

&tlmm {
	perst_state: perst-state {
		pins = "gpio43";
		function = "gpio";

		drive-strength = <2>;
		bias-disable;
		output-low;
	};

	sdc1_on: sdc1-on-state {
		clk-pins {
			pins = "sdc1_clk";
			bias-disable;
			drive-strength = <16>;
		};

		cmd-pins {
			pins = "sdc1_cmd";
			bias-pull-up;
			drive-strength = <10>;
		};

		data-pins {
			pins = "sdc1_data";
			bias-pull-up;
			drive-strength = <10>;
		};

		rclk-pins {
			pins = "sdc1_rclk";
			bias-pull-down;
		};
	};

	sdc1_off: sdc1-off-state {
		clk-pins {
			pins = "sdc1_clk";
			bias-disable;
			drive-strength = <2>;
		};

		cmd-pins {
			pins = "sdc1_cmd";
			bias-pull-up;
			drive-strength = <2>;
		};

		data-pins {
			pins = "sdc1_data";
			bias-pull-up;
			drive-strength = <2>;
		};

		rclk-pins {
			pins = "sdc1_rclk";
			bias-pull-down;
		};
	};

	usb3_id_pin: usb3-id-state {
		pins = "gpio116";
		function = "gpio";

		drive-strength = <2>;
		bias-pull-up;
		input-enable;
	};
};

&pms405_gpios {
	usb_vbus_boost_pin: usb-vbus-boost-state {
		pinconf {
			pins = "gpio3";
			function = PMIC_GPIO_FUNC_NORMAL;
			output-low;
			power-source = <1>;
		};
	};
	usb3_vbus_pin: usb3-vbus-state {
		pinconf {
			pins = "gpio12";
			function = PMIC_GPIO_FUNC_NORMAL;
			input-enable;
			bias-pull-down;
			power-source = <1>;
		};
	};
};

&usb2 {
	status = "okay";
};

&usb2_phy_sec {
	vdd-supply = <&vreg_l4_1p2>;
	vdda1p8-supply = <&vreg_l5_1p8>;
	vdda3p3-supply = <&vreg_l12_3p3>;
	status = "okay";
};

&usb3 {
	status = "okay";

};

&usb3_dwc3 {
	dr_mode = "host";
};

&usb2_phy_prim {
	vdd-supply = <&vreg_l4_1p2>;
	vdda1p8-supply = <&vreg_l5_1p8>;
	vdda3p3-supply = <&vreg_l12_3p3>;
	status = "okay";
};

&usb3_phy {
	vdd-supply = <&vreg_l3_1p05>;
	vdda1p8-supply = <&vreg_l5_1p8>;
	status = "okay";
};

&wifi {
	status = "okay";
	vdd-0.8-cx-mx-supply = <&vreg_l2_1p275>;
	vdd-1.8-xo-supply = <&vreg_l5_1p8>;
	vdd-1.3-rfa-supply = <&vreg_l1_1p3>;
};

/* PINCTRL - additions to nodes defined in qcs404.dtsi */

&blsp1_uart2_default {
	rx-pins {
		drive-strength = <2>;
		bias-disable;
	};

	tx-pins {
		drive-strength = <2>;
		bias-disable;
	};
};

&blsp1_uart3_default {
	cts-pins {
		bias-disable;
	};

	rts-tx-pins {
		drive-strength = <2>;
		bias-disable;
	};

	rx-pins {
		bias-pull-up;
	};
};
