/*
 * Copyright (c) 2023 TiaC Systems
 * Copyright (c) 2019, NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <nxp/nxp_rt1010.dtsi>
#include "mimxrt1010_evk-pinctrl.dtsi"

/ {
	model = "NXP MIMXRT1010-EVK board";
	compatible = "nxp,mimxrt1010";

	aliases {
		led0 = &green_led;
		sw0 = &user_button;
	};

	chosen {
		zephyr,sram = &ocram;
		zephyr,itcm = &itcm;
		zephyr,console = &lpuart1;
		zephyr,shell-uart = &lpuart1;
		zephyr,flash = &at25sf128a;
	};

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

	gpio_keys {
		compatible = "gpio-keys";
		user_button: button-1 {
			label = "User SW4";
			gpios = <&gpio2 5 (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 21 0>,	/* A0 */
			   <1 0 &gpio1 23 0>,	/* A1 */
			   <2 0 &gpio1 24 0>,	/* A2 */
			   <3 0 &gpio1 28 0>,	/* A3 */
			   <4 0 &gpio1 15 0>,	/* A4 (shared with D6) */
			   <5 0 &gpio1 16 0>,	/* A5 (shared with D7) */
			   <6 0 &gpio1 9 0>,	/* D0 */
			   <7 0 &gpio1 10 0>,	/* D1 */
			   <8 0 &gpio1 19 0>,	/* D2 (shared with D10) */
			   <9 0 &gpio1 20 0>,	/* D3 (shared with D13) */
			   /* R800 not populated,  D4 */
			   /* R793 not populated,  D5 (shared with D14) */
			   <12 0 &gpio1 15 0>,	/* D6 (shared with A4) */
			   <13 0 &gpio1 16 0>,	/* D7 (shared with A5) */
			   <14 0 &gpio2 2 0>,	/* D8 */
			   /* R795 not populated,  D9 */
			   <16 0 &gpio1 19 0>,	/* D10 (shared with D2) */
			   <17 0 &gpio1 18 0>,	/* D11 */
			   <18 0 &gpio1 17 0>,	/* D12 */
			   <19 0 &gpio1 20 0>,	/* D13 (shared with D3) */
			   <20 0 &gpio1 1 0>,	/* D14 */
			   <21 0 &gpio1 2 0>;	/* D15 */
	};
};

arduino_serial: &lpuart1 {};

&lpuart4 {
	pinctrl-0 = <&pinmux_lpuart4>;
	pinctrl-1 = <&pinmux_lpuart4_sleep>;
	pinctrl-names = "default", "sleep";
};

&flexspi {
	reg = <0x400a0000 0x4000>, <0x60000000 DT_SIZE_M(16)>;
	at25sf128a: at25sf128a@0 {
		compatible = "nxp,imx-flexspi-nor";
		size = <134217728>;
		reg = <0>;
		spi-max-frequency = <133000000>;
		status = "okay";
		jedec-id = [1f 89 01];
	};
};

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

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

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

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

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

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

&edma0 {
	status = "okay";
};

/* GPT and Systick are enabled. If power management is enabled, the GPT
 * timer will be used instead of systick, as allows the core clock to
 * be gated.
 */
&gpt_hw_timer {
	status = "okay";
};

&systick {
	status = "okay";
};
