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

/dts-v1/;
#include <renesas/smartbond/da14695.dtsi>
#include "da14695_dk_usb-pinctrl.dtsi"
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "DA14695 series Development Kit USB";
	compatible = "renesas,da14695_dk_usb";
	#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>;
		};
	};

	buttons {
		compatible = "gpio-keys";
		button0: button_0 {
			gpios = <&gpio0 6 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
			label = "Push button switch K1";
			zephyr,code = <INPUT_KEY_0>;
		};
	};

	mikrobus_header{
		mikrobus-connector-1 {
			compatible = "mikro-bus";
			#gpio-cells = <2>;
			gpio-map-mask = <0xffffffff 0xffffffc0>;
			gpio-map-pass-thru = <0 0x3f>;
			gpio-map =	<0 0 &gpio0 25 0>,	/* AN  */
					/* Not a GPIO*/		/* RST */
					<2 0 &gpio1 2 0>,	/* CS   */
					<3 0 &gpio1 3 0>,	/* SCK  */
					<4 0 &gpio1 4 0>,	/* MISO */
					<5 0 &gpio1 5 0>,	/* MOSI */
								/* +3.3V */
								/* GND */
					<6 0 &gpio1 6 0>,	/* PWM  */
					<7 0 &gpio1 7 0>,	/* INT  */
					<8 0 &gpio1 8 0>,	/* RX   */
					<9 0 &gpio0 17 0>,	/* TX   */
					<10 0 &gpio0 18 0>,	/* SCL  */
					<11 0 &gpio0 19 0>;	/* SDA  */
								/* +5V */
								/* GND */
		};
		mikrobus-connector-2 {
			compatible = "mikro-bus";
			#gpio-cells = <2>;
			gpio-map-mask = <0xffffffff 0xffffffc0>;
			gpio-map-pass-thru = <0 0x3f>;
			gpio-map =	<0 0 &gpio1 9 0>,	/* AN  */
					/* Not a GPIO*/		/* RST */
					<2 0 &gpio0 20 0>,	/* CS   */
					<3 0 &gpio0 21 0>,	/* SCK  */
					<4 0 &gpio0 24 0>,	/* MISO */
					<5 0 &gpio0 26 0>,	/* MOSI */
								/* +3.3V */
								/* GND */
					<6 0 &gpio1 1 0>,	/* PWM  */
					<7 0 &gpio0 27 0>,	/* INT  */
					<8 0 &gpio0 28 0>,	/* RX   */
					<9 0 &gpio0 29 0>,	/* TX   */
					<10 0 &gpio0 30 0>,	/* SCL  */
					<11 0 &gpio0 31 0>;	/* SDA  */
								/* +5V */
								/* GND */
		};
	};

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

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

&uart3 {
	current-speed = <115200>;
	status = "okay";
	pinctrl-0 = <&uart3_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";
};

mikrobus_1_i2c: &i2c {};

mikrobus_1_spi: &spi {};

mikrobus_1_uart: &uart2 {};

mikrobus_2_i2c: &i2c2 {};

mikrobus_2_spi: &spi2 {};

mikrobus_2_uart: &uart3 {};
