/*
 * Copyright (c) 2018, NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <nxp/nxp_rt1060.dtsi>
#include "mimxrt1060_evk-pinctrl.dtsi"

/ {
	model = "NXP MIMXRT1060-EVK board";
	compatible = "nxp,mimxrt1062";

	aliases {
		led0 = &green_led;
		sw0 = &user_button;
		kscan0 = &touch_controller;
		watchdog0 = &wdog0;
	};

	chosen {
		zephyr,flash-controller = &is25wp064;
		zephyr,flash = &is25wp064;
		zephyr,code-partition = &slot0_partition;
		zephyr,sram = &sdram0;
		zephyr,itcm = &itcm;
		zephyr,dtcm = &dtcm;
		zephyr,console = &lpuart1;
		zephyr,shell-uart = &lpuart1;
		zephyr,canbus = &flexcan2;
		zephyr,display = &lcdif;
	};

	sdram0: memory@80000000 {
		/* Micron MT48LC16M16A2B4-6AIT:G */
		device_type = "memory";
		reg = <0x80000000 DT_SIZE_M(32)>;
	};

	leds {
		compatible = "gpio-leds";
		green_led: led-1 {
			gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
			label = "User LD1";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button: button-1 {
			label = "User SW8";
			gpios = <&gpio5 0 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
		};
	};

	arduino_header: connector {
		compatible = "arduino-header-r3";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;
		gpio-map = <0 0 &gpio1 26 0>,	/* A0 */
			   <1 0 &gpio1 27 0>,	/* A1 */
			   <2 0 &gpio1 20 0>,	/* A2 */
			   <3 0 &gpio1 21 0>,	/* A3 */
			   <4 0 &gpio1 17 0>,	/* A4 */
			   <5 0 &gpio1 16 0>,	/* A5 */
			   <6 0 &gpio1 23 0>,	/* D0 */
			   <7 0 &gpio1 22 0>,	/* D1 */
			   <8 0 &gpio1 11 0>,	/* D2 */
			   <9 0 &gpio1 24 0>,	/* D3 */
			   <10 0 &gpio1 9 0>,	/* D4 */
			   <11 0 &gpio1 10 0>,	/* D5 */
			   <12 0 &gpio1 18 0>,	/* D6 */
			   <13 0 &gpio1 19 0>,	/* D7 */
			   <14 0 &gpio1 3 0>,	/* D8 */
			   <15 0 &gpio1 2 0>,	/* D9 */
			   <16 0 &gpio3 13 0>,	/* D10 */
			   <17 0 &gpio3 14 0>,	/* D11 */
			   <18 0 &gpio3 15 0>,	/* D12 */
			   <19 0 &gpio3 12 0>,	/* D13 */
			   <20 0 &gpio1 17 0>,	/* D14 */
			   <21 0 &gpio1 16 0>;	/* D15 */
	};

	panel {
		compatible = "rocktech,rk043fn02h-ct";
		port {
			lcd_panel_in: endpoint {
				remote-endpoint = <&lcd_panel_out>;
			};
		};
	};
};

arduino_serial: &lpuart3 {
	pinctrl-0 = <&pinmux_lpuart3>;
	pinctrl-1 = <&pinmux_lpuart3_sleep>;
	pinctrl-names = "default", "sleep";
};

&flexspi {
	status = "okay";
	pinctrl-0 = <&pinmux_flexspi1>;
	pinctrl-names = "default";
	ahb-prefetch;
	ahb-read-addr-opt;
	rx-clock-source = <1>;
	reg = <0x402a8000 0x4000>, <0x60000000 DT_SIZE_M(8)>;
	is25wp064: is25wp064@0 {
		compatible = "nxp,imx-flexspi-nor";
		size = <67108864>;
		label = "IS25WP064";
		reg = <0>;
		spi-max-frequency = <133000000>;
		status = "okay";
		jedec-id = [9d 70 17];
		erase-block-size = <4096>;
		write-block-size = <1>;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			boot_partition: partition@0 {
				label = "mcuboot";
				reg = <0x00000000 DT_SIZE_K(64)>;
			};
			slot0_partition: partition@10000 {
				label = "image-0";
				reg = <0x00010000 DT_SIZE_M(3)>;
			};
			slot1_partition: partition@310000 {
				label = "image-1";
				reg = <0x00310000 DT_SIZE_M(3)>;
			};
			scratch_partition: partition@610000 {
				label = "image-scratch";
				reg = <0x00610000 DT_SIZE_K(128)>;
			};
			storage_partition: partition@630000 {
				label = "storage";
				reg = <0x00630000 DT_SIZE_K(1856)>;
			};
		};
	};
};

