# SPDX-License-Identifier: GPL-2.0-only
if (ARCH_QCOM || COMPILE_TEST)

config PINCTRL_MSM
	tristate "Qualcomm core pin controller driver"
	depends on GPIOLIB
	# OF for pinconf_generic_dt_node_to_map_group() from GENERIC_PINCONF
	depends on OF
	select QCOM_SCM
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	select IRQ_FASTEOI_HIERARCHY_HANDLERS

source "drivers/pinctrl/qcom/Kconfig.msm"

config PINCTRL_QCOM_SPMI_PMIC
	tristate "Qualcomm SPMI PMIC pin controller driver"
	depends on OF && SPMI
	select REGMAP_SPMI
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	help
	 This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	 Qualcomm GPIO and MPP blocks found in the Qualcomm PMIC's chips,
	 which are using SPMI for communication with SoC. Example PMIC's
	 devices are pm8841, pm8941 and pma8084.

config PINCTRL_QCOM_SSBI_PMIC
	tristate "Qualcomm SSBI PMIC pin controller driver"
	depends on OF
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GPIOLIB
	select GPIOLIB_IRQCHIP
	select IRQ_DOMAIN_HIERARCHY
	help
	 This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	 Qualcomm GPIO and MPP blocks found in the Qualcomm PMIC's chips,
	 which are using SSBI for communication with SoC. Example PMIC's
	 devices are pm8058 and pm8921.

config PINCTRL_LPASS_LPI
	tristate "Qualcomm Technologies Inc LPASS LPI pin controller driver"
	select PINMUX
	select PINCONF
	select GENERIC_PINCONF
	select GENERIC_PINCTRL_GROUPS
	depends on GPIOLIB
	help
	  This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	  Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
	  (Low Power Island) found on the Qualcomm Technologies Inc SoCs.

config PINCTRL_SC7280_LPASS_LPI
	tristate "Qualcomm Technologies Inc SC7280 LPASS LPI pin controller driver"
	depends on ARM64 || COMPILE_TEST
	depends on PINCTRL_LPASS_LPI
	help
	  This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	  Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
	  (Low Power Island) found on the Qualcomm Technologies Inc SC7280 platform.

config PINCTRL_SM6115_LPASS_LPI
	tristate "Qualcomm Technologies Inc SM6115 LPASS LPI pin controller driver"
	depends on ARM64 || COMPILE_TEST
	depends on PINCTRL_LPASS_LPI
	help
	  This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	  Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
	  (Low Power Island) found on the Qualcomm Technologies Inc SM6115 platform.

config PINCTRL_SM8250_LPASS_LPI
	tristate "Qualcomm Technologies Inc SM8250 LPASS LPI pin controller driver"
	depends on ARM64 || COMPILE_TEST
	depends on PINCTRL_LPASS_LPI
	help
	  This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	  Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
	  (Low Power Island) found on the Qualcomm Technologies Inc SM8250 platform.

config PINCTRL_SM8350_LPASS_LPI
	tristate "Qualcomm Technologies Inc SM8350 LPASS LPI pin controller driver"
	depends on ARM64 || COMPILE_TEST
	depends on PINCTRL_LPASS_LPI
	help
	  This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	  Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
	  (Low Power Island) found on the Qualcomm Technologies Inc SM8350
	  platform.

config PINCTRL_SM8450_LPASS_LPI
	tristate "Qualcomm Technologies Inc SM8450 LPASS LPI pin controller driver"
	depends on ARM64 || COMPILE_TEST
	depends on PINCTRL_LPASS_LPI
	help
	  This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	  Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
	  (Low Power Island) found on the Qualcomm Technologies Inc SM8450 platform.

config PINCTRL_SC8280XP_LPASS_LPI
	tristate "Qualcomm Technologies Inc SC8280XP LPASS LPI pin controller driver"
	depends on ARM64 || COMPILE_TEST
	depends on PINCTRL_LPASS_LPI
	help
	  This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	  Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
	  (Low Power Island) found on the Qualcomm Technologies Inc SC8280XP platform.

config PINCTRL_SM8550_LPASS_LPI
	tristate "Qualcomm Technologies Inc SM8550 LPASS LPI pin controller driver"
	depends on ARM64 || COMPILE_TEST
	depends on PINCTRL_LPASS_LPI
	help
	  This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	  Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
	  (Low Power Island) found on the Qualcomm Technologies Inc SM8550
	  platform.

config PINCTRL_SM8650_LPASS_LPI
	tristate "Qualcomm Technologies Inc SM8650 LPASS LPI pin controller driver"
	depends on ARM64 || COMPILE_TEST
	depends on PINCTRL_LPASS_LPI
	help
	  This is the pinctrl, pinmux, pinconf and gpiolib driver for the
	  Qualcomm Technologies Inc LPASS (Low Power Audio SubSystem) LPI
	  (Low Power Island) found on the Qualcomm Technologies Inc SM8650
	  platform.

endif
