# SPDX-License-Identifier: GPL-2.0-only
# Recent Exynos platforms should just select COMMON_CLK_SAMSUNG:
config COMMON_CLK_SAMSUNG
	bool "Samsung Exynos clock controller support" if COMPILE_TEST
	select S3C64XX_COMMON_CLK if ARM && ARCH_S3C64XX
	select S5PV210_COMMON_CLK if ARM && ARCH_S5PV210
	select EXYNOS_3250_COMMON_CLK if ARM && SOC_EXYNOS3250
	select EXYNOS_4_COMMON_CLK if ARM && ARCH_EXYNOS4
	select EXYNOS_5250_COMMON_CLK if ARM && SOC_EXYNOS5250
	select EXYNOS_5260_COMMON_CLK if ARM && SOC_EXYNOS5260
	select EXYNOS_5410_COMMON_CLK if ARM && SOC_EXYNOS5410
	select EXYNOS_5420_COMMON_CLK if ARM && SOC_EXYNOS5420
	select EXYNOS_ARM64_COMMON_CLK if ARM64 && ARCH_EXYNOS
	select TESLA_FSD_COMMON_CLK if ARM64 && ARCH_TESLA_FSD

config S3C64XX_COMMON_CLK
	bool "Samsung S3C64xx clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung S3C64xx SoCs.
	  Choose Y here only if you build for this SoC.

config S5PV210_COMMON_CLK
	bool "Samsung S5Pv210 clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung S5Pv210 SoCs.
	  Choose Y here only if you build for this SoC.

config EXYNOS_3250_COMMON_CLK
	bool "Samsung Exynos3250 clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung
	  Exynos3250 SoCs. Choose Y here only if you build for this SoC.

config EXYNOS_4_COMMON_CLK
	bool "Samsung Exynos4 clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung
	  Exynos4212 and Exynos4412 SoCs. Choose Y here only if you build for
	  this SoC.

config EXYNOS_5250_COMMON_CLK
	bool "Samsung Exynos5250 clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung
	  Exynos5250 SoCs. Choose Y here only if you build for this SoC.

config EXYNOS_5260_COMMON_CLK
	bool "Samsung Exynos5260 clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung
	  Exynos5260 SoCs. Choose Y here only if you build for this SoC.

config EXYNOS_5410_COMMON_CLK
	bool "Samsung Exynos5410 clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung
	  Exynos5410 SoCs. Choose Y here only if you build for this SoC.

config EXYNOS_5420_COMMON_CLK
	bool "Samsung Exynos5420 clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung
	  Exynos5420/Exynos5422/Exynos5800 SoCs. Choose Y here only if you
	  build for this SoC.

config EXYNOS_ARM64_COMMON_CLK
	bool "Samsung Exynos ARMv8-family clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG

config EXYNOS_AUDSS_CLK_CON
	tristate "Samsung Exynos AUDSS clock controller support"
	depends on COMMON_CLK_SAMSUNG
	default y if ARCH_EXYNOS
	help
	  Support for the Audio Subsystem CLKCON clock controller present
	  on some Samsung Exynos SoC variants. Choose M or Y here if you want
	  to use audio devices such as I2S, PCM, etc.

config EXYNOS_CLKOUT
	tristate "Samsung Exynos clock output driver"
	depends on COMMON_CLK_SAMSUNG
	default y if ARCH_EXYNOS
	help
	  Support for the clock output (XCLKOUT) present on some of Samsung
	  Exynos SoC variants. Usually the XCLKOUT is used to monitor the
	  status of the certains clocks from SoC, but it could also be tied to
	  other devices as an input clock.

config TESLA_FSD_COMMON_CLK
	bool "Tesla FSD clock controller support" if COMPILE_TEST
	depends on COMMON_CLK_SAMSUNG
	depends on EXYNOS_ARM64_COMMON_CLK
	help
	  Support for the clock controller present on the Tesla FSD SoC.
	  Choose Y here only if you build for this SoC.
