# SPDX-License-Identifier: GPL-2.0-only
#
# MediaTek SoC drivers
#
menu "MediaTek SoC drivers"
	depends on ARCH_MEDIATEK || COMPILE_TEST

config MTK_CMDQ
	tristate "MediaTek CMDQ Support"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	select MAILBOX
	select MTK_CMDQ_MBOX
	select MTK_INFRACFG
	help
	  Say yes here to add support for the MediaTek Command Queue (CMDQ)
	  driver. The CMDQ is used to help read/write registers with critical
	  time limitation, such as updating display configuration during the
	  vblank.

config MTK_INFRACFG
	bool "MediaTek INFRACFG Support"
	select REGMAP
	help
	  Say yes here to add support for the MediaTek INFRACFG controller. The
	  INFRACFG controller contains various infrastructure registers not
	  directly associated to any device.

config MTK_PMIC_WRAP
	tristate "MediaTek PMIC Wrapper Support"
	depends on RESET_CONTROLLER
	select REGMAP
	help
	  Say yes here to add support for MediaTek PMIC Wrapper found
	  on different MediaTek SoCs. The PMIC wrapper is a proprietary
	  hardware to connect the PMIC.

config MTK_SCPSYS
	bool "MediaTek SCPSYS Support"
	default ARCH_MEDIATEK
	select REGMAP
	select MTK_INFRACFG
	select PM_GENERIC_DOMAINS if PM
	help
	  Say yes here to add support for the MediaTek SCPSYS power domain
	  driver.

config MTK_SCPSYS_PM_DOMAINS
	bool "MediaTek SCPSYS generic power domain"
	default ARCH_MEDIATEK
	depends on PM
	select PM_GENERIC_DOMAINS
	select REGMAP
	help
	  Say y here to enable power domain support.
	  In order to meet high performance and low power requirements, the System
	  Control Processor System (SCPSYS) has several power management related
	  tasks in the system.

config MTK_MMSYS
	bool "MediaTek MMSYS Support"
	default ARCH_MEDIATEK
	help
	  Say yes here to add support for the MediaTek Multimedia
	  Subsystem (MMSYS).

config MTK_SVS
	tristate "MediaTek Smart Voltage Scaling(SVS)"
	depends on MTK_EFUSE && NVMEM
	help
	  The Smart Voltage Scaling(SVS) engine is a piece of hardware
	  which has several controllers(banks) for calculating suitable
	  voltage to different power domains(CPU/GPU/CCI) according to
	  chip process corner, temperatures and other factors. Then DVFS
	  driver could apply SVS bank voltage to PMIC/Buck.

config MTK_SOCINFO
	tristate "MediaTek SoC Information"
	default y
	depends on MTK_EFUSE
	help
	  The MediaTek SoC Information (mtk-socinfo) driver provides
	  information about the SoC to the userspace including the
	  manufacturer name, marketing name and soc name.
endmenu
