// SPDX-License-Identifier: GPL-2.0
#include "qcom-apq8064-v2.0.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
/ {
	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";
};

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

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

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

		/* msm otg HSUSB_VDDCX */
		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
		 */
		s4 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			qcom,switch-mode-frequency = <3200000>;
			regulator-always-on;
		};

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

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

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

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

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

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

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

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

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

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

		lvs1 {
			bias-pull-down;
		};

		lvs4 {
			bias-pull-down;
		};

		lvs5 {
			bias-pull-down;
		};

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

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

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