/*
 * 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;
	};

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

		boot_partition: partition@2400 {
			label = "mcuboot";
			reg = <0x000002400 0x00005c00>;
		};
		slot0_partition: partition@8000 {
			label = "image-0";
			reg = <0x00008000 0x00060000>;
		};
		slot1_partition: partition@68000 {
			label = "image-1";
			reg = <0x00068000 0x00060000>;
		};
		scratch_partition: partition@c8000 {
			label = "image-scratch";
			reg = <0x000c8000 0x00010000>;
		};
		storage_partition: partition@dc000 {
			label = "storage";
			reg = <0x000dc000 0x00004000>;
		};
	};
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

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

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

&rc32m {
	status = "disabled";
};

&xtal32m {
	status = "okay";
};

&xtal32k {
	status = "okay";
};

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

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

&pll {
	status = "okay";
};
&i2c {
	status = "okay";
	pinctrl-0 = <&i2c_default>;
	pinctrl-names = "default";
};

&i2c2 {
	status = "okay";
	pinctrl-0 = <&i2c2_default>;
	pinctrl-names = "default";
};

&spi {
	status = "okay";
	pinctrl-0 = <&spi_controller>;
	pinctrl-names = "default";
};

&spi2 {
	status = "okay";
	pinctrl-0 = <&spi2_controller>;
	pinctrl-names = "default";
};
