/dts-v1/;

#include <dt-bindings/input/input.h>
#include "tegra114.dtsi"

/ {
	model = "Tegra Note 7";
	compatible = "nvidia,tn7", "nvidia,tegra114";

	chosen {
		/* TN7's bootloader's arguments need to be overridden */
		bootargs = "console=ttyS0,115200n8 console=tty1 gpt fbcon=rotate:2";
		/* TN7's bootloader will place initrd at this address */
		linux,initrd-start = <0x82000000>;
		linux,initrd-end = <0x82800000>;
	};

	aliases {
		serial0 = &uartd;
	};

	firmware {
		trusted-foundations {
			compatible = "tlm,trusted-foundations";
			tlm,version-major = <2>;
			tlm,version-minor = <8>;
		};
	};

	memory {
		/* memory >= 0x37e00000 is reserved for firmware usage */
		reg = <0x80000000 0x37e00000>;
	};

	host1x@50000000 {
		dsi@54300000 {
			status = "okay";

			vdd-supply = <&vdd_1v2_ap>;

			panel@0 {
				compatible = "lg,ld070wx3-sl01";
				reg = <0>;

				power-supply = <&vdd_lcd>;
				backlight = <&backlight>;
			};
		};
	};

	serial@70006300 {
		status = "okay";
	};

	pwm@7000a000 {
		status = "okay";
	};

	i2c@7000d000 {
		status = "okay";
		clock-frequency = <400000>;

		palmas: pmic@58 {
			compatible = "ti,palmas";
			reg = <0x58>;
			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;

			#interrupt-cells = <2>;
			interrupt-controller;

			ti,system-power-controller;

			palmas_gpio: gpio {
				compatible = "ti,palmas-gpio";
				gpio-controller;
				#gpio-cells = <2>;
			};

			pmic {
				compatible = "ti,tps65913-pmic", "ti,palmas-pmic";

				ldoln-in-supply = <&vdd_smps10_out2>;

				regulators {
					smps123 {
						regulator-name = "vd-cpu";
						regulator-min-microvolt = <1000000>;
						regulator-max-microvolt = <1000000>;
						regulator-always-on;
						regulator-boot-on;
					};

					smps45 {
						regulator-name = "vd-soc";
						regulator-min-microvolt = <1100000>;
						regulator-max-microvolt = <1100000>;
						regulator-always-on;
						regulator-boot-on;
					};

					smps6 {
						regulator-name = "va-lcd-hv";
						regulator-min-microvolt = <3000000>;
						regulator-max-microvolt = <3000000>;
						regulator-always-on;
						regulator-boot-on;
					};

					smps7 {
						regulator-name = "vd-ddr";
						regulator-min-microvolt = <1350000>;
						regulator-max-microvolt = <1350000>;
						regulator-always-on;
						regulator-boot-on;
					};

					vdd_1v8: smps8 {
						regulator-name = "vs-pmu-1v8";
						regulator-min-microvolt = <1800000>;
						regulator-max-microvolt = <1800000>;
						regulator-always-on;
						regulator-boot-on;
					};

					vdd_2v9_sys: smps9 {
						regulator-name = "vs-sys-2v9";
						regulator-min-microvolt = <2900000>;
						regulator-max-microvolt = <2900000>;
						regulator-always-on;
						regulator-boot-on;
					};

					vdd_smps10_out1: smps10_out1 {
						regulator-name = "vd-smps10-out1";
						regulator-min-microvolt = <5000000>;
						regulator-max-microvolt = <5000000>;
						regulator-always-on;
						regulator-boot-on;
					};

					vdd_smps10_out2: smps10_out2 {
						regulator-name = "vd-smps10-out2";
						regulator-min-microvolt = <5000000>;
						regulator-max-microvolt = <5000000>;
						regulator-always-on;
						regulator-boot-on;
					};

					ldo1 {
						regulator-name = "va-pllx";
						regulator-min-microvolt = <1050000>;
						regulator-max-microvolt = <1050000>;
						regulator-always-on;
						regulator-boot-on;
					};

					vdd_1v2_ap: ldo2 {
						regulator-name = "va-ap-1v2";
						regulator-min-microvolt = <1200000>;
						regulator-max-microvolt = <1200000>;
						regulator-always-on;
						regulator-boot-on;
					};

					ldo3 {
						regulator-name = "vd-fuse";
						regulator-min-microvolt = <1800000>;
						regulator-max-microvolt = <1800000>;
						regulator-always-on;
						regulator-boot-on;
					};

					ldo4 {
						regulator-name = "vd-ts-hv";
						regulator-min-microvolt = <3200000>;
						regulator-max-microvolt = <3200000>;
						regulator-always-on;
						regulator-boot-on;
					};

					ldo5 {
						regulator-name = "va-cam2-hv";
						regulator-min-microvolt = <2700000>;
						regulator-max-microvolt = <2700000>;
					};

					ldo6 {
						regulator-name = "va-sns-hv";
						regulator-min-microvolt = <2850000>;
						regulator-max-microvolt = <2850000>;
					};

					ldo7 {
						regulator-name = "va-cam1-hv";
						regulator-min-microvolt = <2700000>;
						regulator-max-microvolt = <2700000>;
					};

					ldo8 {
						regulator-name = "va-ap-rtc";
						regulator-min-microvolt = <1100000>;
						regulator-max-microvolt = <1100000>;
						ti,enable-ldo8-tracking;
						regulator-always-on;
						regulator-boot-on;
					};

					ldo9 {
						regulator-name = "vi-sdcard";
						regulator-min-microvolt = <2900000>;
						regulator-max-microvolt = <2900000>;
					};

					ldousb {
						regulator-name = "avdd-usb";
						regulator-min-microvolt = <3300000>;
						regulator-max-microvolt = <3300000>;
						regulator-always-on;
						regulator-boot-on;
					};

					ldoln {
						regulator-name = "va-hdmi";
						regulator-min-microvolt = <3300000>;
						regulator-max-microvolt = <3300000>;
					};
				};
			};

			rtc {
				compatible = "ti,palmas-rtc";
				interrupt-parent = <&palmas>;
				interrupts = <8 0>;
			};

		};
	};

	pmc@7000e400 {
		nvidia,invert-interrupt;
	};

	/* eMMC */
	sdhci@78000600 {
		status = "okay";
		bus-width = <8>;
		non-removable;
	};

	usb@7d000000 {
		status = "okay";
	};

	usb-phy@7d000000 {
		status = "okay";
		nvidia,xcvr-setup = <7>;
		nvidia,xcvr-lsfslew = <2>;
		nvidia,xcvr-lsrslew = <2>;
		interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
		/* Should be changed to "otg" once we have vbus_supply */
		/* As of now, USB devices need to be powered externally */
		dr_mode = "host";
	};

	backlight: backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm 1 40000>;

		brightness-levels = <0 4 8 16 32 64 128 255>;
		default-brightness-level = <6>;

		power-supply = <&lcd_bl_en>;
	};

	clocks {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		clk32k_in: clock@0 {
			compatible = "fixed-clock";
			reg = <0>;
			#clock-cells = <0>;
			clock-frequency = <32768>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		power {
			label = "Power";
			gpios = <&gpio TEGRA_GPIO(Q, 0) GPIO_ACTIVE_LOW>;
			linux,code = <KEY_POWER>;
			wakeup-source;
		};

		volume_down {
			label = "Volume Down";
			gpios = <&gpio TEGRA_GPIO(Q, 2) GPIO_ACTIVE_LOW>;
			linux,code = <KEY_VOLUMEDOWN>;
		};

		volume_up {
			label = "Volume Up";
			gpios = <&gpio TEGRA_GPIO(R, 2) GPIO_ACTIVE_LOW>;
			linux,code = <KEY_VOLUMEUP>;
		};
	};

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		/* FIXME: output of BQ24192 */
		vs_sys: regulator@0 {
			compatible = "regulator-fixed";
			reg = <0>;
			regulator-name = "VS_SYS";
			regulator-min-microvolt = <4200000>;
			regulator-max-microvolt = <4200000>;
			regulator-always-on;
			regulator-boot-on;
		};

		lcd_bl_en: regulator@1 {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "VDD_LCD_BL";
			regulator-min-microvolt = <16500000>;
			regulator-max-microvolt = <16500000>;
			gpio = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&vs_sys>;
			regulator-boot-on;
		};

		vdd_lcd: regulator@2 {
			compatible = "regulator-fixed";
			reg = <2>;
			regulator-name = "VD_LCD_1V8";
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			gpio = <&palmas_gpio 4 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&vdd_1v8>;
			regulator-boot-on;
		};
	};
};
