1 /*
2  * Copyright 2022 The Chromium OS Authors
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 
6 /**
7  * @file
8  * @brief USB Type-C Cable and Connector API used for USB-C drivers
9  *
10  * The information in this file was taken from the USB Type-C
11  * Cable and Connector Specification Release 2.1
12  */
13 
14 #ifndef ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TC_H_
15 #define ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TC_H_
16 
17 /**
18  * @brief USB Type-C
19  * @defgroup usb_type_c USB Type-C
20  * @ingroup io_interfaces
21  * @{
22  */
23 
24 #include <zephyr/types.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 /**
31  * @brief VBUS minimum for a sink disconnect detection.
32  *	  See Table 4-3 VBUS Sink Characteristics
33  */
34 #define TC_V_SINK_DISCONNECT_MIN_MV 800
35 
36 /**
37  * @brief VBUS maximum for a sink disconnect detection.
38  *	  See Table 4-3 VBUS Sink Characteristics
39  */
40 #define TC_V_SINK_DISCONNECT_MAX_MV 3670
41 
42 /**
43  * @brief From entry to Attached.SRC until VBUS reaches the minimum vSafe5V threshold as
44  *	  measured at the source’s receptacle
45  *	  See Table 4-29 VBUS and VCONN Timing Parameters
46  */
47 #define TC_T_VBUS_ON_MAX_MS 275
48 
49 /**
50  * @brief From the time the Sink is detached until the Source removes VBUS and reaches
51  *	  vSafe0V (See USB PD).
52  *	  See Table 4-29 VBUS and VCONN Timing Parameters
53  */
54 #define TC_T_VBUS_OFF_MAX_MS 650
55 
56 /**
57  * @brief From the time the Source supplied VBUS in the Attached.SRC state.
58  *	  See Table 4-29 VBUS and VCONN Timing Parameters
59  */
60 #define TC_T_VCONN_ON_MAX_MS 2
61 
62 /**
63  * @brief From the time a Sink with accessory support enters the PoweredAccessory state
64  *	  until the Sink sources minimum VCONN voltage (see Table 4-5)
65  *	  See Table 4-29 VBUS and VCONN Timing Parameters
66  */
67 #define TC_T_VCONN_ON_PA_MAX_MS 100
68 
69 /**
70  * @brief From the time that a Sink is detached or as directed until the VCONN supply is
71  *	  disconnected.
72  *	  See Table 4-29 VBUS and VCONN Timing Parameters
73  */
74 #define TC_T_VCONN_OFF_MAX_MS 35
75 
76 /**
77  * @brief Response time for a Sink to adjust its current consumption to be in the specified
78  *	  range due to a change in USB Type-C Current advertisement
79  *	  See Table 4-29 VBUS and VCONN Timing Parameters
80  */
81 #define TC_T_SINK_ADJ_MAX_MS 60
82 
83 /**
84  * @brief The minimum period a DRP shall complete a Source to Sink and back advertisement
85  *	  See Table 4-30 DRP Timing Parameters
86  */
87 #define TC_T_DRP_MIN_MS 50
88 
89 /**
90  * @brief The maximum period a DRP shall complete a Source to Sink and back advertisement
91  *	  See Table 4-30 DRP Timing Parameters
92  */
93 #define TC_T_DRP_MAX_MS 100
94 
95 /**
96  * @brief The minimum time a DRP shall complete transitions between Source and Sink roles
97  *	  during role resolution
98  *	  See Table 4-30 DRP Timing Parameters
99  */
100 #define TC_T_DRP_TRANSITION_MIN_MS 0
101 
102 /**
103  * @brief The maximum time a DRP shall complete transitions between Source and Sink roles
104  *	  during role resolution
105  *	  See Table 4-30 DRP Timing Parameters
106  */
107 #define TC_T_DRP_TRANSITION_MAX_MS 1
108 
109 /**
110  * @brief Minimum wait time associated with the Try.SRC state.
111  *	  See Table 4-30 DRP Timing Parameters
112  */
113 #define TC_T_DRP_TRY_MIN_MS 75
114 
115 /**
116  * @brief Maximum wait time associated with the Try.SRC state.
117  *	  See Table 4-30 DRP Timing Parameters
118  */
119 #define TC_T_DRP_TRY_MAX_MS 150
120 
121 /**
122  * @brief Minimum wait time associated with the Try.SNK state.
123  *	  See Table 4-30 DRP Timing Parameters
124  */
125 #define TC_T_DRP_TRY_WAIT_MIN_MS 400
126 
127 /**
128  * @brief Maximum wait time associated with the Try.SNK state.
129  *	  See Table 4-30 DRP Timing Parameters
130  */
131 #define TC_T_DRP_TRY_WAIT_MAX_MS 800
132 
133 /**
134  * @brief Minimum timeout for transition from Try.SRC to TryWait.SNK.
135  *	  See Table 4-30 DRP Timing Parameters
136  */
137 #define TC_T_TRY_TIMEOUT_MIN_MS 550
138 
139 /**
140  * @brief Maximum timeout for transition from Try.SRC to TryWait.SNK.
141  *	  See Table 4-30 DRP Timing Parameters
142  */
143 #define TC_T_TRY_TIMEOUT_MAX_MS 1100
144 
145 /**
146  * @brief Minimum Time for a DRP to detect that the connected Charge-Through VCONNPowered
147  *	  USB Device has been detached, after VBUS has been removed.
148  *	  See Table 4-30 DRP Timing Parameters
149  */
150 #define TC_T_VPD_DETACH_MIN_MS 10
151 
152 /**
153  * @brief Maximum Time for a DRP to detect that the connected Charge-Through VCONNPowered
154  *	  USB Device has been detached, after VBUS has been removed.
155  *	  See Table 4-30 DRP Timing Parameters
156  */
157 #define TC_T_VPD_DETACH_MAX_MS 20
158 
159 /**
160  * @brief Minimum time a port shall wait before it can determine it is attached
161  *	  See Table 4-31 CC Timing
162  */
163 #define TC_T_CC_DEBOUNCE_MIN_MS 100
164 
165 /**
166  * @brief Maximum time a port shall wait before it can determine it is attached
167  *	  See Table 4-31 CC Timing
168  */
169 #define TC_T_CC_DEBOUNCE_MAX_MS 200
170 
171 /**
172  * @brief Minimum time a Sink port shall wait before it can determine it is detached due to
173  *	  the potential for USB PD signaling on CC as described in the state definitions.
174  *	  See Table 4-31 CC Timing
175  */
176 #define TC_T_PD_DEBOUNCE_MIN_MS 10
177 
178 /**
179  * @brief Maximum time a Sink port shall wait before it can determine it is detached due to
180  *	  the potential for USB PD signaling on CC as described in the state definitions.
181  *	  See Table 4-31 CC Timing
182  */
183 #define TC_T_PD_DEBOUNCE_MAX_MS 20
184 
185 /**
186  * @brief Minimum Time a port shall wait before it can determine it is re-attached during
187  *	  the try-wait process.
188  *	  See Table 4-31 CC Timing
189  */
190 #define TC_T_TRY_CC_DEBOUNCE_MIN_MS 10
191 
192 /**
193  * @brief Maximum Time a port shall wait before it can determine it is re-attached during
194  *	  the try-wait process.
195  *	  See Table 4-31 CC Timing
196  */
197 #define TC_T_TRY_CC_DEBOUNCE_MAX_MS 10
198 
199 /**
200  * @brief Minimum time a self-powered port shall remain in the ErrorRecovery state.
201  *	  See Table 4-31 CC Timing
202  */
203 #define TC_T_ERROR_RECOVERY_SELF_POWERED_MIN_MS 25
204 
205 /**
206  * @brief Minimum time a source shall remain in the ErrorRecovery state if it was sourcing
207  *	  VCONN in the previous state.
208  *	  See Table 4-31 CC Timing
209  */
210 #define TC_T_ERROR_RECOVERY_SOURCE_MIN_MS 240
211 
212 /**
213  * @brief Minimum time a Sink port shall wait before it can determine there has been a change
214  *	  in Rp where CC is not BMC Idle or the port is unable to detect BMC Idle.
215  *	  See Table 4-31 CC Timing
216  */
217 #define TC_T_RP_VALUE_CHANGE_MIN_MS 10
218 
219 /**
220  * @brief Maximum time a Sink port shall wait before it can determine there has been a change
221  *	  in Rp where CC is not BMC Idle or the port is unable to detect BMC Idle.
222  *	  See Table 4-31 CC Timing
223  */
224 #define TC_T_RP_VALUE_CHANGE_MAX_MS 20
225 
226 /**
227  * @brief Minimum time a Source shall detect the SRC.Open state. The Source should detect the
228  *	  SRC.Open state as quickly as practical.
229  *	  See Table 4-31 CC Timing
230  */
231 #define TC_T_SRC_DISCONNECT_MIN_MS 0
232 
233 /**
234  * @brief Maximum time a Source shall detect the SRC.Open state. The Source should detect the
235  *	  SRC.Open state as quickly as practical.
236  *	  See Table 4-31 CC Timing
237  */
238 #define TC_T_SRC_DISCONNECT_MAX_MS 20
239 
240 /**
241  * @brief Minimum time to detect connection when neither Port Partner is toggling.
242  *	  See Table 4-31 CC Timing
243  */
244 #define TC_T_NO_TOGGLE_CONNECT_MIN_MS 0
245 
246 /**
247  * @brief Maximum time to detect connection when neither Port Partner is toggling.
248  *	  See Table 4-31 CC Timing
249  */
250 #define TC_T_NO_TOGGLE_CONNECT_MAX_MS 5
251 
252 /**
253  * @brief Minimum time to detect connection when one Port Partner is toggling
254  *	  0ms … dcSRC.DRP max * tDRP max + 2 * tNoToggleConnect).
255  *	  See Table 4-31 CC Timing
256  */
257 #define TC_T_ONE_PORT_TOGGLE_CONNECT_MIN_MS 0
258 
259 /**
260  * @brief Maximum time to detect connection when one Port Partner is toggling
261  *	  0ms … dcSRC.DRP max * tDRP max + 2 * tNoToggleConnect).
262  *	  See Table 4-31 CC Timing
263  */
264 #define TC_T_ONE_PORT_TOGGLE_CONNECT_MAX_MS 80
265 
266 /**
267  * @brief Minimum time to detect connection when both Port Partners are toggling
268  *	  (0ms … 5 * tDRP max + 2 * tNoToggleConnect).
269  *	  See Table 4-31 CC Timing
270  */
271 #define TC_T_TWO_PORT_TOGGLE_CONNECT_MIN_MS 0
272 
273 /**
274  * @brief Maximum time to detect connection when both Port Partners are toggling
275  *	  (0ms … 5 * tDRP max + 2 * tNoToggleConnect).
276  *	  See Table 4-31 CC Timing
277  */
278 #define TC_T_TWO_PORT_TOGGLE_CONNECT_MAX_MS 510
279 
280 /**
281  * @brief Minimum time for a Charge-Through VCONN-Powered USB Device to detect that the
282  *	  Charge-Through source has disconnected from CC after VBUS has been removed,
283  *	  transition to CTUnattached.VPD, and re-apply its Rp termination advertising
284  *	  3.0 A on the host port CC.
285  *	  See Table 4-31 CC Timing
286  */
287 #define TC_T_VPDCTDD_MIN_US 30
288 
289 /**
290  * @brief Maximum time for a Charge-Through VCONN-Powered USB Device to detect that the
291  *	  Charge-Through source has disconnected from CC after VBUS has been removed,
292  *	  transition to CTUnattached.VPD, and re-apply its Rp termination advertising
293  *	  3.0 A on the host port CC.
294  *	  See Table 4-31 CC Timing
295  */
296 #define TC_T_VPDCTDD_MAX_MS 5
297 
298 /**
299  * @brief Minimum time for a Charge-Through VCONN-Powered USB Device shall remain
300  *	  in CTDisabled.VPD state.
301  *	  See Table 4-31 CC Timing
302  */
303 #define TC_T_VPDDISABLE_MIN_MS 25
304 
305 /**
306  * @brief CC Voltage status
307  */
308 enum tc_cc_voltage_state {
309 	/** No port partner connection */
310 	TC_CC_VOLT_OPEN         = 0,
311 	/** Port partner is applying Ra */
312 	TC_CC_VOLT_RA           = 1,
313 	/** Port partner is applying Rd */
314 	TC_CC_VOLT_RD           = 2,
315 	/** Port partner is applying Rp (0.5A) */
316 	TC_CC_VOLT_RP_DEF       = 5,
317 	/*8 Port partner is applying Rp (1.5A) */
318 	TC_CC_VOLT_RP_1A5       = 6,
319 	/** Port partner is applying Rp (3.0A) */
320 	TC_CC_VOLT_RP_3A0       = 7,
321 };
322 
323 /**
324  * @brief VBUS level voltages
325  */
326 enum tc_vbus_level {
327 	/** VBUS is less than vSafe0V max */
328 	TC_VBUS_SAFE0V  = 0,
329 	/** VBUS is at least vSafe5V min */
330 	TC_VBUS_PRESENT = 1,
331 	/** VBUS is less than vSinkDisconnect max */
332 	TC_VBUS_REMOVED = 2
333 };
334 
335 /**
336  * @brief Pull-Up resistor values
337  */
338 enum tc_rp_value {
339 	/** Pull-Up resistor for a current of 900mA */
340 	TC_RP_USB       = 0,
341 	/** Pull-Up resistor for a current of 1.5A */
342 	TC_RP_1A5       = 1,
343 	/** Pull-Up resistor for a current of 3.0A */
344 	TC_RP_3A0       = 2,
345 	/** No Pull-Up resistor is applied */
346 	TC_RP_RESERVED  = 3
347 };
348 
349 /**
350  * @brief CC pull resistors
351  */
352 enum tc_cc_pull {
353 	/** Ra Pull-Down resistor */
354 	TC_CC_RA        = 0,
355 	/** Rp Pull-Up resistor */
356 	TC_CC_RP        = 1,
357 	/** Rd Pull-Down resistor */
358 	TC_CC_RD        = 2,
359 	/** No CC resistor */
360 	TC_CC_OPEN      = 3,
361 	/** Ra and Rd Pull-Down resistor */
362 	TC_RA_RD        = 4
363 };
364 
365 /**
366  * @brief Cable plug. See 6.2.1.1.7 Cable Plug. Only applies to SOP' and SOP".
367  *	  Replaced by pd_power_role for SOP packets.
368  */
369 enum tc_cable_plug {
370 	/* Message originated from a DFP or UFP */
371 	PD_PLUG_FROM_DFP_UFP = 0,
372 	/* Message originated from a Cable Plug or VPD */
373 	PD_PLUG_FROM_CABLE_VPD = 1
374 };
375 
376 /**
377  * @brief Power Delivery Power Role
378  */
379 enum tc_power_role {
380 	/** Power role is a sink */
381 	TC_ROLE_SINK    = 0,
382 	/** Power role is a source */
383 	TC_ROLE_SOURCE  = 1
384 };
385 
386 /**
387  * @brief Power Delivery Data Role
388  */
389 enum tc_data_role {
390 	/** Data role is an Upstream Facing Port */
391 	TC_ROLE_UFP             = 0,
392 	/** Data role is a Downstream Facing Port */
393 	TC_ROLE_DFP             = 1,
394 	/** Port is disconnected */
395 	TC_ROLE_DISCONNECTED    = 2
396 };
397 
398 /**
399  * @brief Polarity of the CC lines
400  */
401 enum tc_cc_polarity {
402 	/** Use CC1 IO for Power Delivery communication */
403 	TC_POLARITY_CC1 = 0,
404 	/** Use CC2 IO for Power Delivery communication */
405 	TC_POLARITY_CC2 = 1
406 };
407 
408 /**
409  * @brief Possible port partner connections based on CC line states
410  */
411 enum tc_cc_states {
412 	/** No port partner attached */
413 	TC_CC_NONE = 0,
414 
415 	/** From DFP perspective */
416 
417 	/** No UFP accessory connected */
418 	TC_CC_UFP_NONE          = 1,
419 	/** UFP Audio accessory connected */
420 	TC_CC_UFP_AUDIO_ACC     = 2,
421 	/** UFP Debug accessory connected */
422 	TC_CC_UFP_DEBUG_ACC     = 3,
423 	/** Plain UFP attached */
424 	TC_CC_UFP_ATTACHED      = 4,
425 
426 	/** From UFP perspective */
427 
428 	/** Plain DFP attached */
429 	TC_CC_DFP_ATTACHED      = 5,
430 	/** DFP debug accessory connected */
431 	TC_CC_DFP_DEBUG_ACC     = 6
432 };
433 
434 /**
435  * @}
436  */
437 
438 #ifdef __cplusplus
439 }
440 #endif
441 
442 #endif /* ZEPHYR_INCLUDE_DRIVERS_USBC_USBC_TC_H_ */
443