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

config MTK_DVFSRC
	tristate "MediaTek DVFSRC Support"
	depends on ARCH_MEDIATEK
	select PM_GENERIC_DOMAINS if PM
	depends on DEVICE_MODULES_MTK_SCPSYS
	help
	  Say yes here to add support for the MediaTek DVFSRC (dynamic voltage
	  and frequency scaling resource collector) found
	  on different MediaTek SoCs. The DVFSRC is a proprietary
	  hardware which is used to collect all the requests from
	  system and turn into the decision of minimum Vcore voltage
	  and minimum DRAM frequency to fulfill those requests.

config DEVICE_MODULES_MTK_DEVAPC
	tristate "Mediatek Device APC Support"
	help
	  Say yes here to enable support for Mediatek Device APC driver.
	  This driver is mainly used to handle the violation which catches
	  unexpected transaction.
	  The violation information is logged for further analysis or
	  countermeasures.

config DEVICE_MODULES_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 DEVICE_MODULES_MTK_SCPSYS
	tristate "MediaTek SCPSYS Support"
	default ARCH_MEDIATEK
	select REGMAP
	select PM_GENERIC_DOMAINS if PM
	help
	  Say yes here to add support for the MediaTek SCPSYS power domain
	  driver.

config DEVICE_MODULES_MTK_SCPSYS_PM_DOMAINS
	tristate "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 DEVICE_MODULES_MTK_SCPSYS_PM_DOMAINS_DISABLE_UNUSED
	tristate "Disable Unused Domain For GKI Project"
	depends on DEVICE_MODULES_MTK_SCPSYS_PM_DOMAINS
	help
	  Say y here to support disable unused domain for GKI project.
	  Because ko will be inserted after late_init_call,
	  standard disable unused flow is not work. so use reference
	  count in runtime pm to support it.

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

config MTK_MMDVFS
	tristate "MediaTek MMDVFS Support"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on DEVICE_MODULES_REGULATOR_MTK_DVFSRC
	help
	  Say yes here to add support for the MediaTek Multimedia DVFS (MMDVFS)
	  driver. The MMDVFS is used to set clk for Mediatek multimedia hardwares
	  , such as display, camera, mdp and video codec. Say no if your device
	  does not need to do DVFS for Multimedia hardwares.

config MTK_IPI
	tristate "MediaTek IPI Support"
	depends on RPMSG_MTK
	help
	  Say yes here to add support for the MediaTek IPI between tinysys.
	  MTK IPI consists of APIs to do Linux to/from uP/DSP communication
	  based on rpmsg. Synchronization among tasks is also handled by
	  this layer. If uP/DSP drivers handle by themselves, they can use
	  rpmsg directly.

config MTK_MBOX
	tristate "MediaTek Mbox Support"
	help
	  Say yes here to add support for the MediaTek Mbox driver.
	  MTK MBOX is a physical H/W which consists of configurable 128
	  or 256 bytes SRAM and 32 bit irq. The driver does read/write
	  SRAM and IRQ handling.

menu "Security"

source "$(KCONFIG_EXT_PREFIX)drivers/soc/mediatek/devapc/Kconfig"
source "$(KCONFIG_EXT_PREFIX)drivers/soc/mediatek/devmpu/Kconfig"

endmenu # Security

config MTK_SOCINFO
	tristate "MediaTek SoCInfo Driver"
	select SOC_BUS
	help
	  Include support for the SoC bus socinfo for the MediaTek SoC
	  platforms to provide information about the SoC family and
	  variant to user space.

endmenu
