// SPDX-License-Identifier: GPL-2.0
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>

#include "qcom-apq8064-v2.0.dtsi"
#include "pm8821.dtsi"
#include "pm8921.dtsi"

/ {
	model = "Qualcomm APQ8064/IFC6410";
	compatible = "qcom,apq8064-ifc6410", "qcom,apq8064";

	aliases {
		serial0 = &gsbi7_serial;
		serial1 = &gsbi6_serial;
		i2c0 = &gsbi1_i2c;
		i2c1 = &gsbi2_i2c;
		i2c2 = &gsbi3_i2c;
		i2c3 = &gsbi4_i2c;
		spi0 = &gsbi5_spi;
	};

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

	leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&notify_led>;

		led-user1 {
			label = "apq8064:green:user1";
			color = <LED_COLOR_ID_GREEN>;
			gpios = <&pm8921_gpio 18 GPIO_ACTIVE_HIGH>;
			default-state = "on";
		};
	};

	hdmi-out {
		compatible = "hdmi-connector";
		type = "d";

		port {
			hdmi_con: endpoint {
				remote-endpoint = <&hdmi_out>;
			};
		};
	};

	sdcc4_pwrseq: pwrseq-sdcc4 {
		pinctrl-names = "default";
		pinctrl-0 = <&wlan_default_gpios>;
		compatible = "mmc-pwrseq-simple";
		reset-gpios = <&pm8921_gpio 43 GPIO_ACTIVE_LOW>;
	};

	ext_3p3v: regulator-ext-3p3v {
		compatible = "regulator-fixed";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-name = "ext_3p3v";
		startup-delay-us = <0>;
		gpio = <&tlmm_pinmux 77 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		regulator-boot-on;
	};
};

&gsbi1 {
	qcom,mode = <GSBI_PROT_I2C>;
	status = "okay";
};

&gsbi1_i2c {
	clock-frequency = <200000>;
	status = "okay";

	eeprom@52 {
		compatible = "atmel,24c128";
		reg = <0x52>;
		pagesize = <32>;
	};
};

&gsbi3 {
	qcom,mode = <GSBI_PROT_I2C>;
	status = "okay";
};

&gsbi3_i2c {
	status = "okay";
};

&gsbi4 {
	qcom,mode = <GSBI_PROT_I2C>;
	status = "okay";
};

/* CAM I2C MIPI-CSI connector */
&gsbi4_i2c {
	status = "okay";
};

&gsbi5 {
	qcom,mode = <GSBI_PROT_SPI>;
	status = "okay";
};

&gsbi5_spi {
	num-cs = <1>;
	cs-gpios = <&tlmm_pinmux 53 0>;
	status = "okay";
};

&gsbi6 {
	qcom,mode = <GSBI_PROT_UART_W_FC>;
	status = "okay";
};

&gsbi6_serial {
	pinctrl-names = "default";
	pinctrl-0 = <&gsbi6_uart_4pins>;
	status = "okay";
};

&gsbi7 {
	qcom,mode = <GSBI_PROT_I2C_UART>;
	status = "okay";
};

&gsbi7_serial {
	pinctrl-names = "default";
	pinctrl-0 = <&gsbi7_uart_2pins>;
	status = "okay";
};

&hdmi {
	core-vdda-supply = <&pm8921_hdmi_switch>;
	status = "okay";
};

&hdmi_in {
	remote-endpoint = <&mdp_dtv_out>;
};

&hdmi_out {
	remote-endpoint = <&hdmi_con>;
};

&hdmi_phy {
	status = "okay";
	core-vdda-supply = <&pm8921_hdmi_switch>;
};

&mdp {
	status = "okay";
};

&mdp_dtv_out {
	remote-endpoint = <&hdmi_in>;
};

&pcie {
	status = "okay";
	vdda-supply = <&pm8921_s3>;
	vdda_phy-supply = <&pm8921_lvs6>;
	vdda_refclk-supply = <&ext_3p3v>;
	pinctrl-0 = <&pcie_pins>;
	pinctrl-names = "default";
	perst-gpios = <&tlmm_pinmux 27 GPIO_ACTIVE_LOW>;
};

&pm8821 {
	interrupts-extended = <&tlmm_pinmux 76 IRQ_TYPE_LEVEL_LOW>;
};

&pm8921 {
	interrupts-extended = <&tlmm_pinmux 74 IRQ_TYPE_LEVEL_LOW>;
};

