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

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

/ {
	model = "Asus Nexus7(flo)";
	compatible = "asus,nexus7-flo", "qcom,apq8064";
	chassis-type = "tablet";

	aliases {
		serial0 = &gsbi7_serial;
		serial1 = &gsbi6_serial;
	};

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

	reserved-memory {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		ramoops@88d00000 {
			compatible = "ramoops";
			reg = <0x88d00000 0x100000>;
			record-size = <0x00020000>;
			console-size = <0x00020000>;
			ftrace-size = <0x00020000>;
		};
	};

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

	gpio-keys {
		compatible = "gpio-keys";
		key-volume-up {
			label = "Volume Up";
			gpios = <&pm8921_gpio 4 GPIO_ACTIVE_HIGH>;
			linux,code = <KEY_VOLUMEUP>;
		};
		key-volume-down {
			label = "Volume Down";
			gpios = <&pm8921_gpio 38 GPIO_ACTIVE_HIGH>;
			linux,code = <KEY_VOLUMEDOWN>;
		};
	};

	soc {
		sram@2a03f000 {
			compatible = "qcom,apq8064-imem", "syscon", "simple-mfd";
			reg = <0x2a03f000 0x1000>;

			reboot-mode {
				compatible = "syscon-reboot-mode";
				offset = <0x65c>;

				mode-normal = <0x77665501>;
				mode-bootloader = <0x77665500>;
				mode-recovery = <0x77665502>;
			};
		};
	};
};

&dsi0 {
	vdda-supply = <&pm8921_l2>;/*VDD_MIPI1 to 4*/
	vdd-supply = <&pm8921_l8>;
	vddio-supply = <&pm8921_lvs7>;
	avdd-supply = <&pm8921_l11>;
	status = "okay";

	panel@0 {
		reg = <0>;
		compatible = "jdi,lt070me05000";

		vddp-supply = <&pm8921_l17>;
		iovcc-supply = <&pm8921_lvs7>;

		enable-gpios = <&pm8921_gpio 36 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&tlmm_pinmux 54 GPIO_ACTIVE_LOW>;
		dcdc-en-gpios = <&pm8921_gpio 23 GPIO_ACTIVE_HIGH>;

		port {
			panel_in: endpoint {
				remote-endpoint = <&dsi0_out>;
			};
		};
	};
};

&dsi0_in {
	remote-endpoint = <&mdp_dsi1_out>;
};

&dsi0_out {
	remote-endpoint = <&panel_in>;
	data-lanes = <0 1 2 3>;
};

&dsi0_phy {
	vddio-supply = <&pm8921_lvs7>;/*VDD_PLL2_1 to 7*/
	status = "okay";
};

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

&gsbi1_i2c {
	status = "okay";
	clock-frequency = <200000>;
	pinctrl-0 = <&i2c1_pins>;
	pinctrl-names = "default";

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

	bq27541@55 {
		compatible = "ti,bq27541";
		reg = <0x55>;
	};

};

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

&gsbi3_i2c {
	clock-frequency = <200000>;
	pinctrl-0 = <&i2c3_pins>;
	pinctrl-names = "default";
	status = "okay";

	trackpad@10 {
		compatible = "elan,ekth3500";
		reg = <0x10>;
		interrupt-parent = <&tlmm_pinmux>;
		interrupts = <6 IRQ_TYPE_EDGE_FALLING>;
	};
};

&gsbi6 {
	qcom,mode = <GSBI_PROT_I2C_UART>;
	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 {
	status = "okay";
};

&mdp {
	status = "okay";
};

&mdp_dsi1_out {
	remote-endpoint = <&dsi0_in>;
};

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

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

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

		vdd_l1_l2_l12_l18-supply = <&pm8921_s4>;
		vin_lvs1_3_6-supply = <&pm8921_s4>;
		vin_lvs4_5_7-supply = <&pm8921_s4>;

		vdd_l24-supply = <&pm8921_s1>;
		vdd_l25-supply = <&pm8921_s1>;
		vin_lvs2-supply = <&pm8921_s1>;

		vdd_l26-supply = <&pm8921_s7>;
		vdd_l27-supply = <&pm8921_s7>;
		vdd_l28-supply = <&pm8921_s7>;

		vdd_ncp-supply = <&pm8921_l6>;

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

		/* msm otg HSUSB_VDDCX */
		pm8921_s3: s3 {
			regulator-min-microvolt = <500000>;
			regulator-max-microvolt = <1150000>;
			qcom,switch-mode-frequency = <4800000>;
		};

		/*
		 * msm_sdcc.1-sdc-vdd_io
		 * tabla2x-slim-CDC_VDDA_RX
		 * tabla2x-slim-CDC_VDDA_TX
		 * tabla2x-slim-CDC_VDD_CP
		 * tabla2x-slim-VDDIO_CDC
		 */
		pm8921_s4: s4 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			qcom,switch-mode-frequency = <3200000>;
			regulator-always-on;
		};

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

		/* mipi_dsi.1-dsi1_pll_vdda */
		pm8921_l2: l2 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-always-on;
		};

		/* msm_otg-HSUSB_3p3 */
		pm8921_l3: l3 {
			regulator-min-microvolt = <3075000>;
			regulator-max-microvolt = <3075000>;
			bias-pull-down;
		};

		/* msm_otg-HSUSB_1p8 */
		pm8921_l4: l4 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			bias-pull-down;
		};

		/* msm_sdcc.1-sdc_vdd */
		pm8921_l5: l5 {
			regulator-min-microvolt = <2950000>;
			regulator-max-microvolt = <2950000>;
			regulator-always-on;
			bias-pull-down;
		};

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

		pm8921_l8: l8 {
		};

		/* mipi_dsi.1-dsi1_avdd */
		pm8921_l11: l11 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3000000>;
			bias-pull-down;
			regulator-always-on;
		};

		/* pwm_power for backlight */
		pm8921_l17: l17 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3000000>;
			regulator-always-on;
		};

		/* camera, qdsp6 */
		pm8921_l23: l23 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			bias-pull-down;
		};

		/*
		 * tabla2x-slim-CDC_VDDA_A_1P2V
		 * tabla2x-slim-VDDD_CDC_D
		 */
		pm8921_l25: l25 {
			regulator-min-microvolt = <1250000>;
			regulator-max-microvolt = <1250000>;
			bias-pull-down;
		};

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

		pm8921_lvs4: lvs4 {
			bias-pull-down;
		};

		pm8921_lvs5: lvs5 {
			bias-pull-down;
		};

		pm8921_lvs6: lvs6 {
			bias-pull-down;
		};
		/*
		 * mipi_dsi.1-dsi1_vddio
		 * pil_riva-pll_vdd
		 */
		pm8921_lvs7: lvs7 {
			bias-pull-down;
		};
	};
};

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

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

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