# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
#		http://www.samsung.com/

# Configuration options for the Samsung Exynos

menuconfig ARCH_EXYNOS
	bool "Samsung Exynos"
	depends on ARCH_MULTI_V7
	select ARCH_SUPPORTS_BIG_ENDIAN
	select ARM_AMBA
	select ARM_GIC
	select EXYNOS_IRQ_COMBINER
	select COMMON_CLK_SAMSUNG
	select EXYNOS_CHIPID
	select EXYNOS_THERMAL
	select EXYNOS_PMU
	select EXYNOS_SROM
	select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS
	select HAVE_ARM_ARCH_TIMER if ARCH_EXYNOS5
	select HAVE_ARM_SCU if SMP
	select HAVE_S3C2410_I2C if I2C
	select HAVE_S3C_RTC if RTC_CLASS
	select PINCTRL
	select PINCTRL_EXYNOS
	select PM_GENERIC_DOMAINS if PM
	select S5P_DEV_MFC
	select SAMSUNG_MC
	select SOC_SAMSUNG
	select SRAM
	select THERMAL
	select THERMAL_OF
	select MFD_SYSCON
	select MEMORY
	select CLKSRC_EXYNOS_MCT
	select POWER_RESET
	select POWER_RESET_SYSCON
	select POWER_RESET_SYSCON_POWEROFF
	help
	  Support for Samsung Exynos SoCs

if ARCH_EXYNOS

config S5P_DEV_MFC
	bool
	help
	  Compile in setup memory (init) code for MFC

config ARCH_EXYNOS3
	bool "Samsung Exynos3"
	default y
	select ARM_CPU_SUSPEND if PM
	help
	  Samsung Exynos3 (Cortex-A7) SoC based systems

config ARCH_EXYNOS4
	bool "Samsung Exynos4"
	default y
	select ARM_CPU_SUSPEND if PM_SLEEP
	select CLKSRC_SAMSUNG_PWM if CPU_EXYNOS4210
	select CPU_EXYNOS4210
	select GIC_NON_BANKED
	help
	  Samsung Exynos4 (Cortex-A9) SoC based systems

config ARCH_EXYNOS5
	bool "Samsung Exynos5"
	default y
	help
	  Samsung Exynos5 (Cortex-A15/A7) SoC based systems

comment "Exynos SoCs"

config SOC_EXYNOS3250
	bool "Samsung Exynos3250"
	default y
	depends on ARCH_EXYNOS3

config CPU_EXYNOS4210
	bool "Samsung Exynos4210"
	default y
	depends on ARCH_EXYNOS4

config SOC_EXYNOS4412
	bool "Samsung Exynos4412"
	default y
	depends on ARCH_EXYNOS4

config SOC_EXYNOS5250
	bool "Samsung Exynos5250"
	default y
	depends on ARCH_EXYNOS5

config SOC_EXYNOS5260
	bool "Samsung Exynos5260"
	default y
	depends on ARCH_EXYNOS5

config SOC_EXYNOS5410
	bool "Samsung Exynos5410"
	default y
	depends on ARCH_EXYNOS5

config SOC_EXYNOS5420
	bool "Samsung Exynos5420"
	default y
	depends on ARCH_EXYNOS5
	select EXYNOS_MCPM if SMP
	select ARM_CCI400_PORT_CTRL
	select ARM_CPU_SUSPEND

config SOC_EXYNOS5800
	bool "Samsung EXYNOS5800"
	default y
	depends on SOC_EXYNOS5420
	select EXYNOS_REGULATOR_COUPLER

config EXYNOS_MCPM
	bool
	select MCPM

config EXYNOS_CPU_SUSPEND
	bool
	select ARM_CPU_SUSPEND
	default PM_SLEEP || ARM_EXYNOS_CPUIDLE

endif
