/dts-v1/;

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

/ {
	model = "Toradex Apalis T30 on Apalis Evaluation Board";
	compatible = "toradex,apalis_t30-eval", "toradex,apalis_t30", "nvidia,tegra30";

	aliases {
		rtc0 = "/i2c@7000c000/rtc@68";
		rtc1 = "/i2c@7000d000/tps65911@2d";
		rtc2 = "/rtc@7000e000";
		serial0 = &uarta;
		serial1 = &uartb;
		serial2 = &uartc;
		serial3 = &uartd;
	};

	pcie-controller@00003000 {
		status = "okay";

		pci@1,0 {
			status = "okay";
		};

		pci@2,0 {
			status = "okay";
		};

		pci@3,0 {
			status = "okay";
		};
	};

	host1x@50000000 {
		dc@54200000 {
			rgb {
				status = "okay";
				nvidia,panel = <&panel>;
			};
		};
		hdmi@54280000 {
			status = "okay";
		};
	};

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

	serial@70006040 {
		compatible = "nvidia,tegra30-hsuart";
		status = "okay";
	};

	serial@70006200 {
		compatible = "nvidia,tegra30-hsuart";
		status = "okay";
	};

	serial@70006300 {
		compatible = "nvidia,tegra30-hsuart";
		status = "okay";
	};

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

	/*
	 * GEN1_I2C: I2C1_SDA/SCL on MXM3 pin 209/211 (e.g. RTC on carrier
	 * board)
	 */
	i2c@7000c000 {
		status = "okay";
		clock-frequency = <100000>;

		pcie-switch@58 {
			compatible = "plx,pex8605";
			reg = <0x58>;
		};

		/* M41T0M6 real time clock on carrier board */
		rtc@68 {
			compatible = "st,m41t00";
			reg = <0x68>;
		};
	};

	/* GEN2_I2C: unused */

	/*
	 * CAM_I2C: I2C3_SDA/SCL on MXM3 pin 201/203 (e.g. camera sensor on
	 * carrier board)
	 */
	cami2c: i2c@7000c500 {
		status = "okay";
		clock-frequency = <400000>;
	};

	/* DDC: I2C2_SDA/SCL on MXM3 pin 205/207 (e.g. display EDID) */
	hdmiddc: i2c@7000c700 {
		status = "okay";
	};

	/* SPI1: Apalis SPI1 */
	spi@7000d400 {
		status = "okay";
		spi-max-frequency = <25000000>;
		spidev0: spidev@1 {
			compatible = "spidev";
			reg = <1>;
			spi-max-frequency = <25000000>;
		};
	};

	/* SPI5: Apalis SPI2 */
	spi@7000dc00 {
		status = "okay";
		spi-max-frequency = <25000000>;
		spidev1: spidev@2 {
			compatible = "spidev";
			reg = <2>;
			spi-max-frequency = <25000000>;
		};
	};

	sd1: sdhci@78000000 {
		status = "okay";
		bus-width = <4>;
		/* SD1_CD# */
		cd-gpios = <&gpio TEGRA_GPIO(CC, 5) GPIO_ACTIVE_LOW>;
		no-1-8-v;
	};

	mmc1: sdhci@78000400 {
		status = "okay";
		bus-width = <8>;
		/* MMC1_CD# */
		cd-gpios = <&gpio TEGRA_GPIO(V, 3) GPIO_ACTIVE_LOW>;
		no-1-8-v;
	};

	/* EHCI instance 0: USB1_DP/N -> USBO1_DP/N */
	usb@7d000000 {
		status = "okay";
	};

	usb-phy@7d000000 {
		status = "okay";
		vbus-supply = <&usbo1_vbus_reg>;
	};

	/* EHCI instance 1: USB2_DP/N -> USBH2_DP/N */
	usb@7d004000 {
		status = "okay";
	};

	usb-phy@7d004000 {
		status = "okay";
		vbus-supply = <&usbh_vbus_reg>;
	};

	/* EHCI instance 2: USB3_DP/N -> USBH3_DP/N */
	usb@7d008000 {
		status = "okay";
	};

	usb-phy@7d008000 {
		status = "okay";
		vbus-supply = <&usbh_vbus_reg>;
	};

	backlight: backlight {
		compatible = "pwm-backlight";

		/* PWM0 */
		pwms = <&pwm 0 5000000>;
		brightness-levels = <255 231 223 207 191 159 127 0>;
		default-brightness-level = <6>;
		/* BKL1_ON */
		enable-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_HIGH>;
	};

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

		power {
			label = "Power";
			gpios = <&gpio TEGRA_GPIO(V, 1) GPIO_ACTIVE_LOW>;
			linux,code = <KEY_POWER>;
			debounce-interval = <10>;
			gpio-key,wakeup;
		};
	};

	panel: panel {
		/*
		 * edt,et057090dhu: EDT 5.7" LCD TFT
		 * edt,et070080dh6: EDT 7.0" LCD TFT
		 */
		compatible = "edt,et057090dhu", "simple-panel";

		backlight = <&backlight>;
	};

	pwmleds {
		compatible = "pwm-leds";

		pwm1 {
			label = "PWM1";
			pwms = <&pwm 3 19600>;
			max-brightness = <255>;
		};

		pwm2 {
			label = "PWM2";
			pwms = <&pwm 2 19600>;
			max-brightness = <255>;
		};

		pwm3 {
			label = "PWM3";
			pwms = <&pwm 1 19600>;
			max-brightness = <255>;
		};
	};

	regulators {
		sys_5v0_reg: regulator@1 {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "5v0";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			regulator-always-on;
		};

		/* USBO1_EN */
		usbo1_vbus_reg: regulator@2 {
			compatible = "regulator-fixed";
			reg = <2>;
			regulator-name = "usbo1_vbus";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio TEGRA_GPIO(T, 5) GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&sys_5v0_reg>;
		};

		/* USBH_EN */
		usbh_vbus_reg: regulator@3 {
			compatible = "regulator-fixed";
			reg = <3>;
			regulator-name = "usbh_vbus";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio TEGRA_GPIO(DD, 1) GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&sys_5v0_reg>;
		};
	};
};
