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

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

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

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

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

	lora: sx1276@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>;
	status = "okay";
};

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

&rtc {
	status = "okay";
};

&rng {
	status = "okay";
};

&eeprom {
	status = "okay";
};

&usb {
	pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>;
	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 0x00008000>;
		};
	};
};
