/*
 * Copyright (c) 2023, Meta Platforms, Inc. and its affiliates.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <freq.h>
#include <mem.h>
#include <atmel/samd20.dtsi>
#include <atmel/samx2xx16.dtsi>
#include "ev11l78a-pinctrl.dtsi"

/ {
	model = "Microchip EV11L78A";
	compatible = "atmel,samd20e16", "atmel,samd20";

	aliases {
		led0 = &cap_mis_led;
		spi0 = &sercom0;
		i2c0 = &sercom3;
	};

	chosen {
		zephyr,console = &sercom1;
		zephyr,shell-uart = &sercom1;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
	};

	leds {
		compatible = "gpio-leds";

		cap_mis_led: led_0 {
			gpios = <&porta 23 GPIO_ACTIVE_HIGH>;
			label = "CAP_MIS";
		};
	};

	csa_i_sense: i_sense {
		compatible = "current-sense-amplifier";
		io-channels = <&adc 5>;
		sense-resistor-milli-ohms = <4>;
		sense-gain-mult = <100>;
	};
};

&cpu0 {
	clock-frequency = <DT_FREQ_M(48)>;
};

&sercom0 {
	status = "okay";
	compatible = "atmel,sam0-spi";
	dipo = <0>;
	dopo = <2>;
	#address-cells = <1>;
	#size-cells = <0>;
	cs-gpios = <&porta 10 GPIO_ACTIVE_LOW>;

	pinctrl-0 = <&sercom0_spi_default>;
	pinctrl-names = "default";
};

&sercom1 {
	status = "okay";
	compatible = "atmel,sam0-uart";
	current-speed = <115200>;
	rxpo = <3>;
	txpo = <1>;

	pinctrl-0 = <&sercom1_uart_default>;
	pinctrl-names = "default";
};

&sercom3 {
	status = "okay";
	compatible = "atmel,sam0-i2c";
	clock-frequency = <I2C_BITRATE_HIGH>;

	#address-cells = <1>;
	#size-cells = <0>;

	pinctrl-0 = <&sercom3_i2c_default>;
	pinctrl-names = "default";
};

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

		/*
		 * The final 16 KiB is reserved for the application.
		 * Storage partition will be used by FCB/LittleFS/NVS
		 * if enabled.
		 */
		storage_partition: partition@c000 {
			label = "storage";
			reg = <DT_SIZE_K(64-16) DT_SIZE_K(16)>;
		};
	};
};

&adc {
	status = "okay";
	prescaler = <32>;
	#address-cells = <1>;
	#size-cells = <0>;

	channel@4 {
		reg = <4>;
		zephyr,gain = "ADC_GAIN_1_2";
		zephyr,reference = "ADC_REF_VDD_1_2";
		zephyr,vref-mv = <1650>;
		zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
		zephyr,resolution = <12>;
		zephyr,input-positive = <4>;
	};

	pinctrl-0 = <&adc_default>;
	pinctrl-names = "default";
};
