#include "qcom-apq8064-v2.0.dtsi"
#include <dt-bindings/gpio/gpio.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";
			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;
				};
			};

			hdmi_pinctrl: hdmi-pinctrl {
				mux {
					pins = "gpio70", "gpio71", "gpio72";
					function = "hdmi";
				};

				pinconf_ddc {
					pins = "gpio70", "gpio71";
					bias-pull-up;
					drive-strength = <2>;
				};

				pinconf_hpd {
					pins = "gpio72";
					bias-pull-down;
					drive-strength = <16>;
				};
			};
		};

		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 = "ok";
			qcom,mode = <GSBI_PROT_UART_W_FC>;

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

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

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

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

		/* OTG */
		usb1_phy: phy@12500000 {
			status		= "okay";
			vddcx-supply	= <&pm8921_s3>;
			v3p3-supply	= <&pm8921_l3>;
			v1p8-supply	= <&pm8921_l4>;
		};

		usb3_phy: phy@12520000 {
			status		= "okay";
			vddcx-supply	= <&pm8921_s3>;
			v3p3-supply	= <&pm8921_l3>;
			v1p8-supply	= <&pm8921_l23>;
		};

		usb4_phy: phy@12530000 {
			status		= "okay";
			vddcx-supply	= <&pm8921_s3>;
			v3p3-supply	= <&pm8921_l3>;
			v1p8-supply	= <&pm8921_l23>;
		};

		gadget1: gadget@12500000 {
			status = "okay";
		};

		/* OTG */
		usb1: usb@12500000 {
			status = "okay";
		};

		usb3: usb@12520000 {
			status = "okay";
		};

		usb4: usb@12530000 {
			status = "okay";
		};

		pci@1b500000 {
			status = "ok";
			vdda-supply = <&pm8921_s3>;
			vdda_phy-supply = <&pm8921_lvs6>;
			vdda_refclk-supply = <&ext_3p3v>;
			pinctrl-0 = <&pcie_pins>;
			pinctrl-names = "default";
			perst-gpio = <&tlmm_pinmux 27 GPIO_ACTIVE_LOW>;
		};

		qcom,ssbi@500000 {
			pmic@0 {
				gpio@150 {
					wlan_default_gpios: wlan-gpios {
						pios {
							pins = "gpio43";
							function = "normal";
							bias-disable;
							power-source = <PM8921_GPIO_S4>;
						};
					};

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

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

			/* External micro SD card */
			sdcc3: sdcc@12180000 {
				status = "okay";
				vmmc-supply = <&pm8921_l6>;
				pinctrl-names	= "default";
				pinctrl-0	= <&card_detect>;
				cd-gpios	= <&tlmm_pinmux 26 GPIO_ACTIVE_LOW>;
			};
			/* WLAN */
			sdcc4: sdcc@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>;
			hdmi-mux-supply = <&ext_3p3v>;

			hpd-gpios = <&tlmm_pinmux 72 GPIO_ACTIVE_HIGH>;

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

			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>;
					};
				};
			};
		};
	};
};
