/*
 * Copyright (c) 2019 STMicroelectronics
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <dt-bindings/pinctrl/stm32-pinctrl.h>

/ {
	soc {
		pinctrl: pin-controller@50002000 {
			usart3_pins_a: usart3_a {
				rx_tx {
					rx = <STM32_PIN_PB12
						(STM32_PINMUX_ALT_FUNC_8 |
						STM32_PUPDR_PULL_DOWN)>;
					tx = <STM32_PIN_PB10
						(STM32_PINMUX_ALT_FUNC_7 |
						STM32_PUSHPULL_PULLUP)>;
				};
			};
			uart4_pins_a: usart4_a {
				rx_tx {
					rx = <STM32_PIN_PB2
						(STM32_PINMUX_ALT_FUNC_8 |
						STM32_PUPDR_PULL_DOWN)>;
					tx = <STM32_PIN_PD1
						(STM32_PINMUX_ALT_FUNC_8 |
						STM32_PUSHPULL_PULLUP)>;
				};
			};
			uart7_pins_a: uart7_a {
				rx_tx {
					rx = <STM32_PIN_PE7
						(STM32_PINMUX_ALT_FUNC_7 |
						STM32_PUPDR_PULL_DOWN)>;
					tx = <STM32_PIN_PE8
						(STM32_PINMUX_ALT_FUNC_7 |
						STM32_PUSHPULL_PULLUP)>;
				};
			};
			uart7_pins_rts_cts_a: uart7_rts_cts_a {
				rts_cts {
					rts = <STM32_PIN_PE9
						(STM32_PINMUX_ALT_FUNC_7 |
						STM32_PUPDR_PULL_DOWN)>;
					cts = <STM32_PIN_PE10
						(STM32_PINMUX_ALT_FUNC_7 |
						STM32_PUSHPULL_PULLUP)>;
				};
			};
		};
	};
};
