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

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