# STM32 MCU clock control driver config

# Copyright (c) 2017 Linaro
# Copyright (c) 2017 RnDity Sp. z o.o.
# SPDX-License-Identifier: Apache-2.0

menuconfig CLOCK_CONTROL_STM32_CUBE
	bool "STM32 Reset & Clock Control"
	depends on SOC_FAMILY_STM32
	default y
	select USE_STM32_LL_UTILS
	select USE_STM32_LL_RCC if (SOC_SERIES_STM32MP1X || SOC_SERIES_STM32H7X || \
		SOC_SERIES_STM32H7RSX || SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X)
	select RUNTIME_NMI if ($(dt_nodelabel_enabled,clk_hse) && \
		$(dt_nodelabel_has_prop,clk_hse,css-enabled))
	help
	  Enable driver for Reset & Clock Control subsystem found
	  in STM32 family of MCUs

if CLOCK_CONTROL_STM32_CUBE

DT_STM32_HSE_CLOCK := $(dt_nodelabel_path,clk_hse)
DT_STM32_HSE_CLOCK_FREQ := $(dt_node_int_prop_int,$(DT_STM32_HSE_CLOCK),clock-frequency)

config CLOCK_STM32_HSE_CLOCK
	int "HSE clock value"
	default "$(DT_STM32_HSE_CLOCK_FREQ)" if "$(dt_nodelabel_enabled,clk_hse)"
	default 8000000
	help
	  Value of external high-speed clock (HSE). This symbol could be optionally
	  configured using device tree by setting "clock-frequency" value of clk_hse
	  node. For instance:
	  &clk_hse{
	  status = "okay";
	  clock-frequency = <DT_FREQ_M(25)>;
	  };
	  Note: Device tree configuration is overridden when current symbol is set:
	  CONFIG_CLOCK_STM32_HSE_CLOCK=32000000

config CLOCK_STM32_MUX
	bool "STM32 clock mux driver"
	default y
	depends on DT_HAS_ST_STM32_CLOCK_MUX_ENABLED
	help
	  Enable driver for STM32 clock mux which don't match an
	  existing clock hardware block but allows to select a clock
	  for a specific domain. For instance per_ck clock on STM32H7 or
	  CLK48 clock

menu "STM32WB0 LSI options"
	depends on DT_HAS_ST_STM32WB0_LSI_CLOCK_ENABLED

