
config CLKDEV_LOOKUP
	bool
	select HAVE_CLK

config HAVE_CLK_PREPARE
	bool

config COMMON_CLK
	bool
	select HAVE_CLK_PREPARE
	select CLKDEV_LOOKUP
	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.

menu "Common Clock Framework"
	depends on 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 OF || COMPILE_TEST
	---help---
	  This driver supports the HSDK core, system, ddr, tunnel and hdmi PLLs
	  control.

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_RK808
	tristate "Clock driver for RK805/RK808/RK818"
	depends on MFD_RK808
	---help---
	  This driver supports RK805, 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"
	depends on MFD_HI655X_PMIC || COMPILE_TEST
	---help---
	  This driver supports the hi655x PMIC clock. This
	  multi-function device has one fixed-rate oscillator, clocked
	  at 32KHz.

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_SI5351
	tristate "Clock driver for SiLabs 5351A/B/C"
	depends on I2C
	select REGMAP_I2C
	select RATIONAL
	---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
	---help---
	  This driver supports the Silicon Labs 514 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
	---help---
	  This driver supports Silicon Labs 570/571/598/599 programmable
	  clock generators.

config COMMON_CLK_CDCE706
	tristate "Clock driver for TI CDCE706 clock synthesizer"
	depends on I2C
	select REGMAP_I2C
	select RATIONAL
	---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
	---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_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_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 ARCH_ZYNQ || MICROBLAZE || COMPILE_TEST
	help
	---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 (PPC_E500MC || ARM || ARM64 || COMPILE_TEST) && OF
	---help---
	  This adds the clock driver support for Freescale QorIQ platforms
	  using common clock framework.

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

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
	---help---
	  This driver supports the IDT VersaClock 5 and VersaClock 6
	  programmable clock generators.

config GEM5_CPUFREQ_CLK
	bool "Clk driver for GEM5 Platform"
	---help---
	  Enable clk hardware for cpufreq in gem5 platforms

source "drivers/clk/bcm/Kconfig"
source "drivers/clk/hisilicon/Kconfig"
source "drivers/clk/imgtec/Kconfig"
source "drivers/clk/keystone/Kconfig"
source "drivers/clk/mediatek/Kconfig"
source "drivers/clk/meson/Kconfig"
source "drivers/clk/mvebu/Kconfig"
source "drivers/clk/qcom/Kconfig"
source "drivers/clk/renesas/Kconfig"
source "drivers/clk/samsung/Kconfig"
source "drivers/clk/sunxi-ng/Kconfig"
source "drivers/clk/tegra/Kconfig"
source "drivers/clk/ti/Kconfig"
source "drivers/clk/uniphier/Kconfig"

endmenu
