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

/ {
	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";
	};

	pwrseq {
		compatible = "simple-bus";

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

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

		led@1 {
			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>;
			};
		};
	};

	soc {
		pinctrl@800000 {
			card_detect: card_detect {
				mux {
					pins = "gpio26";
					function = "gpio";
					bias-disable;
				};
			};

			pcie_pins: pcie_pinmux {
				mux {
					pins = "gpio27";
					function = "gpio";
				};
				conf {
					pins = "gpio27";
					drive-strength = <12>;
					bias-disable;
				};
			};
		};

		rpm@108000 {
			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 */
				s1 {
					regulator-always-on;
					regulator-min-microvolt = <1225000>;
					regulator-max-microvolt = <1225000>;
					qcom,switch-mode-frequency = <3200000>;
					bias-pull-down;
				};

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

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

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

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

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

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

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

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

				lvs1 {
					bias-pull-down;
				};

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

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

		gsbi3: gsbi@16200000 {
			status = "okay";
			qcom,mode = <GSBI_PROT_I2C>;
			i2c@16280000 {
				status = "okay";
			};
		};

		gsbi@16300000 {
			status = "okay";
			qcom,mode = <GSBI_PROT_I2C>;
			/* CAM I2C MIPI-CSI connector */
			i2c@16380000 {
				status = "okay";
			};
		};

		gsbi@12440000 {
			status = "okay";
			qcom,mode = <GSBI_PROT_I2C>;

			i2c@12460000 {
				status = "okay";
				clock-frequency = <200000>;

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

		gsbi@1a200000 {
			qcom,mode = <GSBI_PROT_SPI>;
			status = "okay";
			spi4: spi@1a280000 {
				status = "okay";
				num-cs = <1>;
				cs-gpios = <&tlmm_pinmux 53 0>;
			};
		};

		gsbi@16500000 {
			status = "okay";
			qcom,mode = <GSBI_PROT_UART_W_FC>;

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

		gsbi@16600000 {
			status = "okay";
			qcom,mode = <GSBI_PROT_I2C_UART>;
			serial@16640000 {
				status = "okay";
				pinctrl-names = "default";
				pinctrl-0 = <&gsbi7_uart_2pins>;
			};
		};

		sata_phy0: phy@1b400000 {
			status = "okay";
		};

		sata0: sata@29000000 {
			status = "okay";
			target-supply = <&pm8921_s4>;
		};

		/* OTG */
		usb@12500000 {
			status = "okay";
			dr_mode = "otg";
			ulpi {
				phy {
					v3p3-supply = <&pm8921_l3>;
					v1p8-supply = <&pm8921_l4>;
				};
			};
		};

		usb@12520000 {
			status = "okay";
			dr_mode = "host";
			ulpi {
				phy {
					v3p3-supply = <&pm8921_l3>;
					v1p8-supply = <&pm8921_l23>;
				};
			};
		};

		usb@12530000 {
			status = "okay";
			dr_mode = "host";
			ulpi {
				phy {
					v3p3-supply = <&pm8921_l3>;
					v1p8-supply = <&pm8921_l23>;
				};
			};
		};

		pci@1b500000 {
			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>;
		};

		qcom,ssbi@500000 {
			pmic@0 {
				gpio@150 {
					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>;
						};
					};
				};
			};
		};

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

			/* External micro SD card */
			sdcc3: mmc@12180000 {
				status = "okay";
				vmmc-supply = <&pm8921_l6>;
				pinctrl-names = "default";
				pinctrl-0 = <&card_detect>;
				cd-gpios = <&tlmm_pinmux 26 GPIO_ACTIVE_LOW>;
			};
			/* WLAN */
			sdcc4: mmc@121c0000 {
				status = "okay";
				vmmc-supply = <&ext_3p3v>;
				vqmmc-supply = <&pm8921_lvs1>;
				mmc-pwrseq = <&sdcc4_pwrseq>;
			};
		};

		hdmi-tx@4a00000 {
			status = "okay";

			core-vdda-supply = <&pm8921_hdmi_switch>;

			hpd-gpios = <&tlmm_pinmux 72 GPIO_ACTIVE_HIGH>;

			ports {
				port@0 {
					endpoint {
						remote-endpoint = <&mdp_dtv_out>;
					};
				};

				port@1 {
					endpoint {
						remote-endpoint = <&hdmi_con>;
					};
				};
			};
		};

		hdmi-phy@4a00400 {
			status = "okay";

			core-vdda-supply = <&pm8921_hdmi_switch>;
		};

		mdp@5100000 {
			status = "okay";

			ports {
				port@3 {
					endpoint {
						remote-endpoint = <&hdmi_in>;
					};
				};
			};
		};
	};
};
