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

/dts-v1/;

#include <nxp/nxp_rt1064.dtsi>
#include "mimxrt1064_evk-pinctrl.dtsi"

/ {
	model = "NXP MIMXRT1064-EVK board";
	compatible = "nxp,mimxrt1064";

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

	chosen {
		zephyr,flash-controller = &is25wp064;
		zephyr,flash = &w25q32jvwj0;
		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";
		};
	};

	pwmleds {
		compatible = "pwm-leds";

		green_pwm_led: green_pwm_led {
			pwms = <&flexpwm2_pwm3 0 PWM_MSEC(20)>;
		};
	};

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

	power-states {
		idle: idle {
			compatible = "zephyr,power-state";
			power-state-name = "runtime-idle";
			exit-latency-us = <4000>;
			min-residency-us = <5000>;
		};
		suspend: suspend {
			compatible = "zephyr,power-state";
			power-state-name = "suspend-to-idle";
			exit-latency-us = <5000>;
			min-residency-us = <10000>;
		};
	};
};

&cpu0 {
	cpu-power-states = <&idle &suspend>;
};

arduino_i2c: &lpi2c1 {};

&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";

	mt9m114@48 {
		compatible = "aptina,mt9m114";
		reg = <0x48>;
		label = "MT9M114";
		status = "okay";

		port {
			mt9m114_ep_out: endpoint {
				remote-endpoint = <&csi_ep_in>;
			};
		};
	};

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

&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];

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

			storage_partition: partition@0 {
				label = "storage";
				reg = <0x00000000 DT_SIZE_M(8)>;
			};
		};
	};
};

&flexspi2 {
	status = "okay";
};

&w25q32jvwj0 {
	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_K(1984)>;
		};
		slot1_partition: partition@200000 {
			label = "image-1";
			reg = <0x00200000 DT_SIZE_K(1984)>;
		};
		scratch_partition: partition@3f0000 {
			label = "image-scratch";
			reg = <0x003f0000 DT_SIZE_K(64)>;
		};
	};
};

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

arduino_serial: &lpuart3 {
	current-speed = <115200>;
	pinctrl-0 = <&pinmux_lpuart3>;
	pinctrl-1 = <&pinmux_lpuart3_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";
	};
};

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

&csi {
	status = "okay";
	sensor-label = "MT9M114";
	pinctrl-0 = <&pinmux_csi>;
	pinctrl-names = "default";

	port {
		csi_ep_in: endpoint {
			remote-endpoint = <&mt9m114_ep_out>;
		};
	};
};

&flexpwm2_pwm3 {
	status = "okay";
	pinctrl-0 = <&pinmux_flexpwm2>;
	pinctrl-names = "default";
};

&usdhc1 {
	status = "okay";
	pwr-gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
	cd-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>;
	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";
	};
};

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

&adc1 {
	status = "okay";
	pinctrl-0 = <&pinmux_adc1>;
	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";
};
