/*
 * Copyright (c) 2019-2021 Vestas Wind Systems A/S
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <nxp/nxp_ke18f512vlx16.dtsi>
#include <zephyr/dt-bindings/clock/kinetis_scg.h>
#include <zephyr/dt-bindings/pwm/pwm.h>
#include "twr_ke18f-pinctrl.dtsi"

/ {
	model = "NXP Kinetis KE18 MCU Tower System Module";
	compatible = "nxp,mke18f16", "nxp,ke18f", "nxp,ke1xf";

	aliases {
		led0 = &orange_led;
		led1 = &yellow_led;
		led2 = &green_led;
		led3 = &red_led;
		led4 = &tri_red_led;
		led5 = &tri_green_led;
		led6 = &tri_blue_led;
		pwm-led0 = &orange_pwm_led;
		pwm-led1 = &yellow_pwm_led;
		pwm-led2 = &green_pwm_led;
		pwm-led3 = &red_pwm_led;
		red-pwm-led = &tri_red_pwm_led;
		green-pwm-led = &tri_green_pwm_led;
		blue-pwm-led = &tri_blue_pwm_led;
		sw0 = &user_button_3;
		sw1 = &user_button_2;
	};

	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";
		orange_led: led_0 {
			gpios = <&gpioc 13 GPIO_ACTIVE_LOW>;
			label = "User LED D9";
		};
		yellow_led: led_1 {
			gpios = <&gpioc 12 GPIO_ACTIVE_LOW>;
			label = "User LED D8";
		};
		green_led: led_2 {
			gpios = <&gpioc 11 GPIO_ACTIVE_LOW>;
			label = "User LED D7";
		};
		red_led: led_3 {
			gpios = <&gpioc 10 GPIO_ACTIVE_LOW>;
			label = "User LED D6";
		};

		tri_red_led: led_4 {
			gpios = <&gpiod 16 GPIO_ACTIVE_LOW>;
			label = "User Tricolor LED D5 (Red)";
		};
		tri_green_led: led_5 {
			gpios = <&gpiod 15 GPIO_ACTIVE_LOW>;
			label = "User Tricolor LED D5 (Green)";
		};
		tri_blue_led: led_6 {
			gpios = <&gpiob 5 GPIO_ACTIVE_LOW>;
			label = "User Tricolor LED D5 (Blue)";
		};
	};

	pwmleds {
		compatible = "pwm-leds";
		orange_pwm_led: led_pwm_0 {
			pwms = <&ftm3 7 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
			label = "User PWM LED D9";
		};
		yellow_pwm_led: led_pwm_1 {
			pwms = <&ftm3 6 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
			label = "User PWM LED D8";
		};
		green_pwm_led: led_pwm_2 {
			pwms = <&ftm3 5 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
			label = "User PWM LED D7";
		};
		red_pwm_led: led_pwm_3 {
			pwms = <&ftm3 4 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
			label = "User PWM LED D6";
		};

		tri_red_pwm_led: led_pwm_4 {
			pwms = <&ftm0 1 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
			label = "User Tricolor PWM LED D5 (Red)";
		};
		tri_green_pwm_led: led_pwm_5 {
			pwms = <&ftm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
			label = "User Tricolor PWM LED D5 (Green)";
		};
		tri_blue_pwm_led: led_pwm_6 {
			pwms = <&ftm0 5 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
			label = "User Tricolor PWM LED D5 (Blue)";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button_2: button_0 {
			label = "User SW2";
			gpios = <&gpiod 3 GPIO_ACTIVE_LOW>;
		};
		user_button_3: button_1 {
			label = "User SW3";
			gpios = <&gpiod 6 GPIO_ACTIVE_LOW>;
		};
	};

	flexio: flexio@4005a000 {
		reg = <0x4005a000 0x1000>;
		compatible = "nxp,flexio";
		pinctrl-0 = <&flexio_clockout>;
		pinctrl-names = "default";
	};
};

&cpu0 {
	clock-frequency = <120000000>;
	cpu-power-states = <&idle &stop>;
};

&idle {
	min-residency-us = <1>;
};

&stop {
	min-residency-us = <20000>;
	exit-latency-us = <13>;
};

&sim {
	clkout-source = <1>;
	clkout-divider = <0>;
};

&scg {
	sosc-mode = <KINETIS_SCG_SOSC_MODE_LOW_POWER>;

	sosc_clk {
		status = "okay";
		clock-frequency = <8000000>;
	};

	pll {
		clock-mult = <30>;
	};

	core_clk {
		clocks = <&spll_clk>;
	};

	bus_clk {
		clock-div = <2>;
	};

	slow_clk {
		clock-div = <5>;
	};

	clkout_clk {
		status = "okay";
	};

	splldiv1_clk {
		clock-div = <1>;
	};

	splldiv2_clk {
		clock-div = <2>;
	};

	sircdiv1_clk {
		clock-div = <1>;
	};

	sircdiv2_clk {
		clock-div = <2>;
	};

	fircdiv1_clk {
		clock-div = <1>;
	};

	fircdiv2_clk {
		clock-div = <1>;
	};

	soscdiv1_clk {
		clock-div = <1>;
	};

	soscdiv2_clk {
		clock-div = <1>;
	};
};

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

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

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

&lpi2c0 {
	status = "okay";
	pinctrl-0 = <&lpi2c0_default>;
	pinctrl-names = "default";
	scl-gpios = <&gpioa 3 GPIO_ACTIVE_HIGH>;
	sda-gpios = <&gpioa 2 GPIO_ACTIVE_HIGH>;

	fxos8700: fxos8700@1d {
		compatible = "nxp,fxos8700";
		reg = <0x1d>;
		label = "FXOS8700";
		reset-gpios = <&gpioc 15 GPIO_ACTIVE_HIGH>;
	};
};

&lpi2c1 {
	status = "okay";
	pinctrl-0 = <&lpi2c1_default>;
	pinctrl-names = "default";
	scl-gpios = <&gpiod 9 GPIO_ACTIVE_HIGH>;
	sda-gpios = <&gpiod 8 GPIO_ACTIVE_HIGH>;
};

&lpspi0 {
	status = "okay";
	pinctrl-0 = <&lpspi0_default>;
	pinctrl-names = "default";
};

&lpspi1 {
	status = "okay";
	pinctrl-0 = <&lpspi1_default>;
	pinctrl-names = "default";
};

&dac0 {
	status = "okay";
	pinctrl-0 = <&dac0_default>;
	pinctrl-names = "default";
};

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

&temp0 {
	status = "okay";
};

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

	can-transceiver {
		max-bitrate = <1000000>;
	};
};

&gpioa {
	status = "okay";
};

&gpiob {
	status = "okay";
};

&gpioc {
	status = "okay";
};

&gpiod {
	status = "okay";
};

&gpioe {
	status = "okay";
};

&edma {
	status = "okay";
};

&flash0 {

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

		boot_partition: partition@0 {
			label = "mcuboot";
			reg = <0x00000000 0xc000>;
		};
		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000c000 0x32000>;
		};
		slot1_partition: partition@3e000 {
			label = "image-1";
			reg = <0x0003e000 0x32000>;
		};
		scratch_partition: partition@70000 {
			label = "image-scratch";
			reg = <0x00070000 0xa000>;
		};
		storage_partition: partition@7a000 {
			label = "storage";
			reg = <0x0007a000 0x00006000>;
		};
	};
};
