/*
 * Copyright (c) 2018 Aleksandr Makarov <aleksandr.o.makarov@gmail.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <st/l0/stm32l072Xz.dtsi>
#include <st/l0/stm32l072c(b-z)tx-pinctrl.dtsi>

/ {
	model = "STMicroelectronics B-L072Z-LRWAN1 Discovery kit";
	compatible = "st,stm32l072z-lrwan1";

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

	leds {
		compatible = "gpio-leds";
		green_led_0: led_0 {
			gpios = <&gpioa 5 GPIO_ACTIVE_HIGH>;
			label = "Green LED 1";
		};
		green_led_1: led_1 {
			gpios = <&gpiob 5 GPIO_ACTIVE_HIGH>;
			label = "Green LED 2";
		};
		blue_led: led_2 {
			gpios = <&gpiob 6 GPIO_ACTIVE_HIGH>;
			label = "Blue LED";
		};
		red_led: led_3 {
			gpios = <&gpiob 7 GPIO_ACTIVE_HIGH>;
			label = "Red LED";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button: button_0 {
			label = "Push button switch";
			gpios = <&gpiob 2 GPIO_ACTIVE_LOW>;
		};
	};

	/* These aliases are provided for compatibility with samples */
	aliases {
		led0 = &green_led_0;
		led1 = &green_led_1;
		led2 = &blue_led;
		led3 = &red_led;
		sw0 = &user_button;
		eeprom-0 = &eeprom;
		lora0 = &lora;
	};

	power-states {
		stop: stop {
			compatible = "zephyr,power-state";
			power-state-name = "suspend-to-idle";
			min-residency-us = <100>;
		};
	};
};

&cpu0 {
	cpu-power-states = <&stop>;
};

&lptim1 {
	status = "okay";
};

&clk_hsi {
	status = "okay";
};

&pll {
	div = <2>;
	mul = <4>;
	clocks = <&clk_hsi>;
	status = "okay";
};

&rcc {
	clocks = <&pll>;
	clock-frequency = <DT_FREQ_M(32)>;
	ahb-prescaler = <1>;
	apb1-prescaler = <1>;
	apb2-prescaler = <1>;
};

arduino_usart: &usart1 {};
arduino_spi: &spi2 {};
arduino_i2c: &i2c1 {};

&usart1 {
	pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

&usart2 {
	pinctrl-0 = <&usart2_tx_pa2 &usart2_rx_pa3>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

&spi1 {
	pinctrl-0 = <&spi1_nss_pa15 &spi1_sck_pb3
		     &spi1_miso_pa6 &spi1_mosi_pa7>;
	pinctrl-names = "default";
	status = "okay";
	cs-gpios = <&gpioa 15 GPIO_ACTIVE_LOW>;

	lora: lora@0 {
		compatible = "semtech,sx1276";
		reg = <0>;
		label = "sx1276";
		reset-gpios = <&gpioc 0 GPIO_ACTIVE_LOW>;
		dio-gpios = <&gpiob 4 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
			<&gpiob 1 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
			<&gpiob 0 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
			<&gpioc 13 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
			<&gpioa 5 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
			<&gpioa 4 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
		rfi-enable-gpios = <&gpioa 1 GPIO_ACTIVE_HIGH>;
		rfo-enable-gpios = <&gpioc 2 GPIO_ACTIVE_HIGH>;
		pa-boost-enable-gpios = <&gpioc 1 GPIO_ACTIVE_HIGH>;
		tcxo-power-gpios = <&gpioa 12 GPIO_ACTIVE_HIGH>;
		tcxo-power-startup-delay-ms = <5>;
		spi-max-frequency = <1000000>;
	};
};

&spi2 {
	pinctrl-0 = <&spi2_nss_pb12 &spi2_sck_pb13
		     &spi2_miso_pb14 &spi2_mosi_pb15>;
	pinctrl-names = "default";
	status = "okay";
};

&i2c1 {
	pinctrl-0 = <&i2c1_scl_pb8 &i2c1_sda_pb9>;
	pinctrl-names = "default";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;
};

&rtc {
	status = "okay";
};

&rng {
	status = "okay";
};

&eeprom {
	status = "okay";
};

zephyr_udc0: &usb {
	pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>;
	pinctrl-names = "default";
	status = "okay";
};

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

		/* Set aside 32KiB for data at the end of the 192KiB flash */
		storage_partition: partition@28000 {
			label = "storage";
			reg = <0x00028000 DT_SIZE_K(32)>;
		};
	};
};
