# SPDX-License-Identifier: GPL-2.0

config TYPEC_TCPM
	tristate "USB Type-C Port Controller Manager"
	depends on USB
	select USB_ROLE_SWITCH
	select POWER_SUPPLY
	help
	  The Type-C Port Controller Manager provides a USB PD and USB Type-C
	  state machine for use with Type-C Port Controllers.

if TYPEC_TCPM

config TYPEC_TCPCI
	tristate "Type-C Port Controller Interface driver"
	depends on I2C
	select REGMAP_I2C
	help
	  Type-C Port Controller driver for TCPCI-compliant controller.

if TYPEC_TCPCI

config TYPEC_RT1711H
	tristate "Richtek RT1711H Type-C chip driver"
	help
	  Richtek RT1711H Type-C chip driver that works with
	  Type-C Port Controller Manager to provide USB PD and USB
	  Type-C functionalities.

config TYPEC_MT6360
	tristate "Mediatek MT6360 Type-C driver"
	depends on MFD_MT6360
	help
	  Mediatek MT6360 is a multi-functional IC that includes
	  USB Type-C. It works with Type-C Port Controller Manager
	  to provide USB PD and USB Type-C functionalities.

config TYPEC_TCPCI_MT6370
	tristate "MediaTek MT6370 Type-C driver"
	depends on MFD_MT6370
	help
	  MediaTek MT6370 is a multi-functional IC that includes
	  USB Type-C. It works with Type-C Port Controller Manager
	  to provide USB PD and USB Type-C functionalities.

	  This driver can also be built as a module. The module
	  will be called "tcpci_mt6370".

config TYPEC_TCPCI_MAXIM
	tristate "Maxim TCPCI based Type-C chip driver"
	help
	  MAXIM TCPCI based Type-C/PD chip driver. Works with
	  with Type-C Port Controller Manager.

endif # TYPEC_TCPCI

config TYPEC_FUSB302
	tristate "Fairchild FUSB302 Type-C chip driver"
	depends on I2C
	depends on EXTCON || !EXTCON
	help
	  The Fairchild FUSB302 Type-C chip driver that works with
	  Type-C Port Controller Manager to provide USB PD and USB
	  Type-C functionalities.

config TYPEC_WCOVE
	tristate "Intel WhiskeyCove PMIC USB Type-C PHY driver"
	depends on ACPI
	depends on MFD_INTEL_PMC_BXT
	depends on BXT_WC_PMIC_OPREGION
	help
	  This driver adds support for USB Type-C on Intel Broxton platforms
	  that have Intel Whiskey Cove PMIC. The driver works with USB Type-C
	  Port Controller Manager to provide USB PD and Type-C functionalities.

	  To compile this driver as module, choose M here: the module will be
	  called typec_wcove.ko

config TYPEC_QCOM_PMIC
	tristate "Qualcomm PMIC USB Type-C Port Controller Manager driver"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on DRM || DRM=n
	select DRM_AUX_HPD_BRIDGE if DRM_BRIDGE && OF
	help
	  A Type-C port and Power Delivery driver which aggregates two
	  discrete pieces of silicon in the PM8150b PMIC block: the
	  Type-C port controller and the Power Delivery PHY.

	  This driver enables Type-C role switching, orientation, Alternate
	  mode and Power Delivery support both for VBUS and VCONN.

endif # TYPEC_TCPM
