/*
 * Copyright (c) 2021, Electromaticus LLC, 2022 NXP
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <nxp/nxp_k66.dtsi>
#include <zephyr/dt-bindings/pwm/pwm.h>
#include "rddrone_fmuk66-pinctrl.dtsi"
#include <freq.h>

/ {
	model = "NXP RDDRONE FMUK66 board";
	compatible = "nxp,mk66f18", "nxp,k66f", "nxp,k6x";

	aliases {
		led0 = &amber_led;
		led1 = &green_led;
		pwm-led0 = &red_pwm_led;
		pwm-led1 = &green_pwm_led;
		pwm-led2 = &blue_pwm_led;
		magn0 = &bmm150;
		red-pwm-led = &red_pwm_led;
		green-pwm-led = &green_pwm_led;
		blue-pwm-led = &blue_pwm_led;
	};

	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 = &lpuart0;
		zephyr,shell-uart = &lpuart0;
		zephyr,uart-pipe = &lpuart0;
		zephyr,canbus = &flexcan0;
	};

	leds {
		compatible = "gpio-leds";
		amber_led: led_0 {
			gpios = <&gpiod 13 GPIO_ACTIVE_LOW>;
			label = "LED_AMB";
		};
		green_led: led_1 {
			gpios = <&gpiod 14 GPIO_ACTIVE_LOW>;
			label = "LED_GRN";
		};
	};

	pwmleds {
		compatible = "pwm-leds";

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

	transceiver0: can-phy0 {
		compatible = "nxp,tja1042", "can-transceiver-gpio";
		max-bitrate = <5000000>;
		standby-gpios = <&gpioc 19 GPIO_ACTIVE_HIGH>;
		#phy-cells = <0>;
	};

	transceiver1: can-phy1 {
		compatible = "nxp,tja1042", "can-transceiver-gpio";
		max-bitrate = <5000000>;
		standby-gpios = <&gpioc 18 GPIO_ACTIVE_HIGH>;
		#phy-cells = <0>;
	};

	/* This regulator enables the 3V3_S line, which powers sensors on-board. */
	reg-3v3-s {
		compatible = "regulator-fixed";
		regulator-name = "reg-3v3-s";
		enable-gpios = <&gpiob 8 GPIO_ACTIVE_HIGH>;
		startup-delay-us = <2000>;
		regulator-always-on;
		status = "okay";
	};

	/* This regulator enables the onboard Ethernet PHY */
	reg-3v3-neth {
		compatible = "regulator-fixed";
		regulator-name = "reg-3v3-neth";
		enable-gpios = <&gpiob 3 GPIO_ACTIVE_LOW>;
		regulator-always-on;
		status = "okay";
	};

	/* This regulator enables the onboard SD card support */
	reg-3v3-sd {
		compatible = "regulator-fixed";
		regulator-name = "reg-3v3-sd";
		enable-gpios = <&gpiod 6 GPIO_ACTIVE_HIGH>;
		regulator-always-on;
		status = "okay";
	};
};

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

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

&adc0 {
	status = "okay";
};

&adc1 {
	status = "okay";
};

&temp1 {
	status = "okay";
};

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

/* PWM header is powered by FlexTimer 0 for channels 1 to 4 */
&ftm0 {
	status = "okay";
	compatible = "nxp,kinetis-ftm-pwm";
	#pwm-cells = <3>;
	pinctrl-0 = <&ftm0_default>;
	pinctrl-names = "default";
};


/* RGB LED powered by FlexTimer 3, and PWM headers for channel 5 and 6 */
&ftm3 {
	status = "okay";
	compatible = "nxp,kinetis-ftm-pwm";
	#pwm-cells = <3>;
	pinctrl-0 = <&ftm3_default>;
	pinctrl-names = "default";
};

/* LPUART connected to debug header */
&lpuart0 {
	status = "okay";
	current-speed = <115200>;
	pinctrl-0 = <&lpuart0_default>;
	pinctrl-names = "default";
};

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

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

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

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

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

