1
2#ifndef __DT_POWER_DELIVERY_H
3#define __DT_POWER_DELIVERY_H
4
5
6#define PDO_TYPE_FIXED 0
7#define PDO_TYPE_BATT 1
8#define PDO_TYPE_VAR 2
9#define PDO_TYPE_APDO 3
10
11#define PDO_TYPE_SHIFT 30
12#define PDO_TYPE_MASK 0x3
13
14#define PDO_TYPE(t) ((t) << PDO_TYPE_SHIFT)
15
16#define PDO_VOLT_MASK 0x3ff
17#define PDO_CURR_MASK 0x3ff
18#define PDO_PWR_MASK 0x3ff
19
20#define PDO_FIXED_DUAL_ROLE (1 << 29)
21#define PDO_FIXED_SUSPEND (1 << 28)
22#define PDO_FIXED_HIGHER_CAP (1 << 28)
23#define PDO_FIXED_EXTPOWER (1 << 27)
24#define PDO_FIXED_USB_COMM (1 << 26)
25#define PDO_FIXED_DATA_SWAP (1 << 25)
26#define PDO_FIXED_VOLT_SHIFT 10
27#define PDO_FIXED_CURR_SHIFT 0
28
29#define PDO_FIXED_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_FIXED_VOLT_SHIFT)
30#define PDO_FIXED_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_FIXED_CURR_SHIFT)
31
32#define PDO_FIXED(mv, ma, flags) \
33 (PDO_TYPE(PDO_TYPE_FIXED) | (flags) | \
34 PDO_FIXED_VOLT(mv) | PDO_FIXED_CURR(ma))
35
36#define VSAFE5V 5000
37
38#define PDO_BATT_MAX_VOLT_SHIFT 20
39#define PDO_BATT_MIN_VOLT_SHIFT 10
40#define PDO_BATT_MAX_PWR_SHIFT 0
41
42#define PDO_BATT_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MIN_VOLT_SHIFT)
43#define PDO_BATT_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MAX_VOLT_SHIFT)
44#define PDO_BATT_MAX_POWER(mw) ((((mw) / 250) & PDO_PWR_MASK) << PDO_BATT_MAX_PWR_SHIFT)
45
46#define PDO_BATT(min_mv, max_mv, max_mw) \
47 (PDO_TYPE(PDO_TYPE_BATT) | PDO_BATT_MIN_VOLT(min_mv) | \
48 PDO_BATT_MAX_VOLT(max_mv) | PDO_BATT_MAX_POWER(max_mw))
49
50#define PDO_VAR_MAX_VOLT_SHIFT 20
51#define PDO_VAR_MIN_VOLT_SHIFT 10
52#define PDO_VAR_MAX_CURR_SHIFT 0
53
54#define PDO_VAR_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MIN_VOLT_SHIFT)
55#define PDO_VAR_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MAX_VOLT_SHIFT)
56#define PDO_VAR_MAX_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_VAR_MAX_CURR_SHIFT)
57
58#define PDO_VAR(min_mv, max_mv, max_ma) \
59 (PDO_TYPE(PDO_TYPE_VAR) | PDO_VAR_MIN_VOLT(min_mv) | \
60 PDO_VAR_MAX_VOLT(max_mv) | PDO_VAR_MAX_CURR(max_ma))
61
62#define APDO_TYPE_PPS 0
63
64#define PDO_APDO_TYPE_SHIFT 28
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
70#define PDO_PPS_APDO_MIN_VOLT_SHIFT 8
71#define PDO_PPS_APDO_MAX_CURR_SHIFT 0
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
90
91
92
93#define FRS_DEFAULT_POWER 1
94#define FRS_5V_1P5A 2
95#define FRS_5V_3A 3
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111#define IDH_PTYPE_UNDEF 0
112
113
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
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
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
139
140
141
142#define VDO_CERT(xid) ((xid) & 0xffffffff)
143
144
145
146
147
148
149
150#define VDO_PRODUCT(pid, bcd) (((pid) & 0xffff) << 16 | ((bcd) & 0xffff))
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167#define UFP_VDO_VER1_2 2
168
169
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
176#define UFP_RECEPTACLE 2
177#define UFP_CAPTIVE 3
178
179
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
189#define AMA_VCONN_NOT_REQ 0
190#define AMA_VCONN_REQ 1
191
192
193#define AMA_VBUS_REQ 0
194#define AMA_VBUS_NOT_REQ 1
195
196
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
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
215
216
217
218
219
220
221
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
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288#define CABLE_VDO_VER1_0 0
289#define CABLE_VDO_VER1_3 3
290
291
292#define CABLE_ATYPE 0
293#define CABLE_BTYPE 1
294#define CABLE_CTYPE 2
295#define CABLE_CAPTIVE 3
296
297
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
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
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
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
326#define CABLE_CURR_DEF 0
327#define CABLE_CURR_3A 1
328#define CABLE_CURR_5A 2
329
330
331#define CABLE_USBSS_U2_ONLY 0
332#define CABLE_USBSS_U31_GEN1 1
333#define CABLE_USBSS_U31_GEN2 2
334
335
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
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
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
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
412
413
414
415
416
417
418
419
420
421
422
423
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
441
442
443
444
445
446
447
448
449
450
451
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
469