The purpose of this class is to provide unified interface for user
space to get the status and basic information about USB Type-C
Connectors in the system, control data role swapping, and when USB PD
is available, also power role swapping and Alternate Modes.
Signed-off-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
---
drivers/usb/Kconfig | 2 +
drivers/usb/Makefile | 2 +
drivers/usb/type-c/Kconfig | 7 +
drivers/usb/type-c/Makefile | 1 +
drivers/usb/type-c/typec.c | 957 ++++++++++++++++++++++++++++++++++++++++++++
include/linux/usb/typec.h | 230 +++++++++++
6 files changed, 1199 insertions(+)
create mode 100644 drivers/usb/type-c/Kconfig
create mode 100644 drivers/usb/type-c/Makefile
create mode 100644 drivers/usb/type-c/typec.c
create mode 100644 include/linux/usb/typec.h
+/*
+ * struct typec_capability - USB Type-C Port Capabilities
+ * @role: DFP (Host-only), UFP (Device-only) or DRP (Dual Role)
+ * @usb_pd: USB Power Delivery support
+ * @alt_modes: Alternate Modes the connector supports (null terminated)
+ * @audio_accessory: Audio Accessory Adapter Mode support
+ * @debug_accessory: Debug Accessory Mode support
+ * @fix_role: Set a fixed data role for DRP port
+ * @dr_swap: Data Role Swap support
+ * @pr_swap: Power Role Swap support
+ * @vconn_swap: VCONN Swap support
+ * @activate_mode: Enter/exit given Alternate Mode
+ *
+ * Static capabilities of a single USB Type-C port.
+ */
+struct typec_capability {
+ enum typec_data_role role;
+ unsigned int usb_pd:1;
+ struct typec_altmode *alt_modes;
+ unsigned int audio_accessory:1;
+ unsigned int debug_accessory:1;
+
+ int (*fix_role)(struct typec_port *,
+ enum typec_data_role);
+
+ int (*dr_swap)(struct typec_port *);
+ int (*pr_swap)(struct typec_port *);
+ int (*vconn_swap)(struct typec_port *);
+