/*
 * Copyright (c) 2022 Renesas Electronics Corporation and/or its affiliates
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <renesas/smartbond/da14699.dtsi>
#include "da1469x_dk_pro-pinctrl.dtsi"

/ {
	model = "DA1469x series Development Kit Pro";
	compatible = "renesas,da1469x_dk_pro";
	#address-cells = <1>;
	#size-cells = <1>;

	chosen {
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,console = &uart;
		zephyr,shell-uart = &uart;
		zephyr,code-partition = &slot0_partition;
		zephyr,bt-hci = &bt_hci_da1469x;
	};

	lvgl_pointer {
		compatible = "zephyr,lvgl-pointer-input";
	};

	leds {
		compatible = "gpio-leds";
		red_led: led_0 {
			gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
		};
	};

	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 &gpio1 9 0>,	/* A0 */
			<1 0 &gpio0 25 0>,	/* A1 */
			<2 0 &gpio0 8 0>,	/* A2 */
			<3 0 &gpio0 9 0>,	/* A3 */
			<4 0 &gpio1 13 0>,	/* A4 */
			<5 0 &gpio1 12 0>,	/* A5 */
			<6 0 &gpio1 2 0>,	/* D0 */
			<7 0 &gpio1 3 0>,	/* D1 */
			<8 0 &gpio1 4 0>,	/* D2 */
			<9 0 &gpio1 5 0>,	/* D3 */
			<10 0 &gpio1 7 0>,	/* D4 */
			<11 0 &gpio1 8 0>,	/* D5 */
			<12 0 &gpio0 17 0>,	/* D6 */
			<13 0 &gpio0 18 0>,	/* D7 */
			<14 0 &gpio0 19 0>,	/* D8 */
			<15 0 &gpio0 20 0>,	/* D9 */
			<16 0 &gpio0 21 0>,	/* D10 */
			<17 0 &gpio0 24 0>,	/* D11 */
			<18 0 &gpio0 26 0>,	/* D12 */
			<19 0 &gpio0 27 0>,	/* D13 */
			<20 0 &gpio0 28 0>,	/* D14 */
			<21 0 &gpio0 29 0>;	/* D15 */
	};

	aliases {
		led0 = &red_led;
		watchdog0 = &wdog;
	};

	sysclk: system-clock {
		compatible = "fixed-clock";
		clock-frequency = <32000000>;
		#clock-cells = <0>;
	};
};

&flash0 {
	reg = <0x16000000 DT_SIZE_M(1)>;

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

		/*
		 * Flash area from 0x0000 to 0x2400 is reserved
		 * for product header added by flasher.
		 */

		boot_partition: partition@2400 {
			label = "mcuboot";
			reg = <0x000002400 0x00009c00>;
		};
		slot0_partition: partition@c000 {
			label = "image-0";
			reg = <0x0000c000 0x00076000>;
		};
		slot1_partition: partition@80000 {
			label = "image-1";
			reg = <0x00082000 0x00076000>;
		};
		storage_partition: partition@f8000 {
			label = "storage";
			reg = <0x000f8000 0x00008000>;
		};
	};
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&uart {
	current-speed = <115200>;
	status = "okay";
	pinctrl-0 = <&uart_default>;
	pinctrl-names = "default";
	rx-wake-gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
};

zephyr_udc0: &usbd {
	compatible = "renesas,smartbond-usbd";
	status = "okay";
};

&rc32m {
	status = "disabled";
};

&xtal32m {
	status = "okay";
};

&xtal32k {
	status = "okay";
};

/*
 * On board level we switch to XTAL32K and
 * so RCX can be disabled.
 */
&rcx {
	status = "disabled";
};

&lp_clk {
	clock-src = <&xtal32k>;
};

&sys_clk {
	clock-src = <&xtal32m>;
};

&i2c {
	pinctrl-0 = <&i2c_default>;
	pinctrl-1 = <&i2c_sleep>;
	pinctrl-names = "default", "sleep";
};

&i2c2 {
	pinctrl-0 = <&i2c2_default>;
	pinctrl-1 = <&i2c2_sleep>;
	pinctrl-names = "default", "sleep";
};

&spi {
	pinctrl-0 = <&spi_controller>;
	pinctrl-1 = <&spi_sleep>;
	pinctrl-names = "default", "sleep";
};

&spi2 {
	pinctrl-0 = <&spi2_controller>;
	pinctrl-1 = <&spi2_sleep>;
	pinctrl-names = "default", "sleep";
};

&bt_hci_da1469x {
	status = "okay";
};
