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

/dts-v1/;

#include <nxp/nxp_lpc55S36_ns.dtsi>
#include "lpcxpresso55s36-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "NXP LPCXpresso55S36 board";
	compatible = "nxp,lpc55xxx", "nxp,lpc";

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

	aliases{
		led0 = &red_led;
		led1 = &green_led;
		led2 = &blue_led;
		sw0 = &btn_wk;
		sw1 = &btn_usr;
		usart-0 = &flexcomm0;
		pwm-0 = &flexpwm1_pwm0;
	};

	leds {
		compatible = "gpio-leds";
		red_led: led_0 {
			gpios = <&gpio1 28 0>;
			label = "Red LED";
		};
		green_led: led_1 {
			gpios = <&gpio0 22 0>;
			label = "Green LED";
		};
		blue_led: led_2 {
			gpios = <&gpio1 11 0>;
			label = "Blue LED";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		btn_wk: button_0 {
			label = "Wakeup button";
			gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
			zephyr,code = <INPUT_KEY_WAKEUP>;
		};
		btn_usr: button_1 {
			label = "USR button";
			gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
			zephyr,code = <INPUT_KEY_0>;
		};
	};

	mikrobus_header: mikrobus-connector {
		compatible = "mikro-bus";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;
		gpio-map =	<0 0 &gpio1 9 0>,	/* AN  */
				/* Not a GPIO*/		/* RST */
				<2 0 &gpio0 20 0>,	/* CS   */
				<3 0 &gpio1 2 0>,	/* SCK  */
				<4 0 &gpio1 3 0>,	/* MISO */
				<5 0 &gpio0 26 0>,	/* MOSI */
							/* +3.3V */
							/* GND */
				<6 0 &gpio1 8 0>,	/* PWM  */
				<7 0 &gpio0 17 0>,	/* INT  */
				<8 0 &gpio1 24 0>,	/* RX   */
				<9 0 &gpio1 25 0>,	/* TX   */
				<10 0 &gpio1 30 0>,	/* SCL  */
				<11 0 &gpio1 21 0>;	/* SDA  */
							/* +5V */
							/* GND */
	};

	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 15 0>,	/* A0 */
				<1 0 &gpio0 16 0>,	/* A1 */
				<2 0 &gpio0 0 0>,	/* A2 */
				<3 0 &gpio1 13 0>,	/* A3 */
				<4 0 &gpio1 21 0>,	/* A4 */
				<5 0 &gpio1 30 0>,	/* A5 */
				<6 0 &gpio2 0 0>,	/* D0 */
				<7 0 &gpio2 1 0>,	/* D1 */
				<8 0 &gpio1 26 0>,	/* D2 */
				<9 0 &gpio1 23 0>,	/* D3 */
				<10 0 &gpio1 8 0>,	/* D4 */
				<11 0 &gpio1 25 0>,	/* D5 */
				<12 0 &gpio1 0 0>,	/* D6 */
				<13 0 &gpio1 28 0>,	/* D7 */
				<14 0 &gpio1 27 0>,	/* D8 */
				<15 0 &gpio1 29 0>,	/* D9 */
				<16 0 &gpio1 26 0>,	/* D10 */
				<17 0 &gpio0 26 0>,	/* D11 */
				<18 0 &gpio1 3 0>,	/* D12 */
				<19 0 &gpio1 2 0>,	/* D13 */
				<20 0 &gpio0 3 0>,	/* D14 */
				<21 0 &gpio0 2 0>;	/* D15 */
	};
};

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

&can0 {
	bus-speed = <125000>;
	bus-speed-data = <1000000>;
	pinctrl-0 = <&pinmux_mcan_can0>;
	pinctrl-names = "default";
	status = "okay";

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

&adc0 {
	status = "okay";
	pinctrl-0 = <&pinmux_lpadc0>;
	pinctrl-names = "default";
};

/* Flash is divided into 32 kB sub-regions.
 * Each sub-region can be assigned individual
 * security tier in secure AHB controller.
 */
&flash0 {
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;
		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x0 DT_SIZE_K(32)>;
		};
		slot0_partition: partition@8000 {
			label = "image-0";
			reg = <0x00008000 DT_SIZE_K(96)>;
		};
		slot1_partition: partition@20000 {
			label = "image-1";
			reg = <0x00020000 DT_SIZE_K(96)>;
		};
		storage_partition: partition@38000 {
			label = "storage";
			reg = <0x00038000 DT_SIZE_K(20)>;
		};
		/* The last 12KB are reserved for PFR on the 256KB flash.
		 */
	};
};

&flexpwm1_pwm0 {
	status = "okay";
	pinctrl-0 = <&pinmux_flexpwm1_pwm0>;
	pinctrl-names = "default";
};

zephyr_udc0: &usbfs {
	status = "okay";
	pinctrl-0 = <&pinmux_usbfs>;
	pinctrl-names = "default";
};

&dma0 {
	status = "okay";
};

&vref0 {
	status = "okay";
};

&dac0 {
	status = "okay";
	pinctrl-0 = <&pinmux_dac0>;
	pinctrl-names = "default";
};
