# SPDX-License-Identifier: GPL-2.0

config HAVE_CLK
	bool
	help
	  The <linux/clk.h> calls support software clock gating and
	  thus are a key power management tool on many systems.

config HAVE_CLK_PREPARE
	bool

config HAVE_LEGACY_CLK # TODO: Remove once all legacy users are migrated
	bool
	select HAVE_CLK
	help
	  Select this option when the clock API in <linux/clk.h> is implemented
	  by platform/architecture code. This method is deprecated. Modern
	  code should select COMMON_CLK instead and not define a custom
	  'struct clk'.

menuconfig COMMON_CLK
	bool "Common Clock Framework"
	depends on !HAVE_LEGACY_CLK
	select HAVE_CLK_PREPARE
	select HAVE_CLK
	select SRCU
	select RATIONAL
	help
	  The common clock framework is a single definition of struct
	  clk, useful across many platforms, as well as an
	  implementation of the clock API in include/linux/clk.h.
	  Architectures utilizing the common struct clk should select
	  this option.

if COMMON_CLK

config COMMON_CLK_WM831X
	tristate "Clock driver for WM831x/2x PMICs"
	depends on MFD_WM831X
	help
	  Supports the clocking subsystem of the WM831x/2x series of
	  PMICs from Wolfson Microelectronics.

source "drivers/clk/versatile/Kconfig"

config CLK_HSDK
	bool "PLL Driver for HSDK platform"
	depends on ARC_SOC_HSDK || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  This driver supports the HSDK core, system, ddr, tunnel and hdmi PLLs
	  control.

config LMK04832
	tristate "Ti LMK04832 JESD204B Compliant Clock Jitter Cleaner"
	depends on SPI
	select REGMAP_SPI
	help
	  Say yes here to build support for Texas Instruments' LMK04832 Ultra
	  Low-Noise JESD204B Compliant Clock Jitter Cleaner With Dual Loop PLLs

config COMMON_CLK_MAX77686
	tristate "Clock driver for Maxim 77620/77686/77802 MFD"
	depends on MFD_MAX77686 || MFD_MAX77620 || COMPILE_TEST
	help
	  This driver supports Maxim 77620/77686/77802 crystal oscillator
	  clock.

config COMMON_CLK_MAX9485
	tristate "Maxim 9485 Programmable Clock Generator"
	depends on I2C
	help
	  This driver supports Maxim 9485 Programmable Audio Clock Generator

config COMMON_CLK_RK808
	tristate "Clock driver for RK805/RK808/RK809/RK817/RK818"
	depends on MFD_RK808
	help
	  This driver supports RK805, RK809 and RK817, RK808 and RK818 crystal oscillator clock.
	  These multi-function devices have two fixed-rate oscillators, clocked at 32KHz each.
	  Clkout1 is always on, Clkout2 can off by control register.

config COMMON_CLK_HI655X
	tristate "Clock driver for Hi655x" if EXPERT
	depends on (MFD_HI655X_PMIC || COMPILE_TEST)
	select REGMAP
	default MFD_HI655X_PMIC
	help
	  This driver supports the hi655x PMIC clock. This
	  multi-function device has one fixed-rate oscillator, clocked
	  at 32KHz.

config COMMON_CLK_SCMI
	tristate "Clock driver controlled via SCMI interface"
	depends on ARM_SCMI_PROTOCOL || COMPILE_TEST
	help
	  This driver provides support for clocks that are controlled
	  by firmware that implements the SCMI interface.

	  This driver uses SCMI Message Protocol to interact with the
	  firmware providing all the clock controls.

config COMMON_CLK_SCPI
	tristate "Clock driver controlled via SCPI interface"
	depends on ARM_SCPI_PROTOCOL || COMPILE_TEST
	help
	  This driver provides support for clocks that are controlled
	  by firmware that implements the SCPI interface.

	  This driver uses SCPI Message Protocol to interact with the
	  firmware providing all the clock controls.

