/*
 * Copyright (c) 2019 SEAL AG
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <mem.h>
#include <nxp/nxp_k82fn256vxx15.dtsi>
#include <zephyr/dt-bindings/pwm/pwm.h>
#include "frdm_k82f-pinctrl.dtsi"

/ {
	model = "NXP Kinetis K82 Freedom Board";
	compatible = "nxp,mk82f25615", "nxp,k82f", "nxp,k8x";

	aliases {
		led0 = &red_led;
		led1 = &green_led;
		led2 = &blue_led;
		pwm-led0 = &red_pwm_led;
		pwm-led1 = &green_pwm_led;
		pwm-led2 = &blue_pwm_led;
		sw0 = &user_button_0;
		sw1 = &user_button_1;
	};

	chosen {
		/*
		 * Note: when using DMA, the SRAM region must be set to
		 * a memory region that is not cached by the chip. If the chosen
		 * sram region is changed and DMA is in use, you will
		 * encounter issues!
		 */
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
		zephyr,console = &lpuart4;
		zephyr,shell-uart = &lpuart4;
		zephyr,uart-pipe = &lpuart4;
	};

	leds {
		compatible = "gpio-leds";
		red_led: led_0 {
			gpios = <&gpioc 8 0>;
			label = "User LED D3 Red";
		};
		green_led: led_1 {
			gpios = <&gpioc 9 0>;
			label = "User LED D3 Green";
		};
		blue_led: led_2 {
			gpios = <&gpioc 10 0>;
			label = "User LED D3 Blue";
		};
	};

	pwmleds {
		compatible = "pwm-leds";

		red_pwm_led: red_pwm_led {
			pwms = <&ftm3 4 15625000 PWM_POLARITY_INVERTED>;
		};
		green_pwm_led: green_pwm_led {
			pwms = <&ftm3 5 15625000 PWM_POLARITY_INVERTED>;
		};
		blue_pwm_led: blue_pwm_led {
			pwms = <&ftm3 6 15625000 PWM_POLARITY_INVERTED>;
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button_0: button_0 {
			label = "User SW2";
			gpios = <&gpioa 4 GPIO_ACTIVE_LOW>;
		};
		user_button_1: button_1 {
			label = "User SW3";
			gpios = <&gpioc 6 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 &gpiob 0 0>,	/* A0 */
			   <1 0 &gpiob 1 0>,	/* A1 */
			   <2 0 &gpioc 1 0>,	/* A2 */
			   <3 0 &gpioc 2 0>,	/* A3 */
			   <4 0 &gpiob 3 0>,	/* A4 */
			   <5 0 &gpiob 2 0>,	/* A5 */
			   <6 0 &gpiob 16 0>,	/* D0 */
			   <7 0 &gpiob 17 0>,	/* D1 */
			   <8 0 &gpioc 12 0>,	/* D2 */
			   <9 0 &gpiod 0 0>,	/* D3 */
			   <10 0 &gpioc 11 0>,	/* D4 */
			   <11 0 &gpioc 10 0>,	/* D5 */
			   <12 0 &gpioc 8 0>,	/* D6 */
			   <13 0 &gpioc 9 0>,	/* D7 */
			   <14 0 &gpioc 3 0>,	/* D8 */
			   <15 0 &gpioc 5 0>,	/* D9 */
			   <16 0 &gpiod 4 0>,	/* D10 */
			   <17 0 &gpiod 2 0>,	/* D11 */
			   <18 0 &gpiod 3 0>,	/* D12 */
			   <19 0 &gpiod 1 0>,	/* D13 */
			   <20 0 &gpioa 1 0>,	/* D14 */
			   <21 0 &gpioa 2 0>;	/* D15 */
	};
};

&sim {
	pllfll-select = <KINETIS_SIM_PLLFLLSEL_MCGPLLCLK>;
	er32k-select = <KINETIS_SIM_ER32KSEL_OSC32KCLK>;
};

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

&gpioa {
	status = "okay";
};

&gpiob {
	status = "okay";
};

&gpioc {
	status = "okay";
};

&gpiod {
	status = "okay";
};

&gpioe {
	status = "okay";
};

&flash0 {

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

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x0 DT_SIZE_K(48)>;
		};
		storage_partition: partition@c000 {
			label = "storage";
			reg = <0xc000 DT_SIZE_K(32)>;
		};
		slot0_partition: partition@14000 {
			label = "image-0";
			reg = <0x14000 DT_SIZE_K(80)>;
		};
		slot1_partition: partition@28000 {
			label = "image-1";
			reg = <0x28000 DT_SIZE_K(80)>;
		};
		scratch_partition: partition@3c000 {
			label = "image-scratch";
			reg = <0x3c000 DT_SIZE_K(16)>;
		};
	};
};

&i2c3 {
	status = "okay";
	pinctrl-0 = <&i2c3_default>;
	pinctrl-names = "default";

	fxos8700@1c {
		compatible = "nxp,fxos8700";
		reg = <0x1c>;
		label = "FXOS8700";
		int1-gpios = <&gpioc 13 GPIO_ACTIVE_LOW>;
	};
};

&lpuart4 {
	status = "okay";
	pinctrl-0 = <&lpuart4_default>;
	pinctrl-names = "default";
	current-speed = <115200>;
};

&lpuart0 {
	pinctrl-0 = <&lpuart0_default>;
	pinctrl-names = "default";
};

&ftm3 {
	status = "okay";
	compatible = "nxp,kinetis-ftm-pwm";
	#pwm-cells = <3>;
	pinctrl-0 = <&ftm3_default>;
	pinctrl-names = "default";
};

&spi1 {
	status = "okay";

	pinctrl-0 = <&spi1_default>;
	pinctrl-names = "default";

	mx25u32: mx25u3235f@0 {
		compatible = "jedec,spi-nor";
		label = "MX25U3235F";
		reg = <0>;
		spi-max-frequency = <104000000>;
		wp-gpios = <&gpioe 3 0>;
		reset-gpios = <&gpioe 0 0>;
		size = <0x2000000>;
		jedec-id = [c2 25 36];
	};
};

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

&edma0 {
	status = "okay";
};

&adc0 {
	status = "okay";
};

&pit0 {
	status = "okay";
};

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

arduino_spi: &spi0 {
	status = "okay";
	pinctrl-0 = <&spi0_default>;
	pinctrl-names = "default";
};
