#
# ARM CPU Frequency scaling drivers
#

# big LITTLE core layer and glue drivers
config ARM_BIG_LITTLE_CPUFREQ
	tristate "Generic ARM big LITTLE CPUfreq driver"
	depends on ARM && BIG_LITTLE && ARM_CPU_TOPOLOGY && HAVE_CLK
	select PM_OPP
	help
	  This enables the Generic CPUfreq driver for ARM big.LITTLE platforms.

config ARM_DT_BL_CPUFREQ
	tristate "Generic probing via DT for ARM big LITTLE CPUfreq driver"
	depends on ARM_BIG_LITTLE_CPUFREQ && OF
	help
	  This enables probing via DT for Generic CPUfreq driver for ARM
	  big.LITTLE platform. This gets frequency tables from DT.

config ARM_VEXPRESS_SPC_CPUFREQ
        tristate "Versatile Express SPC based CPUfreq driver"
	depends on ARM_BIG_LITTLE_CPUFREQ && ARCH_VEXPRESS_SPC
        help
          This add the CPUfreq driver support for Versatile Express
	  big.LITTLE platforms using SPC for power management.


config ARM_EXYNOS_CPUFREQ
	bool

config ARM_EXYNOS4210_CPUFREQ
	bool "SAMSUNG EXYNOS4210"
	depends on CPU_EXYNOS4210
	default y
	select ARM_EXYNOS_CPUFREQ
	help
	  This adds the CPUFreq driver for Samsung EXYNOS4210
	  SoC (S5PV310 or S5PC210).

	  If in doubt, say N.

config ARM_EXYNOS4X12_CPUFREQ
	bool "SAMSUNG EXYNOS4x12"
	depends on SOC_EXYNOS4212 || SOC_EXYNOS4412
	default y
	select ARM_EXYNOS_CPUFREQ
	help
	  This adds the CPUFreq driver for Samsung EXYNOS4X12
	  SoC (EXYNOS4212 or EXYNOS4412).

	  If in doubt, say N.

config ARM_EXYNOS5250_CPUFREQ
	bool "SAMSUNG EXYNOS5250"
	depends on SOC_EXYNOS5250
	default y
	select ARM_EXYNOS_CPUFREQ
	help
	  This adds the CPUFreq driver for Samsung EXYNOS5250
	  SoC.

	  If in doubt, say N.

config ARM_EXYNOS5440_CPUFREQ
	bool "SAMSUNG EXYNOS5440"
	depends on SOC_EXYNOS5440
	depends on HAVE_CLK && OF
	select PM_OPP
	default y
	help
	  This adds the CPUFreq driver for Samsung EXYNOS5440
	  SoC. The nature of exynos5440 clock controller is
	  different than previous exynos controllers so not using
	  the common exynos framework.

	  If in doubt, say N.

config ARM_EXYNOS_CPU_FREQ_BOOST_SW
	bool "EXYNOS Frequency Overclocking - Software"
	depends on ARM_EXYNOS_CPUFREQ
	select CPU_FREQ_BOOST_SW
	select EXYNOS_THERMAL
	help
	  This driver supports software managed overclocking (BOOST).
	  It allows usage of special frequencies for Samsung Exynos
	  processors if thermal conditions are appropriate.

	  It requires, for safe operation, thermal framework with properly
	  defined trip points.

	  If in doubt, say N.

config ARM_HIGHBANK_CPUFREQ
	tristate "Calxeda Highbank-based"
	depends on ARCH_HIGHBANK && GENERIC_CPUFREQ_CPU0 && REGULATOR
	default m
	help
	  This adds the CPUFreq driver for Calxeda Highbank SoC
	  based boards.

	  If in doubt, say N.

config ARM_IMX6Q_CPUFREQ
	tristate "Freescale i.MX6 cpufreq support"
	depends on ARCH_MXC
	depends on REGULATOR_ANATOP
	help
	  This adds cpufreq driver support for Freescale i.MX6 series SoCs.

	  If in doubt, say N.

config ARM_INTEGRATOR
	tristate "CPUfreq driver for ARM Integrator CPUs"
	depends on ARCH_INTEGRATOR
	default y
	help
	  This enables the CPUfreq driver for ARM Integrator CPUs.
	  If in doubt, say Y.

config ARM_KIRKWOOD_CPUFREQ
	def_bool MACH_KIRKWOOD
	help
	  This adds the CPUFreq driver for Marvell Kirkwood
	  SoCs.