config STM32WB0_LSI_MEASUREMENT_WINDOW
	int "Size of LSI measurement window (in periods)"
	default 32
	range 23 256
	help
	  Size of the LSI measurement window (# of LSI periods)

	  The measurement process involves waiting for a certain amount of LSI periods
	  to occur, in order to determine precisely the LSI period, and thus frequency.

	  This property controls how much LSI periods are required for each measure.
	  Bigger window sizes increase accuracy of the measure, but increase the time
	  needed to complete it. Since fLSI >= 24kHz, increasing the measurement window
	  size makes each measure roughly 42µs slower in the worst case.

	  Minimal value is a recommendation from RM0505 Rev.1 §25.8.2, and maximum
	  value is a hardware limitation.

config STM32WB0_LSI_RUNTIME_MEASUREMENT_INTERVAL
	int "LSI run-time measurement interval (ms)"
	default 0
	help
	  Interval at which runtime measurements should be performed, in milliseconds

	  Since the LSI RC frequency is affected by temperature, which is not stable
	  across time, it is recommended to perform measurements of the LSI frequency
	  at regular intervals to obtain better accuracy.

	  This property enables runtime LSI measurement if present. In this case,
	  a background thread is created and performs LSI measurements, sleeping
	  the amount of time specified in this property between each measure. This
	  thread is also tasked with updating the control registers of peripherals
	  affected by slow clock drift such as RTC or IWDG, in collaboration with
	  the peripherals' drivers. Note that this increases the memory footprint
	  of the clock control driver, and may increase power consumption.

	  Setting this option to the default value of "0" disables runtime frequency
	  measurements - the result of a single measure performed at boot will be
	  treated as LSI frequency for the lifetime of the application.

endmenu # DT_HAS_ST_STM32WB0_LSI_CLOCK_ENABLED

# Micro-controller Clock Output (MCO) configuration options
config CLOCK_STM32_MCO
	bool
	default y
	depends on DT_HAS_ST_STM32_CLOCK_MCO_ENABLED || DT_HAS_ST_STM32F1_CLOCK_MCO_ENABLED
	# Although deprecated, MCO configuration via Kconfig takes priority over Device Tree.
	# Prevent DT-based MCO driver from compiling when Kconfig is used.
	depends on CLOCK_STM32_MCO1_SRC_NOCLOCK && CLOCK_STM32_MCO2_SRC_NOCLOCK

choice
	prompt "STM32 MCO1 Clock Source"
	default CLOCK_STM32_MCO1_SRC_NOCLOCK

config CLOCK_STM32_MCO1_SRC_NOCLOCK
	bool "NOCLOCK"
	help
	  MCO1 output disabled, no clock on MCO1

config CLOCK_STM32_MCO1_SRC_EXT_HSE
	bool "EXT_HSE"
	depends on SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE
	select DEPRECATED
	help
	  Use EXT_HSE as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_LSE
	bool "LSE"
	depends on SOC_SERIES_STM32F4X || \
	           SOC_SERIES_STM32F7X || \
	           SOC_SERIES_STM32L4X || \
	           SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X || \
	           SOC_SERIES_STM32U5X
	select DEPRECATED
	help
	  Use LSE as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_HSE
	bool "HSE"
	depends on SOC_SERIES_STM32F1X || \
	           SOC_SERIES_STM32F4X || \
	           SOC_SERIES_STM32F7X || \
	           SOC_SERIES_STM32L4X || \
	           SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X || \
	           SOC_SERIES_STM32U5X
	select DEPRECATED
	help
	  Use HSE as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_LSI
	bool "LSI"
	depends on SOC_SERIES_STM32L4X || \
	           SOC_SERIES_STM32U5X
	select DEPRECATED
	help
	  Use LSI as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_MSI
	bool "MSI"
	depends on SOC_SERIES_STM32L4X
	select DEPRECATED
	help
	  Use MSI as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_MSIK
	bool "MSIK"
	depends on SOC_SERIES_STM32U5X
	select DEPRECATED
	help
	  Use MSIK as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_MSIS
	bool "MSIS"
	depends on SOC_SERIES_STM32U5X
	select DEPRECATED
	help
	  Use MSIS as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_HSI
	bool "HSI"
	depends on SOC_SERIES_STM32F1X || \
	           SOC_SERIES_STM32F4X || \
	           SOC_SERIES_STM32F7X || \
	           SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X
	select DEPRECATED
	help
	  Use HSI as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_HSI16
	bool "HSI16"
	depends on SOC_SERIES_STM32L4X || \
		   SOC_SERIES_STM32U5X
	select DEPRECATED
	help
	  Use HSI16 as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_HSI48
	bool "HSI48"
	depends on SOC_SERIES_STM32L4X || \
	           SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X || \
	           SOC_SERIES_STM32U5X
	select DEPRECATED
	help
	  Use HSI48 as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_PLLCLK
	bool "PLLCLK"
	depends on SOC_SERIES_STM32F4X || \
	           SOC_SERIES_STM32F7X || \
		   SOC_SERIES_STM32L4X || \
		   SOC_SERIES_STM32U5X
	select DEPRECATED
	help
	  Use PLLCLK as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_PLLQCLK
	bool "PLLQ"
	depends on SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X
	select DEPRECATED
	help
	  Use PLLQ as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_PLLCLK_DIV2
	bool "PLLCLK_DIV2"
	depends on SOC_SERIES_STM32F1X
	select DEPRECATED
	help
	  Use PLLCLK/2 as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_PLL2CLK
	bool "PLL2CLK"
	depends on SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE
	select DEPRECATED
	help
	  Use PLL2CLK as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_PLLI2SCLK
	bool "PLLI2SCLK"
	depends on SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE
	select DEPRECATED
	help
	  Use PLLI2SCLK as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_PLLI2SCLK_DIV2
	bool "PLLI2SCLK_DIV2"
	depends on SOC_STM32F10X_CONNECTIVITY_LINE_DEVICE
	select DEPRECATED
	help
	  Use PLLI2SCLK/2 as source of MCO1
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO1_SRC_SYSCLK
	bool "SYSCLK"
	depends on SOC_SERIES_STM32F1X || \
	           SOC_SERIES_STM32L4X || \
	           SOC_SERIES_STM32U5X
	select DEPRECATED
	help
	  Use SYSCLK as source of MCO1
	  This option is deprecated, please use devicetree instead.

endchoice

config CLOCK_STM32_MCO1_DIV
	int "MCO1 prescaler"
	depends on !CLOCK_STM32_MCO1_SRC_NOCLOCK && (\
	             SOC_SERIES_STM32F4X || \
	             SOC_SERIES_STM32F7X || \
	             SOC_SERIES_STM32L4X || \
	             SOC_SERIES_STM32H7X || \
	             SOC_SERIES_STM32H7RSX || \
	             SOC_SERIES_STM32H5X || \
	             SOC_SERIES_STM32U5X \
	           )
	default 1
	range 1   5 if SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
	range 1   15 if SOC_SERIES_STM32H7X || SOC_SERIES_STM32H7RSX || SOC_SERIES_STM32H5X
	range 1   16 if SOC_SERIES_STM32L4X || SOC_SERIES_STM32U5X
	help
	  Prescaler for MCO1 output clock
	  This option is deprecated, please use devicetree instead.

choice
	prompt "STM32 MCO2 Clock Source"
	default CLOCK_STM32_MCO2_SRC_NOCLOCK

config CLOCK_STM32_MCO2_SRC_NOCLOCK
	bool "NOCLOCK"
	help
	  MCO2 output disabled, no clock on MCO2

config CLOCK_STM32_MCO2_SRC_SYSCLK
	bool "SYSCLK"
	depends on SOC_SERIES_STM32F4X || \
	           SOC_SERIES_STM32F7X || \
	           SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X
	select DEPRECATED
	help
	  Use SYSCLK as source of MCO2
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO2_SRC_PLLI2S
	bool "PLLI2S"
	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
	select DEPRECATED
	help
	  Use PLLI2S as source of MCO2
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO2_SRC_HSE
	bool "HSE"
	depends on SOC_SERIES_STM32F4X || \
	           SOC_SERIES_STM32F7X || \
	           SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X
	select DEPRECATED
	help
	  Use HSE as source of MCO2
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO2_SRC_LSI
	bool "LSI"
	depends on SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X
	help
	  Use LSI as source of MCO2
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO2_SRC_CSI
	bool "CSI"
	depends on SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X
	select DEPRECATED
	help
	  Use CSI as source of MCO2
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO2_SRC_PLLCLK
	bool "PLLCLK"
	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
	select DEPRECATED
	help
	  Use PLLCLK as source of MCO2
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO2_SRC_PLLPCLK
	bool "PLLPCLK"
	depends on SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X
	select DEPRECATED
	help
	  Use PLLPCLK as source of MC02
	  This option is deprecated, please use devicetree instead.

config CLOCK_STM32_MCO2_SRC_PLL2PCLK
	bool "PLL2PCLK"
	depends on SOC_SERIES_STM32H7X || \
	           SOC_SERIES_STM32H7RSX || \
	           SOC_SERIES_STM32H5X
	select DEPRECATED
	help
	  Use PLL2PCLK as source of MC02
	  This option is deprecated, please use devicetree instead.

endchoice

config CLOCK_STM32_MCO2_DIV
	int "MCO2 prescaler"
	depends on !CLOCK_STM32_MCO2_SRC_NOCLOCK && (\
	             SOC_SERIES_STM32F4X || \
	             SOC_SERIES_STM32F7X || \
	             SOC_SERIES_STM32H5X || \
	             SOC_SERIES_STM32H7X || \
	             SOC_SERIES_STM32H7RSX \
	           )
	default 1
	range 1 5 if SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X
	range 1 15 if SOC_SERIES_STM32H7X || SOC_SERIES_STM32H7RSX || SOC_SERIES_STM32H5X
	help
	  Prescaler for MCO2 output clock

endif # CLOCK_CONTROL_STM32_CUBE