config COMMON_CLK_SI5341
	tristate "Clock driver for SiLabs 5341 and 5340 A/B/C/D devices"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports Silicon Labs Si5341 and Si5340 programmable clock
	  generators. Not all features of these chips are currently supported
	  by the driver, in particular it only supports XTAL input. The chip can
	  be pre-programmed to support other configurations and features not yet
	  implemented in the driver.

config COMMON_CLK_SI5351
	tristate "Clock driver for SiLabs 5351A/B/C"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports Silicon Labs 5351A/B/C programmable clock
	  generators.

config COMMON_CLK_SI514
	tristate "Clock driver for SiLabs 514 devices"
	depends on I2C
	depends on OF
	select REGMAP_I2C
	help
	  This driver supports the Silicon Labs 514 programmable clock
	  generator.

config COMMON_CLK_SI544
	tristate "Clock driver for SiLabs 544 devices"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports the Silicon Labs 544 programmable clock
	  generator.

config COMMON_CLK_SI570
	tristate "Clock driver for SiLabs 570 and compatible devices"
	depends on I2C
	depends on OF
	select REGMAP_I2C
	help
	  This driver supports Silicon Labs 570/571/598/599 programmable
	  clock generators.

config COMMON_CLK_BM1880
	bool "Clock driver for Bitmain BM1880 SoC"
	depends on ARCH_BITMAIN || COMPILE_TEST
	default ARCH_BITMAIN
	help
	  This driver supports the clocks on Bitmain BM1880 SoC.

config COMMON_CLK_CDCE706
	tristate "Clock driver for TI CDCE706 clock synthesizer"
	depends on I2C
	select REGMAP_I2C
	help
	  This driver supports TI CDCE706 programmable 3-PLL clock synthesizer.

config COMMON_CLK_CDCE925
	tristate "Clock driver for TI CDCE913/925/937/949 devices"
	depends on I2C
	depends on OF
	select REGMAP_I2C
	help
	  This driver supports the TI CDCE913/925/937/949 programmable clock
	  synthesizer. Each chip has different number of PLLs and outputs.
	  For example, the CDCE925 contains two PLLs with spread-spectrum
	  clocking support and five output dividers. The driver only supports
	  the following setup, and uses a fixed setting for the output muxes.
	  Y1 is derived from the input clock
	  Y2 and Y3 derive from PLL1
	  Y4 and Y5 derive from PLL2
	  Given a target output frequency, the driver will set the PLL and
	  divider to best approximate the desired output.

config COMMON_CLK_CS2000_CP
	tristate "Clock driver for CS2000 Fractional-N Clock Synthesizer & Clock Multiplier"
	depends on I2C
	help
	  If you say yes here you get support for the CS2000 clock multiplier.

config COMMON_CLK_FSL_FLEXSPI
	tristate "Clock driver for FlexSPI on Layerscape SoCs"
	depends on ARCH_LAYERSCAPE || COMPILE_TEST
	default ARCH_LAYERSCAPE && SPI_NXP_FLEXSPI
	help
	  On Layerscape SoCs there is a special clock for the FlexSPI
	  interface.

config COMMON_CLK_FSL_SAI
	bool "Clock driver for BCLK of Freescale SAI cores"
	depends on ARCH_LAYERSCAPE || COMPILE_TEST
	help
	  This driver supports the Freescale SAI (Synchronous Audio Interface)
	  to be used as a generic clock output. Some SoCs have restrictions
	  regarding the possible pin multiplexer settings. Eg. on some SoCs
	  two SAI interfaces can only be enabled together. If just one is
	  needed, the BCLK pin of the second one can be used as general
	  purpose clock output. Ideally, it can be used to drive an audio
	  codec (sometimes known as MCLK).

config COMMON_CLK_GEMINI
	bool "Clock driver for Cortina Systems Gemini SoC"
	depends on ARCH_GEMINI || COMPILE_TEST
	select MFD_SYSCON
	select RESET_CONTROLLER
	help
	  This driver supports the SoC clocks on the Cortina Systems Gemini
	  platform, also known as SL3516 or CS3516.

