/*
 * Copyright (c) 2018 Prevas A/S
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <nxp/MK22FN512VLH12.dtsi>
#include <dt-bindings/pwm/pwm.h>

/ {
	model = "NXP Freedom MK22F board";
	compatible = "nxp,mk22f12", "nxp,k22f", "nxp,k2x";

	aliases {
		led0 = &green_led;
		led1 = &blue_led;
		led2 = &red_led;
		sw0 = &user_button_3;
		sw1 = &user_button_2;
		pwm-led0 = &green_pwm_led;
		green-pwm-led = &green_pwm_led;
		blue-pwm-led = &blue_pwm_led;
		red-pwm-led = &red_pwm_led;
	};

	chosen {
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,code-partition = &slot0_partition;
		zephyr,console = &uart1;
		zephyr,shell-uart = &uart1;
		zephyr,uart-pipe = &uart1;
	};

	leds {
		compatible = "gpio-leds";
		red_led: led_0 {
			gpios = <&gpioa 1 0>;
			label = "User LD1";
		};
		green_led: led_1 {
			gpios = <&gpioa 2 0>;
			label = "User LD2";
		};
		blue_led: led_2 {
			gpios = <&gpiod 5 0>;
			label = "User LD3";
		};
	};

	pwmleds {
		compatible = "pwm-leds";

		red_pwm_led: red_pwm_led {
			label = "red_led";
			pwms = <&ftm0 6 15625000 PWM_POLARITY_INVERTED>;
		};
		green_pwm_led: green_pwm_led {
			label = "green_led";
			pwms = <&ftm0 7 15625000 PWM_POLARITY_INVERTED>;
		};
		blue_pwm_led: blue_pwm_led {
			label = "blue_led";
			pwms = <&ftm0 5 15625000 PWM_POLARITY_INVERTED>;
		};
	};

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

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

&adc0 {
	status = "okay";
};

&dac0 {
	status = "okay";
	voltage-reference = <2>;
};
arduino_i2c: &i2c0 {
	status = "okay";
	pinctrl-0 = <&I2C0_SCL_PTB2 &I2C0_SDA_PTB3>;

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

&I2C0_SCL_PTB2 {
	drive-open-drain;
};

&I2C0_SDA_PTB3 {
	drive-open-drain;
};

arduino_spi: &spi0 {
	status = "okay";
	pinctrl-0 = <&SPI0_PCS4_PTC0 &SPI0_SCK_PTD1
		     &SPI0_SOUT_PTD2 &SPI0_SIN_PTD3>;
};

&ftm0 {
	status = "okay";
	compatible = "nxp,kinetis-ftm-pwm";
	#pwm-cells = <3>;
	pinctrl-0 = <&FTM0_CH6_PTA1 &FTM0_CH7_PTA2 &FTM0_CH5_PTD5>;
};

&uart1 {
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&UART1_RX_PTE1 &UART1_TX_PTE0>;
};

&uart2 {
	pinctrl-0 = <&UART2_RX_PTD2 &UART2_TX_PTD3>;
};

zephyr_udc0: &usbotg {
	compatible = "nxp,kinetis-usbd";
	status = "okay";
	num-bidir-endpoints = <8>;
};

&gpioa {
	status = "okay";
};

&gpiob {
	status = "okay";
};

&gpioc {
	status = "okay";
};

&gpiod {
	status = "okay";
};

&gpioe {
	status = "okay";
};

&flash0 {
	/*
	 * For more information, see:
	 * https://docs.zephyrproject.org/latest/reference/devicetree/index.html#fixed-flash-partitions
	 */
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x00010000>;
			read-only;
		};
		slot0_partition: partition@10000 {
			label = "image-0";
			reg = <0x00010000 0x00020000>;
		};
		slot1_partition: partition@30000 {
			label = "image-1";
			reg = <0x00030000 0x00020000>;
		};
		scratch_partition: partition@50000 {
			label = "image-scratch";
			reg = <0x00050000 0x00010000>;
		};

		/*
		 * The flash starting at 0x00060000 and ending at
		 * 0x0007ffff (sectors 16-31) is reserved for use
		 * by the application.
		 */
		storage_partition: partition@60000 {
			label = "storage";
			reg = <0x00060000 0x00020000>;
		};

	};
};
