/*
 * Copyright (c) 2024 Analog Devices, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <adi/max32/max32672.dtsi>
#include <adi/max32/max32672-pinctrl.dtsi>
#include <zephyr/dt-bindings/gpio/adi-max32-gpio.h>
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "Analog Devices MAX32672FTHR";
	compatible = "adi,max32672fthr";

	chosen {
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,sram = &sram3;
		zephyr,flash = &flash0;
		zephyr,display = &ssd1306;
	};

	leds {
		compatible = "gpio-leds";
		led1: led_1 {
			gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
			label = "Red LED";
		};
		led2: led_2 {
			gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
			label = "Green LED";
		};
		led3: led_3 {
			gpios = <&gpio0 4 GPIO_ACTIVE_LOW>;
			label = "Blue LED";
		};
	};

	buttons {
		compatible = "gpio-keys";
		pb1: pb1 {
			gpios = <&gpio0 10 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
			label = "SW2";
			zephyr,code = <INPUT_KEY_0>;
		};
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &led1;
		led1 = &led2;
		led2 = &led3;
		sw0 = &pb1;
		watchdog0 = &wdt0;
	};

	/* Used for accessing other pins */
	feather_header: feather_connector {
		compatible = "adafruit-feather-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;
		gpio-map = <12 0 &gpio0 19 0>,  /* SDA */
				<13 0 &gpio0 18 0>,  /* SCL */
				<14 0 &gpio0 25 0>,  /* I2S LRCLK */
				<15 0 &gpio0 24 0>,  /* I2S SDO */
				<16 0 &gpio0 17 0>,   /* SPI1 SS */
				<17 0 &gpio0 23 0>,   /* QEI */
				<18 0 &gpio0 7 0>,   /* QEB */
				<19 0 &gpio0 6 0>,   /* QEA */
				<20 0 &gpio0 5 0>,   /* HFX CLK OUT */
				/* 11 not connected */
				<10 0 &gpio0 29 0>,  /* TX */
				<9 0 &gpio0 28 0>,   /* RX */
				<8 0 &gpio0 14 0>,   /* MISO */
				<7 0 &gpio0 15 0>,   /* MOSI */
				<6 0 &gpio0 16 0>,   /* SCK */
				<5 0 &gpio0 26 0>,   /* I2S BCLK */
				<4 0 &gpio0 27 0>,   /* I2S SDI */
				<3 0 &gpio0 22 0>,   /* ADC_TRG */
				<2 0 &gpio0 13 0>,   /* AIN5 */
				<1 0 &gpio0 12 0>,   /* AIN4 */
				<0 0 &gpio0 11 0>;   /* AIN3 */
	};
};

&uart0 {
	pinctrl-0 = <&uart0a_tx_p0_9 &uart0a_rx_p0_8>;
	pinctrl-names = "default";
	current-speed = <115200>;
	data-bits = <8>;
	parity = "none";
	status = "okay";
};

&clk_ipo {
	status = "okay";
};

/*
 * ERTCO is required for counter RTC
 */
&clk_ertco {
	status = "okay";
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&trng {
	status = "okay";
};

&i2c2 {
	pinctrl-0 = <&i2c2a_scl_p0_18 &i2c2a_sda_p0_19>;
	pinctrl-names = "default";
	clock-frequency = <I2C_BITRATE_FAST>;
	status = "okay";

	ssd1306: ssd1306@3d {
		compatible = "solomon,ssd1306fb";
		reg = <0x3d>;
		width = <128>;
		height = <32>;
		segment-offset = <0>;
		page-offset = <0>;
		display-offset = <0>;
		multiplex-ratio = <31>;
		segment-remap;
		com-invdir;
		com-sequential;
		prechargep = <0x22>;
		inversion-on;
	};
};

&dma0 {
	status = "okay";
};

&wdt0 {
	status = "okay";
};

&spi1 {
	status = "okay";
	pinctrl-0 = <&spi1a_mosi_p0_15 &spi1a_miso_p0_14 &spi1a_sck_p0_16 &spi1a_ss0_p0_17>;
	pinctrl-names = "default";
};

&rtc_counter {
	status = "okay";
};