config COMMON_CLK_ASPEED
	bool "Clock driver for Aspeed BMC SoCs"
	depends on ARCH_ASPEED || COMPILE_TEST
	default ARCH_ASPEED
	select MFD_SYSCON
	select RESET_CONTROLLER
	help
	  This driver supports the SoC clocks on the Aspeed BMC platforms.

	  The G4 and G5 series, including the ast2400 and ast2500, are supported
	  by this driver.

config COMMON_CLK_S2MPS11
	tristate "Clock driver for S2MPS1X/S5M8767 MFD"
	depends on MFD_SEC_CORE || COMPILE_TEST
	help
	  This driver supports S2MPS11/S2MPS14/S5M8767 crystal oscillator
	  clock. These multi-function devices have two (S2MPS14) or three
	  (S2MPS11, S5M8767) fixed-rate oscillators, clocked at 32KHz each.

config CLK_TWL6040
	tristate "External McPDM functional clock from twl6040"
	depends on TWL6040_CORE
	help
	  Enable the external functional clock support on OMAP4+ platforms for
	  McPDM. McPDM module is using the external bit clock on the McPDM bus
	  as functional clock.

config COMMON_CLK_AXI_CLKGEN
	tristate "AXI clkgen driver"
	depends on HAS_IOMEM || COMPILE_TEST
	depends on OF
	help
	  Support for the Analog Devices axi-clkgen pcore clock generator for Xilinx
	  FPGAs. It is commonly used in Analog Devices' reference designs.

config CLK_QORIQ
	bool "Clock driver for Freescale QorIQ platforms"
	depends on OF
	depends on PPC_E500MC || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST
	help
	  This adds the clock driver support for Freescale QorIQ platforms
	  using common clock framework.

config CLK_LS1028A_PLLDIG
        tristate "Clock driver for LS1028A Display output"
        depends on ARCH_LAYERSCAPE || COMPILE_TEST
        default ARCH_LAYERSCAPE
        help
          This driver support the Display output interfaces(LCD, DPHY) pixel clocks
          of the QorIQ Layerscape LS1028A, as implemented TSMC CLN28HPM PLL. Not all
          features of the PLL are currently supported by the driver. By default,
          configured bypass mode with this PLL.

config COMMON_CLK_XGENE
	bool "Clock driver for APM XGene SoC"
	default ARCH_XGENE
	depends on ARM64 || COMPILE_TEST
	help
	  Support for the APM X-Gene SoC reference, PLL, and device clocks.

config COMMON_CLK_LOCHNAGAR
	tristate "Cirrus Logic Lochnagar clock driver"
	depends on MFD_LOCHNAGAR
	help
	  This driver supports the clocking features of the Cirrus Logic
	  Lochnagar audio development board.

config COMMON_CLK_NXP
	def_bool COMMON_CLK && (ARCH_LPC18XX || ARCH_LPC32XX)
	select REGMAP_MMIO if ARCH_LPC32XX
	select MFD_SYSCON if ARCH_LPC18XX
	help
	  Support for clock providers on NXP platforms.

config COMMON_CLK_PALMAS
	tristate "Clock driver for TI Palmas devices"
	depends on MFD_PALMAS
	help
	  This driver supports TI Palmas devices 32KHz output KG and KG_AUDIO
	  using common clock framework.

config COMMON_CLK_PWM
	tristate "Clock driver for PWMs used as clock outputs"
	depends on PWM
	help
	  Adapter driver so that any PWM output can be (mis)used as clock signal
	  at 50% duty cycle.

config COMMON_CLK_PXA
	def_bool COMMON_CLK && ARCH_PXA
	help
	  Support for the Marvell PXA SoC.

config COMMON_CLK_PIC32
	def_bool COMMON_CLK && MACH_PIC32

config COMMON_CLK_OXNAS
	bool "Clock driver for the OXNAS SoC Family"
	depends on ARCH_OXNAS || COMPILE_TEST
	select MFD_SYSCON
	help
	  Support for the OXNAS SoC Family clocks.