&lcdif {
	status = "okay";
	width = <480>;
	height = <272>;
	hsync = <41>;
	hfp = <4>;
	hbp = <8>;
	vsync = <10>;
	vfp = <4>;
	vbp = <2>;
	polarity = <3>;
	pixel-format = "bgr-565";
	data-buswidth = "16-bit";
	pinctrl-0 = <&pinmux_lcdif>;
	pinctrl-names = "default";
	backlight-gpios = <&gpio2 31 GPIO_ACTIVE_HIGH>;
	port {
		lcd_panel_out: endpoint {
			remote-endpoint = <&lcd_panel_in>;
		};
	};
};

&lpi2c1 {
	status = "okay";
	pinctrl-0 = <&pinmux_lpi2c1>;
	pinctrl-names = "default";

	touch_controller: ft5336@38 {
		compatible = "focaltech,ft5336";
		reg = <0x38>;
		label = "FT5336";
		int-gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
	};
};

&lpuart1 {
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&pinmux_lpuart1>;
	pinctrl-1 = <&pinmux_lpuart1_sleep>;
	pinctrl-names = "default", "sleep";
};

&enet {
	status = "okay";
	pinctrl-0 = <&pinmux_enet>;
	pinctrl-names = "default";
	int-gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
	reset-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>;
	ptp {
		pinctrl-0 = <&pinmux_ptp>;
		pinctrl-names = "default";
		status = "okay";
	};
};

&adc1 {
	status = "okay";
	pinctrl-0 = <&pinmux_adc1>;
	pinctrl-names = "default";
};

zephyr_udc0: &usb1 {
	status = "okay";
};

&usdhc1 {
	status = "okay";
	power-delay-ms = <1000>;
	pwr-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
	cd-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>;
	status = "okay";
	pinctrl-0 = <&pinmux_usdhc1>;
	pinctrl-1 = <&pinmux_usdhc1_slow>;
	pinctrl-2 = <&pinmux_usdhc1_med>;
	pinctrl-3 = <&pinmux_usdhc1_fast>;
	pinctrl-names = "default", "slow", "med", "fast";
	mmc {
		compatible = "zephyr,sdmmc-disk";
		status = "okay";
		label = "SDMMC_0";
	};
};

&edma0 {
	status = "okay";
};

&flexcan2 {
	status = "okay";
	bus-speed = <125000>;
	pinctrl-0 = <&pinmux_flexcan2>;
	pinctrl-names = "default";

	can-transceiver {
		max-bitrate = <5000000>;
	};
};

&wdog0 {
	status = "okay";
};

&lpspi1 {
	status = "okay";
	/* DMA channels 0 and 1, muxed to LPSPI1 RX and TX */
	dmas = <&edma0 0 13>, <&edma0 1 14>;
	dma-names = "rx", "tx";
	pinctrl-0 = <&pinmux_lpspi1>;
	pinctrl-names = "default";
};

&lpspi3 {
	status = "okay";
	/* DMA channels 2 and 3, muxed to LPSPI3 RX and TX */
	dmas = <&edma0 2 15>, <&edma0 3 16>;
	dma-names = "rx", "tx";
	pinctrl-0 = <&pinmux_lpspi3>;
	pinctrl-names = "default";

};

&sai1 {
	status = "okay";
	pinctrl-0 = <&pinmux_sai1>;
	pinctrl-names = "default";
};

/* Enable GPT for use as a hardware timer. This disables Cortex Systick.
 * to use systick, change this node from "gpt_hw_timer" to "systick"
 */
&gpt_hw_timer {
	status = "okay";
};

&iomuxcgpr {
	status = "okay";
};
