/*
 * Copyright 2016 Freescale Semiconductor, Inc.
 * Copyright 2017-2018 NXP.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

/dts-v1/;

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

/ {
	model = "Nest Bobsled";
	compatible = "nestlabs,bobsled", "fsl,imx7ulp", "Generic DT based system";

	/delete-node/reserved-memory;

	reserved-memory {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		/* global autoconfigured region for contiguous allocations */
		linux,cma {
			compatible = "shared-dma-pool";
			reusable;
			size = <0xC000000>;
			alignment = <0x2000>;
			linux,cma-default;
		};

		rpmsg_reserved: rpmsg@67FF0000 {
			no-map;
			reg = <0x67F00000 0x100000>;
		};
	};

	aliases {
		gpio4 = &rpmsg_gpio0;
		gpio5 = &rpmsg_gpio1;
	};

	chosen {
		stdout-path = &lpuart4;
	};

	memory {
		device_type = "memory";
		reg = <0x60000000 0x8000000>;
	};

	backlight {
		compatible = "pwm-backlight";
		pwms = <&pwm0 1 50000>;
		brightness-levels = <0 20 25 30 35 40 100>;
		default-brightness-level = <6>;
		status = "okay";
	};

	mipi_dsi_reset: mipi-dsi-reset {
		compatible = "gpio-reset";
		reset-gpios = <&gpio_ptc 19 GPIO_ACTIVE_LOW>;
		reset-delay-us = <1000>;
		#reset-cells = <0>;
	};

	modem_reset: modem-reset {
		compatible = "gpio-reset";
		reset-gpios = <&rpmsg_gpio0 15 GPIO_ACTIVE_LOW>;
		reset-delay-us = <1000>;
		#reset-cells = <0>;
	};

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

		reg_usb_otg1_vbus: regulator@0 {
			compatible = "regulator-fixed";
			reg = <0>;
			pinctrl-names = "default", "sleep";
			pinctrl-0 = <&pinctrl_usb_otg1>;
			pinctrl-1 = <&pinctrl_usb_otg1>;
			regulator-name = "usb_otg1_vbus";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio_ptc 0 GPIO_ACTIVE_HIGH>;
			enable-active-high;
		};

		reg_vsd_3v3: regulator@1 {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "VSD_3V3";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio_ptd 0 GPIO_ACTIVE_HIGH>;
			enable-active-high;
		};

		reg_sd1_vmmc: sd1_regulator {
			compatible = "regulator-fixed";
			regulator-name = "WLAN_EN";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&rpmsg_gpio0 14 GPIO_ACTIVE_HIGH>;
			off-on-delay = <20000>;
			startup-delay-us = <100>;
			enable-active-high;
		};
	};

	extcon_usb1: extcon_usb1 {
		compatible = "linux,extcon-usb-gpio";
		id-gpio = <&gpio_ptc 13 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default", "sleep";
		pinctrl-0 = <&pinctrl_extcon_usb1>;
		pinctrl-1 = <&pinctrl_extcon_usb1>;
	};

	pf1550-rpmsg {
		compatible = "fsl,pf1550-rpmsg";
		sw1_reg: SW1 {
				regulator-name = "SW1";
				regulator-min-microvolt = <600000>;
				regulator-max-microvolt = <1387500>;
				regulator-boot-on;
				regulator-always-on;
		};

		sw2_reg: SW2 {
				regulator-name = "SW2";
				regulator-min-microvolt = <600000>;
				regulator-max-microvolt = <1387500>;
				regulator-boot-on;
				regulator-always-on;
		};

		sw3_reg: SW3 {
				regulator-name = "SW3";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-boot-on;
				regulator-always-on;
		};

		vref_reg: VREFDDR {
				regulator-name = "VREFDDR";
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <1200000>;
				regulator-boot-on;
				regulator-always-on;
		};

		vldo1_reg: LDO1 {
				regulator-name = "LDO1";
				regulator-min-microvolt = <750000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
		};

		vldo2_reg: LDO2 {
				regulator-name = "LDO2";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
		};

		vldo3_reg: LDO3 {
				regulator-name = "LDO3";
				regulator-min-microvolt = <750000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
		};
	};

	rpmsg_i2s: rpmsg-i2s {
		compatible = "fsl,imx7ulp-rpmsg-i2s";
		/* the audio device index in m4 domain */
		fsl,audioindex = <0> ;
		status = "okay";
	};

	rpmsg_gpio0: rpmsg-gpio0 {
		compatible = "fsl,imx-rpmsg-gpio";
		port_idx = <0>;
		gpio-controller;
		#gpio-cells = <2>;
		#interrupt-cells = <2>;
		interrupt-controller;
		interrupt-parent = <&rpmsg_gpio0>;
		status = "okay";
	};

	rpmsg_gpio1: rpmsg-gpio1 {
		compatible = "fsl,imx-rpmsg-gpio";
		port_idx = <1>;
		gpio-controller;
		#gpio-cells = <2>;
		#interrupt-cells = <2>;
		interrupt-controller;
		interrupt-parent = <&rpmsg_gpio1>;
		status = "okay";
	};

	rpmsg_keys: rpmsg-keys {
		compatible = "fsl,rpmsg-keys";

		volume-up {
			label = "Volume Up";
			linux,code = <KEY_VOLUMEUP>;
		};

		volume-down {
			label = "Volume Down";
			linux,code = <KEY_VOLUMEDOWN>;
		};

		power-on {
			label = "PowerOn";
			linux,code = <KEY_POWER>;
			rpmsg-key,wakeup;
		};
	};

	rpmsg_sensor: rpmsg-sensor {
		compatible = "fsl,rpmsg-input";
	};

	sound-rpmsg {
		compatible = "fsl,imx-audio-rpmsg";
		model = "rpmsg-audio";
		cpu-dai = <&rpmsg_i2s>;
	};
};

