/* SPDX-License-Identifier: Apache-2.0 */

/dts-v1/;

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

/ {
	model = "NXP Freedom MK64F board";
	compatible = "nxp,mk64f12", "nxp,k64f", "nxp,k6x";

	aliases {
		led0 = &green_led;
		led1 = &blue_led;
		led2 = &red_led;
		sw0 = &user_button_3;
		sw1 = &user_button_2;
		magn0 = &fxos8700;
		accel0 = &fxos8700;
	};

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

	leds {
		compatible = "gpio-leds";
		red_led: led_0 {
			gpios = <&gpiob 22 GPIO_ACTIVE_LOW>;
			label = "User LD1";
		};
		green_led: led_1 {
			gpios = <&gpioe 26 GPIO_ACTIVE_LOW>;
			label = "User LD2";
		};
		blue_led: led_2 {
			gpios = <&gpiob 21 GPIO_ACTIVE_LOW>;
			label = "User LD3";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button_2: button_0 {
			label = "User SW2";
			gpios = <&gpioc 6 GPIO_ACTIVE_LOW>;
			zephyr,code = <INPUT_KEY_0>;
		};
		user_button_3: button_1 {
			label = "User SW3";
			gpios = <&gpioa 4 GPIO_ACTIVE_LOW>;
			zephyr,code = <INPUT_KEY_1>;
		};
	};

	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 2 0>,	/* A0 */
			   <1 0 &gpiob 3 0>,	/* A1 */
			   <2 0 &gpiob 10 0>,	/* A2 */
			   <3 0 &gpiob 11 0>,	/* A3 */
			   <4 0 &gpioc 11 0>,	/* A4 */
			   <5 0 &gpioc 10 0>,	/* A5 */
			   <6 0 &gpioc 16 0>,	/* D0 */
			   <7 0 &gpioc 17 0>,	/* D1 */
			   <8 0 &gpiob 9 0>,	/* D2 */
			   <9 0 &gpioa 1 0>,	/* D3 */
			   <10 0 &gpiob 23 0>,	/* D4 */
			   <11 0 &gpioa 2 0>,	/* D5 */
			   <12 0 &gpioc 2 0>,	/* D6 */
			   <13 0 &gpioc 3 0>,	/* D7 */
			   /* NOTE: HW Rev D and below use: */
			   /* <14 0 &gpioa 0 0>, */
			   /* NOTE: HW Rev E and on use: */
			   <14 0 &gpioc 12 0>,	/* D8 */
			   <15 0 &gpioc 4 0>,	/* D9 */
			   <16 0 &gpiod 0 0>,	/* D10 */
			   <17 0 &gpiod 2 0>,	/* D11 */
			   <18 0 &gpiod 3 0>,	/* D12 */
			   <19 0 &gpiod 1 0>,	/* D13 */
			   <20 0 &gpioe 25 0>,	/* D14 */
			   <21 0 &gpioe 24 0>;	/* D15 */
	};
};

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

arduino_serial: &uart3 {
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&uart3_default>;
	pinctrl-names = "default";
};

&cpu0 {
	clock-frequency = <120000000>;
};

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

&adc1 {
	status = "okay";
	pinctrl-0 = <&adc1_default>;
	pinctrl-names = "default";
};

&temp1 {
	status = "okay";
};

&dac0 {
	status = "okay";
	voltage-reference = <2>;
};

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

	fxos8700: fxos8700@1d {
		compatible = "nxp,fxos8700";
		reg = <0x1d>;
		int1-gpios = <&gpioc 6 GPIO_ACTIVE_LOW>;
		int2-gpios = <&gpioc 13 GPIO_ACTIVE_LOW>;
	};
};

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

&spi1 {
	status = "okay";
	pinctrl-0 = <&spi1_default>;
	pinctrl-names = "default";
	cs-gpios = <&gpioe 4 GPIO_ACTIVE_LOW>;

	sdhc0: sdhc@0 {
		compatible = "zephyr,sdhc-spi-slot";
		reg = <0>;
		status = "okay";
		sdmmc {
			compatible = "zephyr,sdmmc-disk";
			status = "okay";
		};
		spi-max-frequency = <24000000>;
	};
};

&ftm0 {
	status = "okay";
	compatible = "nxp,kinetis-ftm-pwm";
	#pwm-cells = <3>;
	pinctrl-0 = <&ftm0_default>;
	pinctrl-names = "default";
	clock-source = "fixed";
};

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

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

&uart2 {
	pinctrl-0 = <&uart2_default>;
	pinctrl-names = "default";
};

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 {

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

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0x00010000>;
			read-only;
		};
		/* Note slot 0 has one additional sector,
		 * this is intended for use with the swap move algorithm
		 */
		slot0_partition: partition@10000 {
			label = "image-0";
			reg = <0x00010000 0x00069000>;
		};
		slot1_partition: partition@79000 {
			label = "image-1";
			reg = <0x00079000 0x00068000>;
		};
		storage_partition: partition@e1000 {
			label = "storage";
			reg = <0x000e1000 0x0001f000>;
		};
	};
};

&enet_mac {
	status = "okay";
	pinctrl-0 = <&pinmux_enet>;
	pinctrl-names = "default";
	phy-handle = <&phy>;
	zephyr,random-mac-address;
	phy-connection-type = "rmii";
};


&enet_mdio {
	status = "okay";
	pinctrl-0 = <&pinmux_enet_mdio>;
	pinctrl-names = "default";
	phy: phy@0 {
		compatible = "microchip,ksz8081";
		reg = <0>;
		status = "okay";
		mc,interface-type = "rmii-25MHz";
	};
};

&enet_ptp_clock {
	status = "okay";
	pinctrl-0 = <&pinmux_ptp>;
	pinctrl-names = "default";
};

&flexcan0 {
	status = "okay";
	pinctrl-0 = <&flexcan0_default>;
	pinctrl-names = "default";
	bus-speed = <125000>;
};

&edma0 {
	status = "okay";
};

&pit0 {
	status = "okay";
};
