# 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
	tristate "Exynos ChipID controller and ASV driver"
	depends on ARCH_EXYNOS || COMPILE_TEST
	default ARCH_EXYNOS
	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.
	  This driver can also be built as module (exynos_chipid).

config EXYNOS_USI
	tristate "Exynos USI (Universal Serial Interface) driver"
	default ARCH_EXYNOS && ARM64
	depends on ARCH_EXYNOS || COMPILE_TEST
	select MFD_SYSCON
	help
	  Enable support for USI block. USI (Universal Serial Interface) is an
	  IP-core found in modern Samsung Exynos SoCs, like Exynos850 and
	  ExynosAutoV9. USI block can be configured to provide one of the
	  following serial protocols: UART, SPI or High Speed I2C.

	  This driver allows one to configure USI for desired protocol, which
	  is usually done in USI node in Device Tree.

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
	select MFD_CORE

# 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_CHECK
	bool "S3C2410 PM Suspend Memory CRC"
	depends on PM && (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.

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.

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