&ahbbridge0 {
	/delete-node/ rpmsg;
	rpmsg: rpmsg{
		compatible = "fsl,imx7ulp-rpmsg";
		memory-region = <&rpmsg_reserved>;
		status = "disabled";
	};
};

&cpu0 {
	arm-supply= <&sw1_reg>;
};

&iomuxc1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hog_1>;

	bobsled {
		pinctrl_hog_1: hoggrp-1 {
			fsl,pins = <
				IMX7ULP_PAD_PTC1__PTC1		0x20000
			>;
		};

		pinctrl_pwm0: pwm0_grp {
			fsl,pins = <
				IMX7ULP_PAD_PTF2__TPM4_CH1	0x3
			>;
		};

		pinctrl_lpi2c5: lpi2c5grp {
			fsl,pins = <
				IMX7ULP_PAD_PTC4__LPI2C5_SCL       0x27
				IMX7ULP_PAD_PTC5__LPI2C5_SDA       0x27
			>;
		};

		pinctrl_mipi_dsi_reset: mipi_dsi_reset_grp {
			fsl,pins = <
				IMX7ULP_PAD_PTC19__PTC19	0x20003
			>;
		};

		pinctrl_lpuart4: lpuart4grp {
			fsl,pins = <
				IMX7ULP_PAD_PTC3__LPUART4_RX	0x3
				IMX7ULP_PAD_PTC2__LPUART4_TX	0x3
			>;
		};

		pinctrl_lpuart6: lpuart6grp {
			fsl,pins = <
				IMX7ULP_PAD_PTE10__LPUART6_TX	0x3
				IMX7ULP_PAD_PTE11__LPUART6_RX	0x3
				IMX7ULP_PAD_PTE9__LPUART6_RTS_B	0x3
				IMX7ULP_PAD_PTE8__LPUART6_CTS_B	0x3
				IMX7ULP_PAD_PTE7__PTE7		0x20000 /* BT_REG_ON */
			>;
		};

		pinctrl_lpuart7: lpuart7grp {
			fsl,pins = <
				IMX7ULP_PAD_PTF14__LPUART7_TX		0x3
				IMX7ULP_PAD_PTF15__LPUART7_RX		0x3
				IMX7ULP_PAD_PTF13__LPUART7_RTS_B	0x3
				IMX7ULP_PAD_PTF12__LPUART7_CTS_B	0x3
			>;
		};

		pinctrl_usdhc0: usdhc0grp {
			fsl,pins = <
				IMX7ULP_PAD_PTD1__SDHC0_CMD	0x43
				IMX7ULP_PAD_PTD2__SDHC0_CLK	0x10042
				IMX7ULP_PAD_PTD7__SDHC0_D3	0x43
				IMX7ULP_PAD_PTD8__SDHC0_D2	0x43
				IMX7ULP_PAD_PTD9__SDHC0_D1	0x43
				IMX7ULP_PAD_PTD10__SDHC0_D0	0x43
				IMX7ULP_PAD_PTC10__PTC10	0x10000		/* USDHC0 CD */
				IMX7ULP_PAD_PTD0__PTD0		0x20000		/* USDHC0 RST */
			>;
		};

		pinctrl_usdhc0_8bit: usdhc0grp_8bit {
			fsl,pins = <
				IMX7ULP_PAD_PTD1__SDHC0_CMD	0x43
				IMX7ULP_PAD_PTD2__SDHC0_CLK	0x10042
				IMX7ULP_PAD_PTD3__SDHC0_D7	0x43
				IMX7ULP_PAD_PTD4__SDHC0_D6	0x43
				IMX7ULP_PAD_PTD5__SDHC0_D5	0x43
				IMX7ULP_PAD_PTD6__SDHC0_D4	0x43
				IMX7ULP_PAD_PTD7__SDHC0_D3	0x43
				IMX7ULP_PAD_PTD8__SDHC0_D2	0x43
				IMX7ULP_PAD_PTD9__SDHC0_D1	0x43
				IMX7ULP_PAD_PTD10__SDHC0_D0	0x43
				IMX7ULP_PAD_PTD11__SDHC0_DQS	0x42
			>;
		};

		pinctrl_lpi2c7: lpi2c7grp {
			fsl,pins = <
				IMX7ULP_PAD_PTF12__LPI2C7_SCL	0x27
				IMX7ULP_PAD_PTF13__LPI2C7_SDA	0x27
			>;
		};

		pinctrl_lpspi3: lpspi3grp {
			fsl,pins = <
				IMX7ULP_PAD_PTF16__LPSPI3_SIN      0x0
				IMX7ULP_PAD_PTF17__LPSPI3_SOUT     0x0
				IMX7ULP_PAD_PTF18__LPSPI3_SCK      0x0
				IMX7ULP_PAD_PTF19__LPSPI3_PCS0     0x0
			>;
		};

		pinctrl_usb_otg1: usbotg1grp {
			fsl,pins = <
				IMX7ULP_PAD_PTC0__PTC0		0x20000
			>;
		};

		pinctrl_extcon_usb1: extcon1grp {
			fsl,pins = <
				IMX7ULP_PAD_PTC13__PTC13	0x10003
			>;
		};

		pinctrl_focaltech: focaltechgrp {
			fsl,pins = <
				IMX7ULP_PAD_PTF0__PTF0		0x10043
				IMX7ULP_PAD_PTF1__PTF1		0x20043
			>;
		};

		pinctrl_usdhc1: usdhc1grp {
			fsl,pins = <
				IMX7ULP_PAD_PTE3__SDHC1_CMD		0x43
				IMX7ULP_PAD_PTE2__SDHC1_CLK		0x10042
				IMX7ULP_PAD_PTE1__SDHC1_D0		0x43
				IMX7ULP_PAD_PTE0__SDHC1_D1		0x43
				IMX7ULP_PAD_PTE5__SDHC1_D2		0x43
				IMX7ULP_PAD_PTE4__SDHC1_D3		0x43
			>;
		};

		pinctrl_usdhc1_rst: usdhc1grp_rst {
			fsl,pins = <
				IMX7ULP_PAD_PTE11__PTE11		0x20000		/* USDHC1 RST */
				IMX7ULP_PAD_PTE13__PTE13		0x10003		/* USDHC1 CD */
				IMX7ULP_PAD_PTE12__PTE12		0x10003		/* USDHC1 WP */
				IMX7ULP_PAD_PTE14__SDHC1_VS		0x43		/* USDHC1 VSEL */
			>;
		};

		pinctrl_dsi_hdmi: dsi_hdmi_grp {
			fsl,pins = <
				IMX7ULP_PAD_PTC18__PTC18		0x10003		/* DSI_HDMI_INT */
			>;
		};
	};
};

