/*
 * Copyright 2022, NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <nxp/nxp_rt5xx.dtsi>
#include <zephyr/dt-bindings/regulator/pca9420.h>

#include "mimxrt595_evk_cm33-pinctrl.dtsi"

/ {
	model = "NXP MIMXRT595-EVK board";
	compatible = "nxp,mimxrt595";

	aliases {
		sw0 = &user_button_1;
		sw1 = &user_button_2;
		led0 = &green_led;
		led1 = &blue_led;
		led2 = &red_led;
		usart-0 = &flexcomm0;
		watchdog0 = &wwdt0;
		magn0 = &fxos8700;
		accel0 = &fxos8700;
	};

	chosen {
		zephyr,flash-controller = &mx25um51345g;
		zephyr,flash = &mx25um51345g;
		zephyr,code-partition = &slot0_partition;
		zephyr,sram = &sram0;
		zephyr,console = &flexcomm0;
		zephyr,shell-uart = &flexcomm0;
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button_1: button_0 {
			label = "User SW1";
			gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
		};
		user_button_2: button_1 {
			label = "User SW2";
			gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
		};
	};

	leds {
		compatible = "gpio-leds";
		green_led: led_1 {
			gpios = <&gpio1 0 0>;
			label = "User LED_GREEN";
		};
		blue_led: led_2 {
			gpios = <&gpio3 17 0>;
			label = "User LED_BLUE";
		};
		red_led: led_3 {
			gpios = <&gpio0 14 0>;
			label = "User LED_RED";
		};
	};

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

/*
 * RT595 EVK board uses OS timer as the kernel timer
 * In case we need to switch to SYSTICK timer, then
 * replace &os_timer with &systick
 */
&os_timer {
	status = "okay";
};

&rtc {
	status = "okay";
};

&flexcomm0 {
	compatible = "nxp,lpc-usart";
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&pinmux_flexcomm0_usart>;
	pinctrl-names = "default";
};

arduino_i2c: &flexcomm4 {
	compatible = "nxp,lpc-i2c";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-0 = <&pinmux_flexcomm4_i2c>;
	pinctrl-names = "default";

	fxos8700: fxos8700@1e {
		compatible = "nxp,fxos8700";
		reg = <0x1e>;
		int1-gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
		reset-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
	};
};

hs_spi1: &hs_lspi1 {
	compatible = "nxp,lpc-spi";
	pinctrl-0 = <&pinmux_flexcomm16_spi>;
	pinctrl-names = "default";
	dmas = <&dma0 28>, <&dma0 29>;
	dma-names = "rx", "tx";
	status = "okay";
};

arduino_serial: &flexcomm12 {
	compatible = "nxp,lpc-usart";
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&pinmux_flexcomm12_usart>;
	pinctrl-names = "default";
};

/* PCA9420 PMIC */
&pmic_i2c {
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-0 = <&pinmux_pmic_i2c>;
	pinctrl-names = "default";

	pca9420: pca9420@61 {
		reg = <0x61>;
		compatible = "nxp,pca9420";
		/*
		 * This mode-reg setting will permit mode control by
		 * pins, a feature of the PCA9240. If mode control via
		 * I2C is desired, the following settings
		 * should be used:
		 * regulator-initial-mode = <PCA9420_MODECFG0_I2C>;
		 * regulator-allowed-modes = <PCA9420_MODECFG0_I2C>,
		 *			<PCA9420_MODECFG1_I2C>,
		 *			<PCA9420_MODECFG2_I2C>,
		 *			<PCA9420_MODECFG3_I2C>;
		 * modesel-reg = <PCA9420_TOP_CNTL3>;
		 * modesel-mask = <PCA9420_TOP_CNTL3_MODE_I2C_MASK>;
		 */
		regulator-allowed-modes = <PCA9420_MODECFG0_PIN>,
					<PCA9420_MODECFG1_PIN>,
					<PCA9420_MODECFG2_PIN>,
					<PCA9420_MODECFG3_PIN>;
		regulator-initial-mode = <PCA9420_MODECFG0_PIN>;
		modesel-reg = <PCA9420_MODECFG_0_0>;
		modesel-mask = <PCA9420_MODECFG_0_MODE_CTRL_SEL_MASK>;
		BUCK1 {
			regulator-min-microvolt = <500000>;
			regulator-max-microvolt = <1800000>;
			regulator-max-microamp = <250000>;
			regulator-boot-on;
		};

		BUCK2 {
			regulator-min-microvolt = <1500000>;
			regulator-max-microvolt = <3300000>;
			regulator-max-microamp = <500000>;
			regulator-boot-on;
		};

		LDO1 {
			regulator-min-microvolt = <1700000>;
			regulator-max-microvolt = <1900000>;
			regulator-max-microamp = <1000>;
			regulator-boot-on;
		};

		LDO2 {
			regulator-min-microvolt = <1500000>;
			regulator-max-microvolt = <3300000>;
			regulator-max-microamp = <250000>;
			regulator-boot-on;
		};


	};
};


&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&gpio2 {
	status = "okay";
};

&gpio3 {
	status = "okay";
};

&gpio4 {
	status = "okay";
};

&gpio5 {
	status = "okay";
};

&gpio6 {
	status = "okay";
};

&user_button_1 {
	status = "okay";
};

&user_button_2 {
	status = "okay";
};

&green_led {
	status = "okay";
};

&blue_led {
	status = "okay";
};

&red_led {
	status = "okay";
};

&dma0 {
	/*
	 * The total number of dma channels available is defined by
	 * FSL_FEATURE_DMA_NUMBER_OF_CHANNELS in the SoC features file.
	 * Since memory from the heap pool is allocated based on the number
	 * of DMA channels, set this property to as many channels is needed
	 * for the platform. Adjust HEAP_MEM_POOL_SIZE in case you need more
	 * memory.
	 */
	dma-channels = <37>;
	status = "okay";
};

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

&ctimer0 {
	status = "okay";
};

&ctimer1 {
	status = "okay";
};

&ctimer2 {
	status = "okay";
};

&ctimer3 {
	status = "okay";
};

&ctimer4 {
	status = "okay";
};

&wwdt0 {
	status = "okay";
};

&flexspi {
	status = "okay";
	mx25um51345g: mx25um51345g@0 {
		compatible = "nxp,imx-flexspi-mx25um51345g";
		/* MX25UM51245G is 64MB, 512MBit flash part */
		size = <DT_SIZE_M(64 * 8)>;
		reg = <0>;
		spi-max-frequency = <200000000>;
		status = "okay";
		jedec-id = [c2 81 3a];
		erase-block-size = <4096>;
		/*
		 * Note- ECC will be disabled with a
		 * write block size of 1 byte. To enable ECC, ensure
		 * writes are in multiples of 16 bytes. This reduced
		 * block size is required for MCUBoot support.
		 */
		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(24)>;
			};
			slot1_partition: partition@1810000 {
				label = "image-1";
				reg = <0x01810000 DT_SIZE_M(24)>;
			};
			scratch_partition: partition@3010000 {
				label = "image-scratch";
				reg = <0x03010000 DT_SIZE_K(8128)>;
			};
			storage_partition: partition@3f00000 {
				label = "storage";
				reg = <0x03f00000 DT_SIZE_M(1)>;
			};
		};
	};
};
