hc
2024-05-10 61598093bbdd283a7edc367d900f223070ead8d2
kernel/include/dt-bindings/usb/pd.h
....@@ -59,4 +59,410 @@
5959 (PDO_TYPE(PDO_TYPE_VAR) | PDO_VAR_MIN_VOLT(min_mv) | \
6060 PDO_VAR_MAX_VOLT(max_mv) | PDO_VAR_MAX_CURR(max_ma))
6161
62
- #endif /* __DT_POWER_DELIVERY_H */
62
+#define APDO_TYPE_PPS 0
63
+
64
+#define PDO_APDO_TYPE_SHIFT 28 /* Only valid value currently is 0x0 - PPS */
65
+#define PDO_APDO_TYPE_MASK 0x3
66
+
67
+#define PDO_APDO_TYPE(t) ((t) << PDO_APDO_TYPE_SHIFT)
68
+
69
+#define PDO_PPS_APDO_MAX_VOLT_SHIFT 17 /* 100mV units */
70
+#define PDO_PPS_APDO_MIN_VOLT_SHIFT 8 /* 100mV units */
71
+#define PDO_PPS_APDO_MAX_CURR_SHIFT 0 /* 50mA units */
72
+
73
+#define PDO_PPS_APDO_VOLT_MASK 0xff
74
+#define PDO_PPS_APDO_CURR_MASK 0x7f
75
+
76
+#define PDO_PPS_APDO_MIN_VOLT(mv) \
77
+ ((((mv) / 100) & PDO_PPS_APDO_VOLT_MASK) << PDO_PPS_APDO_MIN_VOLT_SHIFT)
78
+#define PDO_PPS_APDO_MAX_VOLT(mv) \
79
+ ((((mv) / 100) & PDO_PPS_APDO_VOLT_MASK) << PDO_PPS_APDO_MAX_VOLT_SHIFT)
80
+#define PDO_PPS_APDO_MAX_CURR(ma) \
81
+ ((((ma) / 50) & PDO_PPS_APDO_CURR_MASK) << PDO_PPS_APDO_MAX_CURR_SHIFT)
82
+
83
+#define PDO_PPS_APDO(min_mv, max_mv, max_ma) \
84
+ (PDO_TYPE(PDO_TYPE_APDO) | PDO_APDO_TYPE(APDO_TYPE_PPS) | \
85
+ PDO_PPS_APDO_MIN_VOLT(min_mv) | PDO_PPS_APDO_MAX_VOLT(max_mv) | \
86
+ PDO_PPS_APDO_MAX_CURR(max_ma))
87
+
88
+ /*
89
+ * Based on "Table 6-14 Fixed Supply PDO - Sink" of "USB Power Delivery Specification Revision 3.0,
90
+ * Version 1.2"
91
+ * Initial current capability of the new source when vSafe5V is applied.
92
+ */
93
+#define FRS_DEFAULT_POWER 1
94
+#define FRS_5V_1P5A 2
95
+#define FRS_5V_3A 3
96
+
97
+/*
98
+ * SVDM Identity Header
99
+ * --------------------
100
+ * <31> :: data capable as a USB host
101
+ * <30> :: data capable as a USB device
102
+ * <29:27> :: product type (UFP / Cable / VPD)
103
+ * <26> :: modal operation supported (1b == yes)
104
+ * <25:23> :: product type (DFP) (SVDM version 2.0+ only; set to zero in version 1.0)
105
+ * <22:21> :: connector type (SVDM version 2.0+ only; set to zero in version 1.0)
106
+ * <20:16> :: Reserved, Shall be set to zero
107
+ * <15:0> :: USB-IF assigned VID for this cable vendor
108
+ */
109
+
110
+/* PD Rev2.0 definition */
111
+#define IDH_PTYPE_UNDEF 0
112
+
113
+/* SOP Product Type (UFP) */
114
+#define IDH_PTYPE_NOT_UFP 0
115
+#define IDH_PTYPE_HUB 1
116
+#define IDH_PTYPE_PERIPH 2
117
+#define IDH_PTYPE_PSD 3
118
+#define IDH_PTYPE_AMA 5
119
+
120
+/* SOP' Product Type (Cable Plug / VPD) */
121
+#define IDH_PTYPE_NOT_CABLE 0
122
+#define IDH_PTYPE_PCABLE 3
123
+#define IDH_PTYPE_ACABLE 4
124
+#define IDH_PTYPE_VPD 6
125
+
126
+/* SOP Product Type (DFP) */
127
+#define IDH_PTYPE_NOT_DFP 0
128
+#define IDH_PTYPE_DFP_HUB 1
129
+#define IDH_PTYPE_DFP_HOST 2
130
+#define IDH_PTYPE_DFP_PB 3
131
+
132
+#define VDO_IDH(usbh, usbd, ufp_cable, is_modal, dfp, conn, vid) \
133
+ ((usbh) << 31 | (usbd) << 30 | ((ufp_cable) & 0x7) << 27 \
134
+ | (is_modal) << 26 | ((dfp) & 0x7) << 23 | ((conn) & 0x3) << 21 \
135
+ | ((vid) & 0xffff))
136
+
137
+/*
138
+ * Cert Stat VDO
139
+ * -------------
140
+ * <31:0> : USB-IF assigned XID for this cable
141
+ */
142
+#define VDO_CERT(xid) ((xid) & 0xffffffff)
143
+
144
+/*
145
+ * Product VDO
146
+ * -----------
147
+ * <31:16> : USB Product ID
148
+ * <15:0> : USB bcdDevice
149
+ */
150
+#define VDO_PRODUCT(pid, bcd) (((pid) & 0xffff) << 16 | ((bcd) & 0xffff))
151
+
152
+/*
153
+ * UFP VDO (PD Revision 3.0+ only)
154
+ * --------
155
+ * <31:29> :: UFP VDO version
156
+ * <28> :: Reserved
157
+ * <27:24> :: Device capability
158
+ * <23:22> :: Connector type (10b == receptacle, 11b == captive plug)
159
+ * <21:11> :: Reserved
160
+ * <10:8> :: Vconn power (AMA only)
161
+ * <7> :: Vconn required (AMA only, 0b == no, 1b == yes)
162
+ * <6> :: Vbus required (AMA only, 0b == yes, 1b == no)
163
+ * <5:3> :: Alternate modes
164
+ * <2:0> :: USB highest speed
165
+ */
166
+/* UFP VDO Version */
167
+#define UFP_VDO_VER1_2 2
168
+
169
+/* Device Capability */
170
+#define DEV_USB2_CAPABLE (1 << 0)
171
+#define DEV_USB2_BILLBOARD (1 << 1)
172
+#define DEV_USB3_CAPABLE (1 << 2)
173
+#define DEV_USB4_CAPABLE (1 << 3)
174
+
175
+/* Connector Type */
176
+#define UFP_RECEPTACLE 2
177
+#define UFP_CAPTIVE 3
178
+
179
+/* Vconn Power (AMA only, set to AMA_VCONN_NOT_REQ if Vconn is not required) */
180
+#define AMA_VCONN_PWR_1W 0
181
+#define AMA_VCONN_PWR_1W5 1
182
+#define AMA_VCONN_PWR_2W 2
183
+#define AMA_VCONN_PWR_3W 3
184
+#define AMA_VCONN_PWR_4W 4
185
+#define AMA_VCONN_PWR_5W 5
186
+#define AMA_VCONN_PWR_6W 6
187
+
188
+/* Vconn Required (AMA only) */
189
+#define AMA_VCONN_NOT_REQ 0
190
+#define AMA_VCONN_REQ 1
191
+
192
+/* Vbus Required (AMA only) */
193
+#define AMA_VBUS_REQ 0
194
+#define AMA_VBUS_NOT_REQ 1
195
+
196
+/* Alternate Modes */
197
+#define UFP_ALTMODE_NOT_SUPP 0
198
+#define UFP_ALTMODE_TBT3 (1 << 0)
199
+#define UFP_ALTMODE_RECFG (1 << 1)
200
+#define UFP_ALTMODE_NO_RECFG (1 << 2)
201
+
202
+/* USB Highest Speed */
203
+#define UFP_USB2_ONLY 0
204
+#define UFP_USB32_GEN1 1
205
+#define UFP_USB32_4_GEN2 2
206
+#define UFP_USB4_GEN3 3
207
+
208
+#define VDO_UFP(ver, cap, conn, vcpwr, vcr, vbr, alt, spd) \
209
+ (((ver) & 0x7) << 29 | ((cap) & 0xf) << 24 | ((conn) & 0x3) << 22 \
210
+ | ((vcpwr) & 0x7) << 8 | (vcr) << 7 | (vbr) << 6 | ((alt) & 0x7) << 3 \
211
+ | ((spd) & 0x7))
212
+
213
+/*
214
+ * DFP VDO (PD Revision 3.0+ only)
215
+ * --------
216
+ * <31:29> :: DFP VDO version
217
+ * <28:27> :: Reserved
218
+ * <26:24> :: Host capability
219
+ * <23:22> :: Connector type (10b == receptacle, 11b == captive plug)
220
+ * <21:5> :: Reserved
221
+ * <4:0> :: Port number
222
+ */
223
+#define DFP_VDO_VER1_1 1
224
+#define HOST_USB2_CAPABLE (1 << 0)
225
+#define HOST_USB3_CAPABLE (1 << 1)
226
+#define HOST_USB4_CAPABLE (1 << 2)
227
+#define DFP_RECEPTACLE 2
228
+#define DFP_CAPTIVE 3
229
+
230
+#define VDO_DFP(ver, cap, conn, pnum) \
231
+ (((ver) & 0x7) << 29 | ((cap) & 0x7) << 24 | ((conn) & 0x3) << 22 \
232
+ | ((pnum) & 0x1f))
233
+
234
+/*
235
+ * Cable VDO (for both Passive and Active Cable VDO in PD Rev2.0)
236
+ * ---------
237
+ * <31:28> :: Cable HW version
238
+ * <27:24> :: Cable FW version
239
+ * <23:20> :: Reserved, Shall be set to zero
240
+ * <19:18> :: type-C to Type-A/B/C/Captive (00b == A, 01 == B, 10 == C, 11 == Captive)
241
+ * <17> :: Reserved, Shall be set to zero
242
+ * <16:13> :: cable latency (0001 == <10ns(~1m length))
243
+ * <12:11> :: cable termination type (11b == both ends active VCONN req)
244
+ * <10> :: SSTX1 Directionality support (0b == fixed, 1b == cfgable)
245
+ * <9> :: SSTX2 Directionality support
246
+ * <8> :: SSRX1 Directionality support
247
+ * <7> :: SSRX2 Directionality support
248
+ * <6:5> :: Vbus current handling capability (01b == 3A, 10b == 5A)
249
+ * <4> :: Vbus through cable (0b == no, 1b == yes)
250
+ * <3> :: SOP" controller present? (0b == no, 1b == yes)
251
+ * <2:0> :: USB SS Signaling support
252
+ *
253
+ * Passive Cable VDO (PD Rev3.0+)
254
+ * ---------
255
+ * <31:28> :: Cable HW version
256
+ * <27:24> :: Cable FW version
257
+ * <23:21> :: VDO version
258
+ * <20> :: Reserved, Shall be set to zero
259
+ * <19:18> :: Type-C to Type-C/Captive (10b == C, 11b == Captive)
260
+ * <17> :: Reserved, Shall be set to zero
261
+ * <16:13> :: cable latency (0001 == <10ns(~1m length))
262
+ * <12:11> :: cable termination type (10b == Vconn not req, 01b == Vconn req)
263
+ * <10:9> :: Maximum Vbus voltage (00b == 20V, 01b == 30V, 10b == 40V, 11b == 50V)
264
+ * <8:7> :: Reserved, Shall be set to zero
265
+ * <6:5> :: Vbus current handling capability (01b == 3A, 10b == 5A)
266
+ * <4:3> :: Reserved, Shall be set to zero
267
+ * <2:0> :: USB highest speed
268
+ *
269
+ * Active Cable VDO 1 (PD Rev3.0+)
270
+ * ---------
271
+ * <31:28> :: Cable HW version
272
+ * <27:24> :: Cable FW version
273
+ * <23:21> :: VDO version
274
+ * <20> :: Reserved, Shall be set to zero
275
+ * <19:18> :: Connector type (10b == C, 11b == Captive)
276
+ * <17> :: Reserved, Shall be set to zero
277
+ * <16:13> :: cable latency (0001 == <10ns(~1m length))
278
+ * <12:11> :: cable termination type (10b == one end active, 11b == both ends active VCONN req)
279
+ * <10:9> :: Maximum Vbus voltage (00b == 20V, 01b == 30V, 10b == 40V, 11b == 50V)
280
+ * <8> :: SBU supported (0b == supported, 1b == not supported)
281
+ * <7> :: SBU type (0b == passive, 1b == active)
282
+ * <6:5> :: Vbus current handling capability (01b == 3A, 10b == 5A)
283
+ * <4> :: Vbus through cable (0b == no, 1b == yes)
284
+ * <3> :: SOP" controller present? (0b == no, 1b == yes)
285
+ * <2:0> :: USB highest speed
286
+ */
287
+/* Cable VDO Version */
288
+#define CABLE_VDO_VER1_0 0
289
+#define CABLE_VDO_VER1_3 3
290
+
291
+/* Connector Type (_ATYPE and _BTYPE are for PD Rev2.0 only) */
292
+#define CABLE_ATYPE 0
293
+#define CABLE_BTYPE 1
294
+#define CABLE_CTYPE 2
295
+#define CABLE_CAPTIVE 3
296
+
297
+/* Cable Latency */
298
+#define CABLE_LATENCY_1M 1
299
+#define CABLE_LATENCY_2M 2
300
+#define CABLE_LATENCY_3M 3
301
+#define CABLE_LATENCY_4M 4
302
+#define CABLE_LATENCY_5M 5
303
+#define CABLE_LATENCY_6M 6
304
+#define CABLE_LATENCY_7M 7
305
+#define CABLE_LATENCY_7M_PLUS 8
306
+
307
+/* Cable Termination Type */
308
+#define PCABLE_VCONN_NOT_REQ 0
309
+#define PCABLE_VCONN_REQ 1
310
+#define ACABLE_ONE_END 2
311
+#define ACABLE_BOTH_END 3
312
+
313
+/* Maximum Vbus Voltage */
314
+#define CABLE_MAX_VBUS_20V 0
315
+#define CABLE_MAX_VBUS_30V 1
316
+#define CABLE_MAX_VBUS_40V 2
317
+#define CABLE_MAX_VBUS_50V 3
318
+
319
+/* Active Cable SBU Supported/Type */
320
+#define ACABLE_SBU_SUPP 0
321
+#define ACABLE_SBU_NOT_SUPP 1
322
+#define ACABLE_SBU_PASSIVE 0
323
+#define ACABLE_SBU_ACTIVE 1
324
+
325
+/* Vbus Current Handling Capability */
326
+#define CABLE_CURR_DEF 0
327
+#define CABLE_CURR_3A 1
328
+#define CABLE_CURR_5A 2
329
+
330
+/* USB SuperSpeed Signaling Support (PD Rev2.0) */
331
+#define CABLE_USBSS_U2_ONLY 0
332
+#define CABLE_USBSS_U31_GEN1 1
333
+#define CABLE_USBSS_U31_GEN2 2
334
+
335
+/* USB Highest Speed */
336
+#define CABLE_USB2_ONLY 0
337
+#define CABLE_USB32_GEN1 1
338
+#define CABLE_USB32_4_GEN2 2
339
+#define CABLE_USB4_GEN3 3
340
+
341
+#define VDO_CABLE(hw, fw, cbl, lat, term, tx1d, tx2d, rx1d, rx2d, cur, vps, sopp, usbss) \
342
+ (((hw) & 0x7) << 28 | ((fw) & 0x7) << 24 | ((cbl) & 0x3) << 18 \
343
+ | ((lat) & 0x7) << 13 | ((term) & 0x3) << 11 | (tx1d) << 10 \
344
+ | (tx2d) << 9 | (rx1d) << 8 | (rx2d) << 7 | ((cur) & 0x3) << 5 \
345
+ | (vps) << 4 | (sopp) << 3 | ((usbss) & 0x7))
346
+#define VDO_PCABLE(hw, fw, ver, conn, lat, term, vbm, cur, spd) \
347
+ (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
348
+ | ((conn) & 0x3) << 18 | ((lat) & 0xf) << 13 | ((term) & 0x3) << 11 \
349
+ | ((vbm) & 0x3) << 9 | ((cur) & 0x3) << 5 | ((spd) & 0x7))
350
+#define VDO_ACABLE1(hw, fw, ver, conn, lat, term, vbm, sbu, sbut, cur, vbt, sopp, spd) \
351
+ (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
352
+ | ((conn) & 0x3) << 18 | ((lat) & 0xf) << 13 | ((term) & 0x3) << 11 \
353
+ | ((vbm) & 0x3) << 9 | (sbu) << 8 | (sbut) << 7 | ((cur) & 0x3) << 5 \
354
+ | (vbt) << 4 | (sopp) << 3 | ((spd) & 0x7))
355
+
356
+/*
357
+ * Active Cable VDO 2
358
+ * ---------
359
+ * <31:24> :: Maximum operating temperature
360
+ * <23:16> :: Shutdown temperature
361
+ * <15> :: Reserved, Shall be set to zero
362
+ * <14:12> :: U3/CLd power
363
+ * <11> :: U3 to U0 transition mode (0b == direct, 1b == through U3S)
364
+ * <10> :: Physical connection (0b == copper, 1b == optical)
365
+ * <9> :: Active element (0b == redriver, 1b == retimer)
366
+ * <8> :: USB4 supported (0b == yes, 1b == no)
367
+ * <7:6> :: USB2 hub hops consumed
368
+ * <5> :: USB2 supported (0b == yes, 1b == no)
369
+ * <4> :: USB3.2 supported (0b == yes, 1b == no)
370
+ * <3> :: USB lanes supported (0b == one lane, 1b == two lanes)
371
+ * <2> :: Optically isolated active cable (0b == no, 1b == yes)
372
+ * <1> :: Reserved, Shall be set to zero
373
+ * <0> :: USB gen (0b == gen1, 1b == gen2+)
374
+ */
375
+/* U3/CLd Power*/
376
+#define ACAB2_U3_CLD_10MW_PLUS 0
377
+#define ACAB2_U3_CLD_10MW 1
378
+#define ACAB2_U3_CLD_5MW 2
379
+#define ACAB2_U3_CLD_1MW 3
380
+#define ACAB2_U3_CLD_500UW 4
381
+#define ACAB2_U3_CLD_200UW 5
382
+#define ACAB2_U3_CLD_50UW 6
383
+
384
+/* Other Active Cable VDO 2 Fields */
385
+#define ACAB2_U3U0_DIRECT 0
386
+#define ACAB2_U3U0_U3S 1
387
+#define ACAB2_PHY_COPPER 0
388
+#define ACAB2_PHY_OPTICAL 1
389
+#define ACAB2_REDRIVER 0
390
+#define ACAB2_RETIMER 1
391
+#define ACAB2_USB4_SUPP 0
392
+#define ACAB2_USB4_NOT_SUPP 1
393
+#define ACAB2_USB2_SUPP 0
394
+#define ACAB2_USB2_NOT_SUPP 1
395
+#define ACAB2_USB32_SUPP 0
396
+#define ACAB2_USB32_NOT_SUPP 1
397
+#define ACAB2_LANES_ONE 0
398
+#define ACAB2_LANES_TWO 1
399
+#define ACAB2_OPT_ISO_NO 0
400
+#define ACAB2_OPT_ISO_YES 1
401
+#define ACAB2_GEN_1 0
402
+#define ACAB2_GEN_2_PLUS 1
403
+
404
+#define VDO_ACABLE2(mtemp, stemp, u3p, trans, phy, ele, u4, hops, u2, u32, lane, iso, gen) \
405
+ (((mtemp) & 0xff) << 24 | ((stemp) & 0xff) << 16 | ((u3p) & 0x7) << 12 \
406
+ | (trans) << 11 | (phy) << 10 | (ele) << 9 | (u4) << 8 \
407
+ | ((hops) & 0x3) << 6 | (u2) << 5 | (u32) << 4 | (lane) << 3 \
408
+ | (iso) << 2 | (gen))
409
+
410
+/*
411
+ * AMA VDO (PD Rev2.0)
412
+ * ---------
413
+ * <31:28> :: Cable HW version
414
+ * <27:24> :: Cable FW version
415
+ * <23:12> :: Reserved, Shall be set to zero
416
+ * <11> :: SSTX1 Directionality support (0b == fixed, 1b == cfgable)
417
+ * <10> :: SSTX2 Directionality support
418
+ * <9> :: SSRX1 Directionality support
419
+ * <8> :: SSRX2 Directionality support
420
+ * <7:5> :: Vconn power
421
+ * <4> :: Vconn power required
422
+ * <3> :: Vbus power required
423
+ * <2:0> :: USB SS Signaling support
424
+ */
425
+#define VDO_AMA(hw, fw, tx1d, tx2d, rx1d, rx2d, vcpwr, vcr, vbr, usbss) \
426
+ (((hw) & 0x7) << 28 | ((fw) & 0x7) << 24 \
427
+ | (tx1d) << 11 | (tx2d) << 10 | (rx1d) << 9 | (rx2d) << 8 \
428
+ | ((vcpwr) & 0x7) << 5 | (vcr) << 4 | (vbr) << 3 \
429
+ | ((usbss) & 0x7))
430
+
431
+#define PD_VDO_AMA_VCONN_REQ(vdo) (((vdo) >> 4) & 1)
432
+#define PD_VDO_AMA_VBUS_REQ(vdo) (((vdo) >> 3) & 1)
433
+
434
+#define AMA_USBSS_U2_ONLY 0
435
+#define AMA_USBSS_U31_GEN1 1
436
+#define AMA_USBSS_U31_GEN2 2
437
+#define AMA_USBSS_BBONLY 3
438
+
439
+/*
440
+ * VPD VDO
441
+ * ---------
442
+ * <31:28> :: HW version
443
+ * <27:24> :: FW version
444
+ * <23:21> :: VDO version
445
+ * <20:17> :: Reserved, Shall be set to zero
446
+ * <16:15> :: Maximum Vbus voltage (00b == 20V, 01b == 30V, 10b == 40V, 11b == 50V)
447
+ * <14> :: Charge through current support (0b == 3A, 1b == 5A)
448
+ * <13> :: Reserved, Shall be set to zero
449
+ * <12:7> :: Vbus impedance
450
+ * <6:1> :: Ground impedance
451
+ * <0> :: Charge through support (0b == no, 1b == yes)
452
+ */
453
+#define VPD_VDO_VER1_0 0
454
+#define VPD_MAX_VBUS_20V 0
455
+#define VPD_MAX_VBUS_30V 1
456
+#define VPD_MAX_VBUS_40V 2
457
+#define VPD_MAX_VBUS_50V 3
458
+#define VPDCT_CURR_3A 0
459
+#define VPDCT_CURR_5A 1
460
+#define VPDCT_NOT_SUPP 0
461
+#define VPDCT_SUPP 1
462
+
463
+#define VDO_VPD(hw, fw, ver, vbm, curr, vbi, gi, ct) \
464
+ (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
465
+ | ((vbm) & 0x3) << 15 | (curr) << 14 | ((vbi) & 0x3f) << 7 \
466
+ | ((gi) & 0x3f) << 1 | (ct))
467
+
468
+#endif /* __DT_POWER_DELIVERY_H */