# SPDX-License-Identifier: GPL-2.0

menuconfig TYPEC
	tristate "USB Type-C Support"
	help
	  USB Type-C Specification defines a cable and connector for USB where
	  only one type of plug is supported on both ends, i.e. there will not
	  be Type-A plug on one end of the cable and Type-B plug on the other.
	  Determination of the host-to-device relationship happens through a
	  specific Configuration Channel (CC) which goes through the USB Type-C
	  cable. The Configuration Channel may also be used to detect optional
	  Accessory Modes - Analog Audio and Debug - and if USB Power Delivery
	  is supported, the Alternate Modes, where the connector is used for
	  something else then USB communication.

	  USB Power Delivery Specification defines a protocol that can be used
	  to negotiate the voltage and current levels with the connected
	  partners. USB Power Delivery allows higher voltages then the normal
	  5V, up to 20V, and current up to 5A over the cable. The USB Power
	  Delivery protocol is also used to negotiate the optional Alternate
	  Modes when they are supported. USB Power Delivery does not depend on
	  USB Type-C connector, however it is mostly used together with USB
	  Type-C connectors.

	  USB Type-C and USB Power Delivery Specifications define a set of state
	  machines that need to be implemented in either software or firmware.
	  Simple USB Type-C PHYs, for example USB Type-C Port Controller
	  Interface Specification compliant "Port Controllers" need the state
	  machines to be handled in the OS, but stand-alone USB Type-C and Power
	  Delivery controllers handle the state machines inside their firmware.
	  The USB Type-C and Power Delivery controllers usually function
	  autonomously, and do not necessarily require drivers.

	  Enable this configurations option if you have USB Type-C connectors on
	  your system and 1) you know your USB Type-C hardware requires OS
	  control (a driver) to function, or 2) if you need to be able to read
	  the status of the USB Type-C ports in your system, or 3) if you need
	  to be able to swap the power role (decide are you supplying or
	  consuming power over the cable) or data role (host or device) when
	  both roles are supported.

	  For more information, see the kernel documentation for USB Type-C
	  Connector Class API (Documentation/driver-api/usb/typec.rst)
	  <https://www.kernel.org/doc/html/latest/driver-api/usb/typec.html>
	  and ABI (Documentation/ABI/testing/sysfs-class-typec).

if TYPEC

source "drivers/usb/typec/tcpm/Kconfig"

source "drivers/usb/typec/ucsi/Kconfig"

source "drivers/usb/typec/tipd/Kconfig"

config TYPEC_HD3SS3220
	tristate "TI HD3SS3220 Type-C DRP Port controller driver"
	depends on I2C
	depends on USB_ROLE_SWITCH
	help
	  Say Y or M here if your system has TI HD3SS3220 Type-C DRP Port
	  controller driver.

	  If you choose to build this driver as a dynamically linked module, the
	  module will be called hd3ss3220.ko.

config TYPEC_STUSB160X
	tristate "STMicroelectronics STUSB160x Type-C controller driver"
	depends on USB_ROLE_SWITCH || !USB_ROLE_SWITCH
	depends on I2C
	select REGMAP_I2C
	help
	  Say Y or M here if your system has STMicroelectronics STUSB160x
	  Type-C port controller.

	  If you choose to build this driver as a dynamically linked module, the
	  module will be called stusb160x.ko.

config TYPEC_QCOM_PMIC
	tristate "Qualcomm PMIC USB Type-C driver"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on USB_ROLE_SWITCH || !USB_ROLE_SWITCH
	help
	  Driver for supporting role switch over the Qualcomm PMIC.  This will
	  handle the USB Type-C role and orientation detection reported by the
	  QCOM PMIC if the PMIC has the capability to handle USB Type-C
	  detection.

	  It will also enable the VBUS output to connected devices when a
	  DFP connection is made.

source "drivers/usb/typec/mux/Kconfig"

source "drivers/usb/typec/altmodes/Kconfig"

endif # TYPEC
