aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/usb
diff options
context:
space:
mode:
authorFelipe Balbi <felipe.balbi@linux.intel.com>2017-05-09 09:30:24 -0400
committerFelipe Balbi <felipe.balbi@linux.intel.com>2017-06-02 04:22:30 -0400
commitb0b3ddf8fb37283d0d488d667fac4c069d612ba3 (patch)
tree334a7d90461b727dc9811a0ac1764efc424628d3 /Documentation/usb
parent8b4cfe0bb7a4117087e2431d668ab79faabe3faa (diff)
usb: move ReST documentation to Documentation/driver-api/usb/
This is where all other USB ReST documentation has moved to. Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'Documentation/usb')
-rw-r--r--Documentation/usb/typec.rst184
-rw-r--r--Documentation/usb/usb3-debug-port.rst100
2 files changed, 0 insertions, 284 deletions
diff --git a/Documentation/usb/typec.rst b/Documentation/usb/typec.rst
deleted file mode 100644
index b67a46779de9..000000000000
--- a/Documentation/usb/typec.rst
+++ /dev/null
@@ -1,184 +0,0 @@
1
2USB Type-C connector class
3==========================
4
5Introduction
6------------
7
8The typec class is meant for describing the USB Type-C ports in a system to the
9user space in unified fashion. The class is designed to provide nothing else
10except the user space interface implementation in hope that it can be utilized
11on as many platforms as possible.
12
13The platforms are expected to register every USB Type-C port they have with the
14class. In a normal case the registration will be done by a USB Type-C or PD PHY
15driver, but it may be a driver for firmware interface such as UCSI, driver for
16USB PD controller or even driver for Thunderbolt3 controller. This document
17considers the component registering the USB Type-C ports with the class as "port
18driver".
19
20On top of showing the capabilities, the class also offer user space control over
21the roles and alternate modes of ports, partners and cable plugs when the port
22driver is capable of supporting those features.
23
24The class provides an API for the port drivers described in this document. The
25attributes are described in Documentation/ABI/testing/sysfs-class-typec.
26
27User space interface
28--------------------
29Every port will be presented as its own device under /sys/class/typec/. The
30first port will be named "port0", the second "port1" and so on.
31
32When connected, the partner will be presented also as its own device under
33/sys/class/typec/. The parent of the partner device will always be the port it
34is attached to. The partner attached to port "port0" will be named
35"port0-partner". Full path to the device would be
36/sys/class/typec/port0/port0-partner/.
37
38The cable and the two plugs on it may also be optionally presented as their own
39devices under /sys/class/typec/. The cable attached to the port "port0" port
40will be named port0-cable and the plug on the SOP Prime end (see USB Power
41Delivery Specification ch. 2.4) will be named "port0-plug0" and on the SOP
42Double Prime end "port0-plug1". The parent of a cable will always be the port,
43and the parent of the cable plugs will always be the cable.
44
45If the port, partner or cable plug supports Alternate Modes, every supported
46Alternate Mode SVID will have their own device describing them. Note that the
47Alternate Mode devices will not be attached to the typec class. The parent of an
48alternate mode will be the device that supports it, so for example an alternate
49mode of port0-partner will be presented under /sys/class/typec/port0-partner/.
50Every mode that is supported will have its own group under the Alternate Mode
51device named "mode<index>", for example /sys/class/typec/port0/<alternate
52mode>/mode1/. The requests for entering/exiting a mode can be done with "active"
53attribute file in that group.
54
55Driver API
56----------
57
58Registering the ports
59~~~~~~~~~~~~~~~~~~~~~
60
61The port drivers will describe every Type-C port they control with struct
62typec_capability data structure, and register them with the following API:
63
64.. kernel-doc:: drivers/usb/typec/typec.c
65 :functions: typec_register_port typec_unregister_port
66
67When registering the ports, the prefer_role member in struct typec_capability
68deserves special notice. If the port that is being registered does not have
69initial role preference, which means the port does not execute Try.SNK or
70Try.SRC by default, the member must have value TYPEC_NO_PREFERRED_ROLE.
71Otherwise if the port executes Try.SNK by default, the member must have value
72TYPEC_DEVICE, and with Try.SRC the value must be TYPEC_HOST.
73
74Registering Partners
75~~~~~~~~~~~~~~~~~~~~
76
77After successful connection of a partner, the port driver needs to register the
78partner with the class. Details about the partner need to be described in struct
79typec_partner_desc. The class copies the details of the partner during
80registration. The class offers the following API for registering/unregistering
81partners.
82
83.. kernel-doc:: drivers/usb/typec/typec.c
84 :functions: typec_register_partner typec_unregister_partner
85
86The class will provide a handle to struct typec_partner if the registration was
87successful, or NULL.
88
89If the partner is USB Power Delivery capable, and the port driver is able to
90show the result of Discover Identity command, the partner descriptor structure
91should include handle to struct usb_pd_identity instance. The class will then
92create a sysfs directory for the identity under the partner device. The result
93of Discover Identity command can then be reported with the following API:
94
95.. kernel-doc:: drivers/usb/typec/typec.c
96 :functions: typec_partner_set_identity
97
98Registering Cables
99~~~~~~~~~~~~~~~~~~
100
101After successful connection of a cable that supports USB Power Delivery
102Structured VDM "Discover Identity", the port driver needs to register the cable
103and one or two plugs, depending if there is CC Double Prime controller present
104in the cable or not. So a cable capable of SOP Prime communication, but not SOP
105Double Prime communication, should only have one plug registered. For more
106information about SOP communication, please read chapter about it from the
107latest USB Power Delivery specification.
108
109The plugs are represented as their own devices. The cable is registered first,
110followed by registration of the cable plugs. The cable will be the parent device
111for the plugs. Details about the cable need to be described in struct
112typec_cable_desc and about a plug in struct typec_plug_desc. The class copies
113the details during registration. The class offers the following API for
114registering/unregistering cables and their plugs:
115
116.. kernel-doc:: drivers/usb/typec/typec.c
117 :functions: typec_register_cable typec_unregister_cable typec_register_plug
118 typec_unregister_plug
119
120The class will provide a handle to struct typec_cable and struct typec_plug if
121the registration is successful, or NULL if it isn't.
122
123If the cable is USB Power Delivery capable, and the port driver is able to show
124the result of Discover Identity command, the cable descriptor structure should
125include handle to struct usb_pd_identity instance. The class will then create a
126sysfs directory for the identity under the cable device. The result of Discover
127Identity command can then be reported with the following API:
128
129.. kernel-doc:: drivers/usb/typec/typec.c
130 :functions: typec_cable_set_identity
131
132Notifications
133~~~~~~~~~~~~~
134
135When the partner has executed a role change, or when the default roles change
136during connection of a partner or cable, the port driver must use the following
137APIs to report it to the class:
138
139.. kernel-doc:: drivers/usb/typec/typec.c
140 :functions: typec_set_data_role typec_set_pwr_role typec_set_vconn_role
141 typec_set_pwr_opmode
142
143Alternate Modes
144~~~~~~~~~~~~~~~
145
146USB Type-C ports, partners and cable plugs may support Alternate Modes. Each
147Alternate Mode will have identifier called SVID, which is either a Standard ID
148given by USB-IF or vendor ID, and each supported SVID can have 1 - 6 modes. The
149class provides struct typec_mode_desc for describing individual mode of a SVID,
150and struct typec_altmode_desc which is a container for all the supported modes.
151
152Ports that support Alternate Modes need to register each SVID they support with
153the following API:
154
155.. kernel-doc:: drivers/usb/typec/typec.c
156 :functions: typec_port_register_altmode
157
158If a partner or cable plug provides a list of SVIDs as response to USB Power
159Delivery Structured VDM Discover SVIDs message, each SVID needs to be
160registered.
161
162API for the partners:
163
164.. kernel-doc:: drivers/usb/typec/typec.c
165 :functions: typec_partner_register_altmode
166
167API for the Cable Plugs:
168
169.. kernel-doc:: drivers/usb/typec/typec.c
170 :functions: typec_plug_register_altmode
171
172So ports, partners and cable plugs will register the alternate modes with their
173own functions, but the registration will always return a handle to struct
174typec_altmode on success, or NULL. The unregistration will happen with the same
175function:
176
177.. kernel-doc:: drivers/usb/typec/typec.c
178 :functions: typec_unregister_altmode
179
180If a partner or cable plug enters or exits a mode, the port driver needs to
181notify the class with the following API:
182
183.. kernel-doc:: drivers/usb/typec/typec.c
184 :functions: typec_altmode_update_active
diff --git a/Documentation/usb/usb3-debug-port.rst b/Documentation/usb/usb3-debug-port.rst
deleted file mode 100644
index feb1a36a65b7..000000000000
--- a/Documentation/usb/usb3-debug-port.rst
+++ /dev/null
@@ -1,100 +0,0 @@
1===============
2USB3 debug port
3===============
4
5:Author: Lu Baolu <baolu.lu@linux.intel.com>
6:Date: March 2017
7
8GENERAL
9=======
10
11This is a HOWTO for using the USB3 debug port on x86 systems.
12
13Before using any kernel debugging functionality based on USB3
14debug port, you need to::
15
16 1) check whether any USB3 debug port is available in
17 your system;
18 2) check which port is used for debugging purposes;
19 3) have a USB 3.0 super-speed A-to-A debugging cable.
20
21INTRODUCTION
22============
23
24The xHCI debug capability (DbC) is an optional but standalone
25functionality provided by the xHCI host controller. The xHCI
26specification describes DbC in the section 7.6.
27
28When DbC is initialized and enabled, it will present a debug
29device through the debug port (normally the first USB3
30super-speed port). The debug device is fully compliant with
31the USB framework and provides the equivalent of a very high
32performance full-duplex serial link between the debug target
33(the system under debugging) and a debug host.
34
35EARLY PRINTK
36============
37
38DbC has been designed to log early printk messages. One use for
39this feature is kernel debugging. For example, when your machine
40crashes very early before the regular console code is initialized.
41Other uses include simpler, lockless logging instead of a full-
42blown printk console driver and klogd.
43
44On the debug target system, you need to customize a debugging
45kernel with CONFIG_EARLY_PRINTK_USB_XDBC enabled. And, add below
46kernel boot parameter::
47
48 "earlyprintk=xdbc"
49
50If there are multiple xHCI controllers in your system, you can
51append a host contoller index to this kernel parameter. This
52index starts from 0.
53
54Current design doesn't support DbC runtime suspend/resume. As
55the result, you'd better disable runtime power management for
56USB subsystem by adding below kernel boot parameter::
57
58 "usbcore.autosuspend=-1"
59
60Before starting the debug target, you should connect the debug
61port to a USB port (root port or port of any external hub) on
62the debug host. The cable used to connect these two ports
63should be a USB 3.0 super-speed A-to-A debugging cable.
64
65During early boot of the debug target, DbC will be detected and
66initialized. After initialization, the debug host should be able
67to enumerate the debug device in debug target. The debug host
68will then bind the debug device with the usb_debug driver module
69and create the /dev/ttyUSB device.
70
71If the debug device enumeration goes smoothly, you should be able
72to see below kernel messages on the debug host::
73
74 # tail -f /var/log/kern.log
75 [ 1815.983374] usb 4-3: new SuperSpeed USB device number 4 using xhci_hcd
76 [ 1815.999595] usb 4-3: LPM exit latency is zeroed, disabling LPM.
77 [ 1815.999899] usb 4-3: New USB device found, idVendor=1d6b, idProduct=0004
78 [ 1815.999902] usb 4-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
79 [ 1815.999903] usb 4-3: Product: Remote GDB
80 [ 1815.999904] usb 4-3: Manufacturer: Linux
81 [ 1815.999905] usb 4-3: SerialNumber: 0001
82 [ 1816.000240] usb_debug 4-3:1.0: xhci_dbc converter detected
83 [ 1816.000360] usb 4-3: xhci_dbc converter now attached to ttyUSB0
84
85You can use any communication program, for example minicom, to
86read and view the messages. Below simple bash scripts can help
87you to check the sanity of the setup.
88
89.. code-block:: sh
90
91 ===== start of bash scripts =============
92 #!/bin/bash
93
94 while true ; do
95 while [ ! -d /sys/class/tty/ttyUSB0 ] ; do
96 :
97 done
98 cat /dev/ttyUSB0
99 done
100 ===== end of bash scripts ===============