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

/ {
	model = "CompuLab CM-QS600";
	compatible = "qcom,apq8064-cm-qs600", "qcom,apq8064";

	aliases {
		serial0 = &gsbi7_serial;
	};

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

	pwrseq {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;
		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>;
		};
	};

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

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

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

			};
		};

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

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

				eeprom@50 {
					compatible = "atmel,24c02";
					reg = <0x50>;
					pagesize = <32>;
				};
			};
		};

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

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

		/* on board fixed 3.3v supply */
		v3p3_fixed: v3p3 {
			compatible = "regulator-fixed";
			regulator-name = "PCIE V3P3";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			regulator-always-on;
		};

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

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

		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 = <&v3p3_fixed>;
				pinctrl-names	= "default";
				pinctrl-0	= <&card_detect>;
				cd-gpios	= <&tlmm_pinmux 26 GPIO_ACTIVE_LOW>;
			};
			/* WLAN */
			sdcc4: sdcc@121c0000 {
				status = "okay";
				vmmc-supply = <&v3p3_fixed>;
				vqmmc-supply = <&v3p3_fixed>;
				mmc-pwrseq = <&sdcc4_pwrseq>;
			};
		};
	};
};