config ARM_OMAP2PLUS_CPUFREQ
	bool "TI OMAP2+"
	depends on ARCH_OMAP2PLUS
	default ARCH_OMAP2PLUS

config ARM_S3C_CPUFREQ
	bool
	help
	  Internal configuration node for common cpufreq on Samsung SoC

config ARM_S3C24XX_CPUFREQ
	bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)"
	depends on ARCH_S3C24XX
	select ARM_S3C_CPUFREQ
	help
	  This enables the CPUfreq driver for the Samsung S3C24XX family
	  of CPUs.

	  For details, take a look at <file:Documentation/cpu-freq>.

	  If in doubt, say N.

config ARM_S3C24XX_CPUFREQ_DEBUG
	bool "Debug CPUfreq Samsung driver core"
	depends on ARM_S3C24XX_CPUFREQ
	help
	  Enable s3c_freq_dbg for the Samsung S3C CPUfreq core

config ARM_S3C24XX_CPUFREQ_IODEBUG
	bool "Debug CPUfreq Samsung driver IO timing"
	depends on ARM_S3C24XX_CPUFREQ
	help
	  Enable s3c_freq_iodbg for the Samsung S3C CPUfreq core

config ARM_S3C24XX_CPUFREQ_DEBUGFS
	bool "Export debugfs for CPUFreq"
	depends on ARM_S3C24XX_CPUFREQ && DEBUG_FS
	help
	  Export status information via debugfs.

config ARM_S3C2410_CPUFREQ
	bool
	depends on ARM_S3C24XX_CPUFREQ && CPU_S3C2410
	select S3C2410_CPUFREQ_UTILS
	help
	  CPU Frequency scaling support for S3C2410

config ARM_S3C2412_CPUFREQ
	bool
	depends on ARM_S3C24XX_CPUFREQ && CPU_S3C2412
	default y
	select S3C2412_IOTIMING
	help
	  CPU Frequency scaling support for S3C2412 and S3C2413 SoC CPUs.

config ARM_S3C2416_CPUFREQ
	bool "S3C2416 CPU Frequency scaling support"
	depends on CPU_S3C2416
	help
	  This adds the CPUFreq driver for the Samsung S3C2416 and
	  S3C2450 SoC. The S3C2416 supports changing the rate of the
	  armdiv clock source and also entering a so called dynamic
	  voltage scaling mode in which it is possible to reduce the
	  core voltage of the CPU.

	  If in doubt, say N.

config ARM_S3C2416_CPUFREQ_VCORESCALE
	bool "Allow voltage scaling for S3C2416 arm core"
	depends on ARM_S3C2416_CPUFREQ && REGULATOR
	help
	  Enable CPU voltage scaling when entering the dvs mode.
	  It uses information gathered through existing hardware and
	  tests but not documented in any datasheet.

	  If in doubt, say N.

config ARM_S3C2440_CPUFREQ
	bool "S3C2440/S3C2442 CPU Frequency scaling support"
	depends on ARM_S3C24XX_CPUFREQ && (CPU_S3C2440 || CPU_S3C2442)
	select S3C2410_CPUFREQ_UTILS
	default y
	help
	  CPU Frequency scaling support for S3C2440 and S3C2442 SoC CPUs.

config ARM_S3C64XX_CPUFREQ
	bool "Samsung S3C64XX"
	depends on CPU_S3C6410
	default y
	help
	  This adds the CPUFreq driver for Samsung S3C6410 SoC.

	  If in doubt, say N.

config ARM_S5PV210_CPUFREQ
	bool "Samsung S5PV210 and S5PC110"
	depends on CPU_S5PV210
	default y
	help
	  This adds the CPUFreq driver for Samsung S5PV210 and
	  S5PC110 SoCs.

	  If in doubt, say N.

config ARM_SA1100_CPUFREQ
	bool

config ARM_SA1110_CPUFREQ
	bool

config ARM_SPEAR_CPUFREQ
	bool "SPEAr CPUFreq support"
	depends on PLAT_SPEAR
	default y
	help
	  This adds the CPUFreq driver support for SPEAr SOCs.

config ARM_TEGRA_CPUFREQ
	bool "TEGRA CPUFreq support"
	depends on ARCH_TEGRA
	default y
	help
	  This adds the CPUFreq driver support for TEGRA SOCs.
