# SPDX-License-Identifier: GPL-2.0-only
#
# SPMI driver configuration
#
menuconfig SPMI
	tristate "SPMI support"
	help
	  SPMI (System Power Management Interface) is a two-wire
	  serial interface between baseband and application processors
	  and Power Management Integrated Circuits (PMIC).

if SPMI

config SPMI_APPLE
	tristate "Apple SoC SPMI Controller platform driver"
	depends on ARCH_APPLE || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  SPMI controller present on many Apple SoCs, including the
	  t8103 (M1) and t600x (M1 Pro/Max).

config SPMI_HISI3670
	tristate "Hisilicon 3670 SPMI Controller"
	select IRQ_DOMAIN_HIERARCHY
	depends on ARM64 || COMPILE_TEST
	depends on HAS_IOMEM
	help
	  If you say yes to this option, support will be included for the
	  built-in SPMI PMIC Arbiter interface on Hisilicon 3670
	  processors.

config SPMI_MSM_PMIC_ARB
	tristate "Qualcomm MSM SPMI Controller (PMIC Arbiter)"
	select IRQ_DOMAIN_HIERARCHY
	depends on ARCH_QCOM || COMPILE_TEST
	depends on HAS_IOMEM
	default ARCH_QCOM
	help
	  If you say yes to this option, support will be included for the
	  built-in SPMI PMIC Arbiter interface on Qualcomm MSM family
	  processors.

	  This is required for communicating with Qualcomm PMICs and
	  other devices that have the SPMI interface.

config SPMI_MTK_PMIF
	tristate "Mediatek SPMI Controller (PMIC Arbiter)"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	help
	  If you say yes to this option, support will be included for the
	  built-in SPMI PMIC Arbiter interface on Mediatek family
	  processors.

	  This is required for communicating with Mediatek PMICs and
	  other devices that have the SPMI interface.

endif
