/*
 * Copyright (c) 2018 AJ Palmer
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <st/f7/stm32f746Xg.dtsi>
#include <st/f7/stm32f746zgtx-pinctrl.dtsi>
#include "arduino_r3_connector.dtsi"

/*
 * WARNING: The pin PA7 will conflict on selection of SPI_1 and ETH_STM32_HAL.
 *          If you require both peripherals, and you do not need Arduino Uno v3
 *          compatibility, the pin PB5 (also on ST Zio connector) can be used
 *          for the SPI_1 MOSI signal.
 */

/ {
	model = "STMicroelectronics STM32F746ZG-NUCLEO board";
	compatible = "st,stm32f746zg-nucleo";

	chosen {
		zephyr,console = &usart3;
		zephyr,shell-uart = &usart3;
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,dtcm = &dtcm;
		zephyr,canbus = &can1;
	};

	leds {
		compatible = "gpio-leds";
		green_led: led_0 {
			gpios = <&gpiob 0 GPIO_ACTIVE_HIGH>;
			label = "User LD1";
		};
		blue_led: led_1 {
			gpios = <&gpiob 7 GPIO_ACTIVE_HIGH>;
			label = "User LD2";
		};
		red_led: led_2 {
			gpios = <&gpiob 14 GPIO_ACTIVE_HIGH>;
			label = "User LD3";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		user_button: button_0 {
			label = "User";
			gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>;
		};
	};

	aliases {
		led0 = &green_led;
		led1 = &blue_led;
		led2 = &red_led;
		sw0 = &user_button;
		watchdog0 = &iwdg;
	};
};

&clk_hse {
	hse-bypass;
	clock-frequency = <DT_FREQ_M(8)>; /* STLink 8MHz clock */
	status = "okay";
};

&pll {
	div-m = <4>;
	mul-n = <72>;
	div-p = <2>;
	div-q = <3>;
	clocks = <&clk_hse>;
	status = "okay";
};

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

&usart2 {
	pinctrl-0 = <&usart2_tx_pd5 &usart2_rx_pd6
		     &usart2_rts_pd4 &usart2_cts_pd3>;
	pinctrl-names = "default";
	current-speed = <115200>;
};

&usart3 {
	pinctrl-0 = <&usart3_tx_pd8 &usart3_rx_pd9>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

&usart6 {
	pinctrl-0 = <&usart6_tx_pg14 &usart6_rx_pg9>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

zephyr_udc0: &usbotg_fs {
	pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12>;
	pinctrl-names = "default";
	status = "okay";
};

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

&timers1 {
	st,prescaler = <10000>;
	status = "okay";

	pwm1: pwm {
		status = "okay";
		pinctrl-0 = <&tim1_ch3_pe13>;
		pinctrl-names = "default";
	};
};

&spi1 {
	pinctrl-0 = <&spi1_sck_pa5 &spi1_miso_pa6 &spi1_mosi_pa7>;
	pinctrl-names = "default";
	cs-gpios = <&gpiod 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
	status = "okay";
};

&iwdg {
	status = "okay";
};

&rtc {
	status = "okay";
};

&can1 {
	pinctrl-0 = <&can1_rx_pd0 &can1_tx_pd1>;
	pinctrl-names = "default";
	bus-speed = <125000>;
	status = "okay";
};

&dma2 {
	status = "okay";
};

&adc1 {
	pinctrl-0 = <&adc1_in0_pa0>;
	pinctrl-names = "default";
	status = "okay";
};

&dac1 {
	pinctrl-0 = <&dac_out1_pa4>;
	pinctrl-names = "default";
	status = "okay";
};

&rng {
	status = "okay";
};

&mac {
	status = "okay";
	pinctrl-0 = <&eth_mdc_pc1
		     &eth_rxd0_pc4
		     &eth_rxd1_pc5
		     &eth_ref_clk_pa1
		     &eth_mdio_pa2
		     &eth_crs_dv_pa7
		     &eth_tx_en_pg11
		     &eth_txd0_pg13
		     &eth_txd1_pb13>;
	pinctrl-names = "default";
};

&backup_sram {
	status = "okay";
};