&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;
		};

		/*
		 * The flash starting at 0x00010000 and ending at
		 * 0x0001ffff (sectors 16-31) is reserved for use
		 * by the application.
		 */
		storage_partition: partition@1e000 {
			label = "storage";
			reg = <0x0001e000 0x00002000>;
		};

		slot0_partition: partition@20000 {
			label = "image-0";
			reg = <0x00020000 0x00060000>;
		};
		slot1_partition: partition@80000 {
			label = "image-1";
			reg = <0x00080000 0x00060000>;
		};
		scratch_partition: partition@e0000 {
			label = "image-scratch";
			reg = <0x000e0000 0x00020000>;
		};
	};
};

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

&enet_mdio {
	status = "okay";
	pinctrl-0 = <&mdio_default>;
	pinctrl-names = "default";
	phy: phy@0 {
		compatible = "ethernet-phy";
		reg = <0>;
		status = "okay";
	};
};

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

&flexcan1 {
	status = "okay";
	pinctrl-0 = <&flexcan1_default>;
	pinctrl-names = "default";
	bus-speed = <125000>;
	phys = <&transceiver1>;
};

/* external i2c port */
&i2c0 {
	status = "okay";
	pinctrl-0 = <&i2c0_default>;
	pinctrl-names = "default";
};

/* magnetometer (bmm150), barometer (bmp280), pressure (mpl3115),
 * secure element (a7102ch) i2c bus
 */
&i2c1 {
	status = "okay";
	pinctrl-0 = <&i2c1_default>;
	pinctrl-names = "default";

	/*
	 * This board does not have a BME280, it has a BMP280.
	 * The two parts are incredibly similar, so the BME280 driver works for
	 * BMP280 as well.
	 */
	bme280@76 {
		compatible = "bosch,bme280";
		status = "okay";
		reg = <0x76>;
	};

	bmm150: bmm150@10 {
		compatible = "bosch,bmm150";
		status = "okay";
		reg = <0x10>;
	};
};

/* f-ram spi port */
&spi0 {
	status = "okay";
	pinctrl-0 = <&spi0_default>;
	pinctrl-names = "default";
};

/* flash (w25x40), accel, magneto (fxos8700), gyro (fxas2100) */
&spi1 {
	status = "okay";
	pinctrl-0 = <&spi1_default>;
	pinctrl-names = "default";
	/*
	 * cs-gpios needs to be populated as per the schematics
	 * fxos8700  - CS#0
	 * fxas21002 - CS#1
	 */
	cs-gpios = <&gpiob 10 GPIO_ACTIVE_LOW>,
		   <&gpiob 9 GPIO_ACTIVE_LOW>;
	clock-frequency = <DT_FREQ_M(1)>;


	fxos8700@0 {
		compatible = "nxp,fxos8700";
		reg = <0>;
		spi-max-frequency = <DT_FREQ_M(1)>;
		reset-gpios = <&gpioa 25 GPIO_ACTIVE_HIGH>;
		int1-gpios = <&gpioe 9 GPIO_ACTIVE_LOW>;
		int2-gpios = <&gpioe 10 GPIO_ACTIVE_LOW>;
		status = "okay";
	};

	fxas21002@1 {
		compatible = "nxp,fxas21002";
		reg = <1>;
		spi-max-frequency = <DT_FREQ_M(1)>;
		reset-gpios = <&gpiod 12 GPIO_ACTIVE_LOW>;
		int1-gpios = <&gpioe 7 GPIO_ACTIVE_LOW>;
		int2-gpios = <&gpioe 6 GPIO_ACTIVE_LOW>;
		status = "okay";
	};

};

/* external spi */
&spi2 {
	status = "okay";
	pinctrl-0 = <&spi2_default>;
	pinctrl-names = "default";
};

&edma0 {
	status = "okay";
};

&pit0 {
	status = "okay";
};
