/*
 * Copyright (c) 2020 Linaro Limited.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <kernel.h>
#include <device.h>
#include <init.h>
#include <drivers/pinmux.h>
#include <sys/sys_io.h>

#include <pinmux/stm32/pinmux_stm32.h>

/* pin assignments for  board */
static const struct pin_config pinconf[] = {
#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart1), okay) && CONFIG_SERIAL
	{STM32_PIN_PB6, STM32F4_PINMUX_FUNC_PB6_USART1_TX},
	{STM32_PIN_PB7, STM32F4_PINMUX_FUNC_PB7_USART1_RX},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart2), okay) && CONFIG_SERIAL
	{STM32_PIN_PD5, STM32F4_PINMUX_FUNC_PD5_USART2_TX},
	{STM32_PIN_PD6, STM32F4_PINMUX_FUNC_PD6_USART2_RX},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart3), okay) && CONFIG_SERIAL
	{STM32_PIN_PD8, STM32F4_PINMUX_FUNC_PD8_USART3_TX},
	{STM32_PIN_PD9, STM32F4_PINMUX_FUNC_PD9_USART3_RX},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(uart7), okay) && CONFIG_SERIAL
	{STM32_PIN_PE8, STM32F4_PINMUX_FUNC_PE8_UART7_TX},
	{STM32_PIN_PE7, STM32F4_PINMUX_FUNC_PE7_UART7_RX},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(uart8), okay) && CONFIG_SERIAL
	{STM32_PIN_PE1, STM32F4_PINMUX_FUNC_PE1_UART8_TX},
	{STM32_PIN_PE0, STM32F4_PINMUX_FUNC_PE0_UART8_RX},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(pwm4), okay) && CONFIG_PWM
	{STM32_PIN_PD12, STM32F4_PINMUX_FUNC_PD12_PWM4_CH1},
	{STM32_PIN_PD13, STM32F4_PINMUX_FUNC_PD13_PWM4_CH2},
	{STM32_PIN_PD14, STM32F4_PINMUX_FUNC_PD14_PWM4_CH3},
	{STM32_PIN_PD15, STM32F4_PINMUX_FUNC_PD15_PWM4_CH4},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(pwm5), okay) && CONFIG_PWM
	{STM32_PIN_PA0, STM32F4_PINMUX_FUNC_PA0_PWM5_CH1},
	{STM32_PIN_PA1, STM32F4_PINMUX_FUNC_PA1_PWM5_CH2},
	{STM32_PIN_PA2, STM32F4_PINMUX_FUNC_PA2_PWM5_CH3},
	{STM32_PIN_PA3, STM32F4_PINMUX_FUNC_PA3_PWM5_CH4},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi1), okay) && CONFIG_SPI
#ifdef CONFIG_SPI_STM32_USE_HW_SS
	{STM32_PIN_PA4, STM32F4_PINMUX_FUNC_PA4_SPI1_NSS |
			STM32_OSPEEDR_VERY_HIGH_SPEED},
#endif /* CONFIG_SPI_STM32_USE_HW_SS */
	{STM32_PIN_PA5, STM32F4_PINMUX_FUNC_PA5_SPI1_SCK |
			STM32_OSPEEDR_VERY_HIGH_SPEED},
	{STM32_PIN_PA6, STM32F4_PINMUX_FUNC_PA6_SPI1_MISO},
	{STM32_PIN_PA7, STM32F4_PINMUX_FUNC_PA7_SPI1_MOSI},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi2), okay) && CONFIG_SPI
#ifdef CONFIG_SPI_STM32_USE_HW_SS
	{STM32_PIN_PB12, STM32F4_PINMUX_FUNC_PB12_SPI2_NSS |
			STM32_OSPEEDR_VERY_HIGH_SPEED},
#endif /* CONFIG_SPI_STM32_USE_HW_SS */
	{STM32_PIN_PB13, STM32F4_PINMUX_FUNC_PB13_SPI2_SCK |
			STM32_OSPEEDR_VERY_HIGH_SPEED},
	{STM32_PIN_PB14, STM32F4_PINMUX_FUNC_PB14_SPI2_MISO},
	{STM32_PIN_PB15, STM32F4_PINMUX_FUNC_PB15_SPI2_MOSI},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi3), okay) && CONFIG_SPI
	{STM32_PIN_PC10, STM32F4_PINMUX_FUNC_PC10_SPI3_SCK |
			STM32_OSPEEDR_VERY_HIGH_SPEED},
	{STM32_PIN_PC11, STM32F4_PINMUX_FUNC_PC11_SPI3_MISO},
	{STM32_PIN_PC12, STM32F4_PINMUX_FUNC_PC12_SPI3_MOSI},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi4), okay) && CONFIG_SPI
#ifdef CONFIG_SPI_STM32_USE_HW_SS
	{STM32_PIN_PE11, STM32F4_PINMUX_FUNC_PE11_SPI4_NSS |
			STM32_OSPEEDR_VERY_HIGH_SPEED},
#endif /* CONFIG_SPI_STM32_USE_HW_SS */
	{STM32_PIN_PE12, STM32F4_PINMUX_FUNC_PE12_SPI4_SCK |
			STM32_OSPEEDR_VERY_HIGH_SPEED},
	{STM32_PIN_PE13, STM32F4_PINMUX_FUNC_PE13_SPI4_MISO},
	{STM32_PIN_PE14, STM32F4_PINMUX_FUNC_PE14_SPI4_MOSI},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c2), okay) && CONFIG_I2C
	{STM32_PIN_PB10, STM32F4_PINMUX_FUNC_PB10_I2C2_SCL},
	{STM32_PIN_PB11, STM32F4_PINMUX_FUNC_PB11_I2C2_SDA},
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(adc1), okay) && CONFIG_ADC
	{STM32_PIN_PC0, STM32F4_PINMUX_FUNC_PC0_ADC123_IN10},
	{STM32_PIN_PC1, STM32F4_PINMUX_FUNC_PC1_ADC123_IN11},
	{STM32_PIN_PC2, STM32F4_PINMUX_FUNC_PC2_ADC123_IN12},
	{STM32_PIN_PC3, STM32F4_PINMUX_FUNC_PC3_ADC123_IN13},
#endif
#ifdef CONFIG_USB_DC_STM32
	{STM32_PIN_PA11, STM32F4_PINMUX_FUNC_PA11_OTG_FS_DM},
	{STM32_PIN_PA12, STM32F4_PINMUX_FUNC_PA12_OTG_FS_DP},
#endif  /* CONFIG_USB_DC_STM32 */
};

static int pinmux_stm32_init(struct device *port)
{
	ARG_UNUSED(port);

	stm32_setup_pins(pinconf, ARRAY_SIZE(pinconf));

	return 0;
}

SYS_INIT(pinmux_stm32_init, PRE_KERNEL_1,
		CONFIG_PINMUX_STM32_DEVICE_INITIALIZATION_PRIORITY);