&pm8921_gpio {
	wlan_default_gpios: wlan-gpios-state {
		pinconf {
			pins = "gpio43";
			function = "normal";
			bias-disable;
			power-source = <PM8921_GPIO_S4>;
		};
	};

	notify_led: nled-state {
		pinconf {
			pins = "gpio18";
			function = "normal";
			bias-disable;
			power-source = <PM8921_GPIO_S4>;
		};
	};
};

&rpm {
	regulators {
		compatible = "qcom,rpm-pm8921-regulators";

		vin_lvs1_3_6-supply = <&pm8921_s4>;
		vin_lvs2-supply = <&pm8921_s1>;
		vin_lvs4_5_7-supply = <&pm8921_s4>;

		vdd_l1_l2_l12_l18-supply = <&pm8921_s4>;
		vdd_l24-supply = <&pm8921_s1>;
		vdd_l25-supply = <&pm8921_s1>;
		vdd_l26-supply = <&pm8921_s7>;
		vdd_l27-supply = <&pm8921_s7>;
		vdd_l28-supply = <&pm8921_s7>;

		/* Buck SMPS */
		pm8921_s1: s1 {
			regulator-always-on;
			regulator-min-microvolt = <1225000>;
			regulator-max-microvolt = <1225000>;
			qcom,switch-mode-frequency = <3200000>;
			bias-pull-down;
		};

		pm8921_s3: s3 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1400000>;
			qcom,switch-mode-frequency = <4800000>;
		};

		pm8921_s4: s4 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			qcom,switch-mode-frequency = <3200000>;
		};

		pm8921_s7: s7 {
			regulator-min-microvolt = <1300000>;
			regulator-max-microvolt = <1300000>;
			qcom,switch-mode-frequency = <3200000>;
		};

		pm8921_l3: l3 {
			regulator-min-microvolt = <3050000>;
			regulator-max-microvolt = <3300000>;
			bias-pull-down;
		};

		pm8921_l4: l4 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1800000>;
			bias-pull-down;
		};

		pm8921_l5: l5 {
			regulator-min-microvolt = <2750000>;
			regulator-max-microvolt = <3000000>;
			bias-pull-down;
		};

		pm8921_l6: l6 {
			regulator-min-microvolt = <2950000>;
			regulator-max-microvolt = <2950000>;
			bias-pull-down;
		};

		pm8921_l23: l23 {
			regulator-min-microvolt = <1700000>;
			regulator-max-microvolt = <1900000>;
			bias-pull-down;
		};

		pm8921_lvs1: lvs1 {
			bias-pull-down;
		};

		pm8921_lvs6: lvs6 {
			bias-pull-down;
		};

		pm8921_hdmi_switch: hdmi-switch {
			bias-pull-down;
		};
	};
};

&sata_phy0 {
	status = "okay";
};

&sata0 {
	target-supply = <&pm8921_s4>;
	status = "okay";
};

/* eMMC */
&sdcc1 {
	vmmc-supply = <&pm8921_l5>;
	vqmmc-supply = <&pm8921_s4>;
	status = "okay";
};

/* External micro SD card */
&sdcc3 {
	vmmc-supply = <&pm8921_l6>;
	pinctrl-names = "default";
	pinctrl-0 = <&card_detect>;
	cd-gpios = <&tlmm_pinmux 26 GPIO_ACTIVE_LOW>;
	status = "okay";
};

/* WLAN */
&sdcc4 {
	vmmc-supply = <&ext_3p3v>;
	vqmmc-supply = <&pm8921_lvs1>;
	mmc-pwrseq = <&sdcc4_pwrseq>;
	status = "okay";
};

&tlmm_pinmux {
	card_detect: card-detect-state {
		pins = "gpio26";
		function = "gpio";
		bias-disable;
	};

	pcie_pins: pcie-state {
		pins = "gpio27";
		function = "gpio";
		drive-strength = <12>;
		bias-disable;
	};
};

&usb_hs1_phy {
	v3p3-supply = <&pm8921_l3>;
	v1p8-supply = <&pm8921_l4>;
};

&usb_hs3_phy {
	v3p3-supply = <&pm8921_l3>;
	v1p8-supply = <&pm8921_l23>;
};

&usb_hs4_phy {
	v3p3-supply = <&pm8921_l3>;
	v1p8-supply = <&pm8921_l23>;
};

/* OTG */
&usb1 {
	dr_mode = "otg";
	status = "okay";
};

&usb3 {
	dr_mode = "host";
	status = "okay";
};

&usb4 {
	dr_mode = "host";
	status = "okay";
};