&lcdif {
	status = "okay";
	disp-dev = "mipi_dsi_northwest";
	display = <&display0>;

	display0: display@0 {
		bits-per-pixel = <16>;
		bus-width = <24>;

		display-timings {
			native-mode = <&timing0>;
			timing0: timing0 {
			clock-frequency = <9200000>;
			hactive = <480>;
			vactive = <272>;
			hfront-porch = <8>;
			hback-porch = <4>;
			hsync-len = <41>;
			vback-porch = <2>;
			vfront-porch = <4>;
			vsync-len = <10>;

			hsync-active = <0>;
			vsync-active = <0>;
			de-active = <1>;
			pixelclk-active = <0>;
			};
		};
	};
};

&lpi2c7 {
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default",  "sleep";
	pinctrl-0 = <&pinctrl_lpi2c7 &pinctrl_focaltech>;
	pinctrl-1 = <&pinctrl_lpi2c7 &pinctrl_focaltech>;
	status = "okay";

	focaltech@38 {
		compatible = "focaltech,fts";
		reg = <0x38>;
		interrupt-parent = <&gpio_ptf>;
		interrupts = <0 0x02>;
		focaltech,panel-type = <FT5426>;
		focaltech,reset-gpio = <&gpio_ptf 1 0x01>;
		focaltech,irq-gpio = <&gpio_ptf 0 0x02>;
		focaltech,max-touch-number = <5>;
		focaltech,display-coords =  <0 0 480 854>;

		focaltech,have-key;
		focaltech,key-number = <3>;
		focaltech,keys = <139 102 158>;
		focaltech,key-y-coord = <2000>;
		focaltech,key-x-coords = <200 600 800>;
	};
};

