# SPDX-License-Identifier: GPL-2.0
#
# Samsung SoC drivers
#
menuconfig SOC_SAMSUNG
	bool "Samsung SoC driver support" if COMPILE_TEST

if SOC_SAMSUNG

# There is no need to enable these drivers for ARMv8
config EXYNOS_ASV_ARM
	bool "Exynos ASV ARMv7-specific driver extensions" if COMPILE_TEST
	depends on EXYNOS_CHIPID

config EXYNOS_CHIPID
	bool "Exynos ChipID controller and ASV driver" if COMPILE_TEST
	depends on ARCH_EXYNOS || COMPILE_TEST
	select EXYNOS_ASV_ARM if ARM && ARCH_EXYNOS
	select MFD_SYSCON
	select SOC_BUS
	help
	  Support for Samsung Exynos SoC ChipID and Adaptive Supply Voltage.

config EXYNOS_PMU
	bool "Exynos PMU controller driver" if COMPILE_TEST
	depends on ARCH_EXYNOS || ((ARM || ARM64) && COMPILE_TEST)
	select EXYNOS_PMU_ARM_DRIVERS if ARM && ARCH_EXYNOS

# There is no need to enable these drivers for ARMv8
config EXYNOS_PMU_ARM_DRIVERS
	bool "Exynos PMU ARMv7-specific driver extensions" if COMPILE_TEST
	depends on EXYNOS_PMU

config EXYNOS_PM_DOMAINS
	bool "Exynos PM domains" if COMPILE_TEST
	depends on (ARCH_EXYNOS && PM_GENERIC_DOMAINS) || COMPILE_TEST

config SAMSUNG_PM_DEBUG
	bool "Samsung PM Suspend debug"
	depends on PM && DEBUG_KERNEL
	depends on PLAT_S3C24XX || ARCH_S3C64XX || ARCH_S5PV210
	depends on DEBUG_S3C24XX_UART || DEBUG_S3C2410_UART
	depends on DEBUG_LL && MMU
	help
	  Say Y here if you want verbose debugging from the PM Suspend and
	  Resume code. See <file:Documentation/arm/samsung-s3c24xx/suspend.rst>
	  for more information.

config S3C_PM_DEBUG_LED_SMDK
       bool "SMDK LED suspend/resume debugging"
       depends on PM && (MACH_SMDK6410)
       help
         Say Y here to enable the use of the SMDK LEDs on the baseboard
	 for debugging of the state of the suspend and resume process.

	 Note, this currently only works for S3C64XX based SMDK boards.

config SAMSUNG_PM_CHECK
	bool "S3C2410 PM Suspend Memory CRC"
	depends on PM && (PLAT_S3C24XX || ARCH_S3C64XX || ARCH_S5PV210)
	select CRC32
	help
	  Enable the PM code's memory area checksum over sleep. This option
	  will generate CRCs of all blocks of memory, and store them before
	  going to sleep. The blocks are then checked on resume for any
	  errors.

	  Note, this can take several seconds depending on memory size
	  and CPU speed.

	  See <file:Documentation/arm/samsung-s3c24xx/suspend.rst>

config SAMSUNG_PM_CHECK_CHUNKSIZE
	int "S3C2410 PM Suspend CRC Chunksize (KiB)"
	depends on PM && SAMSUNG_PM_CHECK
	default 64
	help
	  Set the chunksize in Kilobytes of the CRC for checking memory
	  corruption over suspend and resume. A smaller value will mean that
	  the CRC data block will take more memory, but will identify any
	  faults with better precision.

	  See <file:Documentation/arm/samsung-s3c24xx/suspend.rst>

config EXYNOS_REGULATOR_COUPLER
	bool "Exynos SoC Regulator Coupler" if COMPILE_TEST
	depends on ARCH_EXYNOS || COMPILE_TEST
endif
