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

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

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

	soc {
		rpm@108000 {
			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;
				};
			};
		};

		mdp@5100000 {
			status = "okay";
			ports {
				port@1 {
					mdp_dsi1_out: endpoint {
						remote-endpoint = <&dsi0_in>;
					};
				};
			};
		};

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

			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>;
					};
				};
			};
			ports {
				port@0 {
					dsi0_in: endpoint {
						remote-endpoint = <&mdp_dsi1_out>;
					};
				};

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

		dsi-phy@4700200 {
			status = "okay";
			vddio-supply = <&pm8921_lvs7>;/*VDD_PLL2_1 to 7*/
		};

		gsbi@16200000 {
			status = "okay";
			qcom,mode = <GSBI_PROT_I2C>;
			i2c@16280000 {
				status = "okay";
				clock-frequency = <200000>;
				pinctrl-0 = <&i2c3_pins>;
				pinctrl-names = "default";

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


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

			i2c@12460000 {
				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>;
				};

			};
		};

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

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

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

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

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

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

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