&lpi2c5 {
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&pinctrl_lpi2c5>;
	pinctrl-1 = <&pinctrl_lpi2c5>;
	status = "okay";

	adv7535: adv7535@3d {
		compatible = "adi,adv7535";
		reg = <0x3d>; /* PD pin is low */
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_dsi_hdmi>;
		interrupt-parent = <&gpio_ptc>;
		interrupts = <18 IRQ_TYPE_EDGE_FALLING>;
		video-mode = <1>; /*
						   * Only support CEA modes.
						   * Reference mxc_edid.c
						   */
		dsi-traffic-mode = <0>;
		bpp = <24>;
		status = "disabled";
	};
};

&lpspi3 {
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&pinctrl_lpspi3>;
	pinctrl-1 = <&pinctrl_lpspi3>;
	status = "okay";

	spidev0: spi@0 {
		reg = <0>;
		compatible = "rohm,dh2228fv";
		spi-max-frequency = <1000000>;
	};
};


&adv7535 {
	status = "okay";

	port {
		dsi_to_hdmi: endpoint {
			remote-endpoint = <&mipi_dsi_ep>;
		};
	};
};

&mipi_dsi {
	status = "okay";

	port {
		mipi_dsi_ep: endpoint {
			remote-endpoint = <&dsi_to_hdmi>;
		};
	};
};

&lpuart4 { /* console */
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&pinctrl_lpuart4>;
	pinctrl-1 = <&pinctrl_lpuart4>;
	status = "okay";
};

&lpuart6 { /* BT */
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&pinctrl_lpuart6>;
	pinctrl-1 = <&pinctrl_lpuart6>;
	resets = <&modem_reset>;
	status = "okay";
};

&lpuart7 { /* Uart test */
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&pinctrl_lpuart7>;
	pinctrl-1 = <&pinctrl_lpuart7>;
	status = "disabled";
};

&pwm0 {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&pinctrl_pwm0>;
	pinctrl-1 = <&pinctrl_pwm0>;
	status = "okay";
};

&rpmsg{
	/*
	 * 64K for one rpmsg instance, default using 2 rpmsg instances:
	 * --0x67F00000~0x67F0FFFF: pmic,pm,audio,keys,gpio,sensor
	 * --0x67F10000~0x67F1FFFF: pingpong,virtual tty
	 */
	vdev-nums = <2>;
	reg = <0x67F00000 0x20000>;
	status = "okay";
};

&usbotg1 {
	vbus-supply = <&reg_usb_otg1_vbus>;
	extcon = <0>, <&extcon_usb1>;
	srp-disable;
	hnp-disable;
	adp-disable;
	status = "okay";
};

&usbphy1 {
	tx-d-cal = <0xc>;
};

/* To support eMMC HS200/HS400, need to do the following reowrk:
 * 1,remove TF sd slot, replace eMMC chip
 * 2,fix eMMC I/O voltage to 1.8v, remove R183, short TP3 and TP89
 * 3,add R107, make eMMC boot work
 */
&usdhc0 {
	pinctrl-names = "default", "state_100mhz", "state_200mhz", "sleep";
	pinctrl-0 = <&pinctrl_usdhc0_8bit>;
	pinctrl-1 = <&pinctrl_usdhc0_8bit>;
	pinctrl-2 = <&pinctrl_usdhc0_8bit>;
	pinctrl-3 = <&pinctrl_usdhc0_8bit>;
	non-removable;
	bus-width = <8>;
	status = "okay";
};

&usdhc1 {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&pinctrl_usdhc1>;
	pinctrl-1 = <&pinctrl_usdhc1>;
	bus-width = <4>;
	no-1-8-v;
	vmmc-supply = <&reg_sd1_vmmc>;
	pm-ignore-notify;
	keep-power-in-suspend;
	non-removable;
	status = "okay";
};