config COMMON_CLK_VC5
	tristate "Clock driver for IDT VersaClock 5,6 devices"
	depends on I2C
	depends on OF
	select REGMAP_I2C
	help
	  This driver supports the IDT VersaClock 5 and VersaClock 6
	  programmable clock generators.

config COMMON_CLK_STM32MP157
	def_bool COMMON_CLK && MACH_STM32MP157
	help
	  Support for stm32mp157 SoC family clocks

config COMMON_CLK_STM32MP157_SCMI
	bool "stm32mp157 Clock driver with Trusted Firmware"
	depends on COMMON_CLK_STM32MP157
	select COMMON_CLK_SCMI
	select ARM_SCMI_PROTOCOL
	default y
	help
	  Support for stm32mp157 SoC family clocks with Trusted Firmware using
	  SCMI protocol.

config COMMON_CLK_STM32F
	def_bool COMMON_CLK && (MACH_STM32F429 || MACH_STM32F469 || MACH_STM32F746)
	help
	  Support for stm32f4 and stm32f7 SoC families clocks

config COMMON_CLK_STM32H7
	def_bool COMMON_CLK && MACH_STM32H743
	help
	  Support for stm32h7 SoC family clocks

config COMMON_CLK_MMP2
	def_bool COMMON_CLK && (MACH_MMP2_DT || MACH_MMP3_DT)
	help
	  Support for Marvell MMP2 and MMP3 SoC clocks

config COMMON_CLK_MMP2_AUDIO
        tristate "Clock driver for MMP2 Audio subsystem"
        depends on COMMON_CLK_MMP2 || COMPILE_TEST
        help
          This driver supports clocks for Audio subsystem on MMP2 SoC.

config COMMON_CLK_BD718XX
	tristate "Clock driver for 32K clk gates on ROHM PMICs"
	depends on MFD_ROHM_BD718XX || MFD_ROHM_BD71828
	help
	  This driver supports ROHM BD71837, BD71847, BD71850, BD71815
	  and BD71828 PMICs clock gates.

config COMMON_CLK_FIXED_MMIO
	bool "Clock driver for Memory Mapped Fixed values"
	depends on COMMON_CLK && OF
	depends on HAS_IOMEM
	help
	  Support for Memory Mapped IO Fixed clocks

config COMMON_CLK_K210
	bool "Clock driver for the Canaan Kendryte K210 SoC"
	depends on OF && RISCV && SOC_CANAAN
	default SOC_CANAAN
	help
	  Support for the Canaan Kendryte K210 RISC-V SoC clocks.

source "drivers/clk/actions/Kconfig"
source "drivers/clk/analogbits/Kconfig"
source "drivers/clk/baikal-t1/Kconfig"
source "drivers/clk/bcm/Kconfig"
source "drivers/clk/hisilicon/Kconfig"
source "drivers/clk/imgtec/Kconfig"
source "drivers/clk/imx/Kconfig"
source "drivers/clk/ingenic/Kconfig"
source "drivers/clk/keystone/Kconfig"
source "drivers/clk/mediatek/Kconfig"
source "drivers/clk/meson/Kconfig"
source "drivers/clk/mstar/Kconfig"
source "drivers/clk/mvebu/Kconfig"
source "drivers/clk/pistachio/Kconfig"
source "drivers/clk/qcom/Kconfig"
source "drivers/clk/ralink/Kconfig"
source "drivers/clk/renesas/Kconfig"
source "drivers/clk/rockchip/Kconfig"
source "drivers/clk/samsung/Kconfig"
source "drivers/clk/sifive/Kconfig"
source "drivers/clk/socfpga/Kconfig"
source "drivers/clk/sprd/Kconfig"
source "drivers/clk/sunxi/Kconfig"
source "drivers/clk/sunxi-ng/Kconfig"
source "drivers/clk/tegra/Kconfig"
source "drivers/clk/ti/Kconfig"
source "drivers/clk/uniphier/Kconfig"
source "drivers/clk/x86/Kconfig"
source "drivers/clk/xilinx/Kconfig"
source "drivers/clk/zynqmp/Kconfig"

endif
