# 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

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.

# For S3C24XX platforms, select following symbols:
config S3C2410_COMMON_CLK
	bool "Samsung S3C2410 clock controller support" if COMPILE_TEST
	select COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung
	  S3C2410/S3C2440/S3C2442 SoCs. Choose Y here only if you build for
	  this SoC.

config S3C2410_COMMON_DCLK
	bool
	select COMMON_CLK_SAMSUNG
	select REGMAP_MMIO
	help
	  Support for the dclk clock controller present on the Samsung
	  S3C2410/S3C2412/S3C2440/S3C2443 SoCs. Choose Y here only if you build
	  for this SoC.

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

config S3C2443_COMMON_CLK
	bool "Samsung S3C2443 clock controller support" if COMPILE_TEST
	select COMMON_CLK_SAMSUNG
	help
	  Support for the clock controller present on the Samsung
	  S3C2416/S3C2443 SoCs. Choose Y here only if you build for this SoC.
