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

/dts-v1/;

#include <mem.h>
#include <nxp/nxp_k82fn256vxx15.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 {
		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 = <&pwm3 4 15625000>;
		};
		green_pwm_led: green_pwm_led {
			pwms = <&pwm3 5 15625000>;
		};
		blue_pwm_led: blue_pwm_led {
			pwms = <&pwm3 6 15625000>;
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button_0: button_0 {
			label = "User SW2";
			gpios = <&gpioa 4 GPIO_INT_ACTIVE_LOW>;
		};
		user_button_1: button_1 {
			label = "User SW3";
			gpios = <&gpioc 6 GPIO_INT_ACTIVE_LOW>;
		};
	};
};

&flash0 {
	/*
	 * For more information, see:
	 * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions
	 */
	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";

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

&lpuart4 {
	status = "okay";
	current-speed = <115200>;
};

&pwm3 {
	status = "okay";
};

&spi1 {
	status = "okay";

	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>;
		has-be32k;
		jedec-id = [c2 25 36];
	};
};

&usbd {
	status = "okay";
};
