| 1 | # SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | menuconfig TYPEC |
| 4 | tristate "USB Type-C Support" |
| 5 | help |
| 6 | USB Type-C Specification defines a cable and connector for USB where |
| 7 | only one type of plug is supported on both ends, i.e. there will not |
| 8 | be Type-A plug on one end of the cable and Type-B plug on the other. |
| 9 | Determination of the host-to-device relationship happens through a |
| 10 | specific Configuration Channel (CC) which goes through the USB Type-C |
| 11 | cable. The Configuration Channel may also be used to detect optional |
| 12 | Accessory Modes - Analog Audio and Debug - and if USB Power Delivery |
| 13 | is supported, the Alternate Modes, where the connector is used for |
| 14 | something else then USB communication. |
| 15 | |
| 16 | USB Power Delivery Specification defines a protocol that can be used |
| 17 | to negotiate the voltage and current levels with the connected |
| 18 | partners. USB Power Delivery allows higher voltages then the normal |
| 19 | 5V, up to 20V, and current up to 5A over the cable. The USB Power |
| 20 | Delivery protocol is also used to negotiate the optional Alternate |
| 21 | Modes when they are supported. USB Power Delivery does not depend on |
| 22 | USB Type-C connector, however it is mostly used together with USB |
| 23 | Type-C connectors. |
| 24 | |
| 25 | USB Type-C and USB Power Delivery Specifications define a set of state |
| 26 | machines that need to be implemented in either software or firmware. |
| 27 | Simple USB Type-C PHYs, for example USB Type-C Port Controller |
| 28 | Interface Specification compliant "Port Controllers" need the state |
| 29 | machines to be handled in the OS, but stand-alone USB Type-C and Power |
| 30 | Delivery controllers handle the state machines inside their firmware. |
| 31 | The USB Type-C and Power Delivery controllers usually function |
| 32 | autonomously, and do not necessarily require drivers. |
| 33 | |
| 34 | Enable this configurations option if you have USB Type-C connectors on |
| 35 | your system and 1) you know your USB Type-C hardware requires OS |
| 36 | control (a driver) to function, or 2) if you need to be able to read |
| 37 | the status of the USB Type-C ports in your system, or 3) if you need |
| 38 | to be able to swap the power role (decide are you supplying or |
| 39 | consuming power over the cable) or data role (host or device) when |
| 40 | both roles are supported. |
| 41 | |
| 42 | For more information, see the kernel documentation for USB Type-C |
| 43 | Connector Class API (Documentation/driver-api/usb/typec.rst) |
| 44 | <https://www.kernel.org/doc/html/latest/driver-api/usb/typec.html> |
| 45 | and ABI (Documentation/ABI/testing/sysfs-class-typec). |
| 46 | |
| 47 | if TYPEC |
| 48 | |
| 49 | source "drivers/usb/typec/tcpm/Kconfig" |
| 50 | |
| 51 | source "drivers/usb/typec/ucsi/Kconfig" |
| 52 | |
| 53 | source "drivers/usb/typec/tipd/Kconfig" |
| 54 | |
| 55 | config TYPEC_ANX7411 |
| 56 | tristate "Analogix ANX7411 Type-C DRP Port controller driver" |
| 57 | depends on I2C |
| 58 | depends on USB_ROLE_SWITCH |
| 59 | depends on POWER_SUPPLY |
| 60 | help |
| 61 | Say Y or M here if your system has Analogix ANX7411 Type-C DRP Port |
| 62 | controller driver. |
| 63 | |
| 64 | If you choose to build this driver as a dynamically linked module, the |
| 65 | module will be called anx7411.ko. |
| 66 | |
| 67 | config TYPEC_RT1719 |
| 68 | tristate "Richtek RT1719 Sink Only Type-C controller driver" |
| 69 | depends on USB_ROLE_SWITCH || !USB_ROLE_SWITCH |
| 70 | depends on I2C |
| 71 | depends on POWER_SUPPLY |
| 72 | select REGMAP_I2C |
| 73 | help |
| 74 | Say Y or M here if your system has Richtek RT1719 sink only |
| 75 | Type-C port controller driver. |
| 76 | |
| 77 | If you choose to build this driver as a dynamically linked module, the |
| 78 | module will be called rt1719.ko |
| 79 | |
| 80 | config TYPEC_HD3SS3220 |
| 81 | tristate "TI HD3SS3220 Type-C DRP Port controller driver" |
| 82 | depends on I2C |
| 83 | depends on USB_ROLE_SWITCH |
| 84 | help |
| 85 | Say Y or M here if your system has TI HD3SS3220 Type-C DRP Port |
| 86 | controller driver. |
| 87 | |
| 88 | If you choose to build this driver as a dynamically linked module, the |
| 89 | module will be called hd3ss3220.ko. |
| 90 | |
| 91 | config TYPEC_STUSB160X |
| 92 | tristate "STMicroelectronics STUSB160x Type-C controller driver" |
| 93 | depends on USB_ROLE_SWITCH || !USB_ROLE_SWITCH |
| 94 | depends on I2C |
| 95 | select REGMAP_I2C |
| 96 | help |
| 97 | Say Y or M here if your system has STMicroelectronics STUSB160x |
| 98 | Type-C port controller. |
| 99 | |
| 100 | If you choose to build this driver as a dynamically linked module, the |
| 101 | module will be called stusb160x.ko. |
| 102 | |
| 103 | config TYPEC_WUSB3801 |
| 104 | tristate "Willsemi WUSB3801 Type-C port controller driver" |
| 105 | depends on I2C |
| 106 | select REGMAP_I2C |
| 107 | help |
| 108 | Say Y or M here if your system has a WUSB3801 Type-C port controller. |
| 109 | |
| 110 | If you choose to build this driver as a dynamically linked module, the |
| 111 | module will be called wusb3801.ko. |
| 112 | |
| 113 | source "drivers/usb/typec/mux/Kconfig" |
| 114 | |
| 115 | source "drivers/usb/typec/altmodes/Kconfig" |
| 116 | |
| 117 | endif # TYPEC |