# 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
	select REGMAP_MMIO

# 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 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
