0001
0002 #ifndef __DT_POWER_DELIVERY_H
0003 #define __DT_POWER_DELIVERY_H
0004
0005
0006 #define PDO_TYPE_FIXED 0
0007 #define PDO_TYPE_BATT 1
0008 #define PDO_TYPE_VAR 2
0009 #define PDO_TYPE_APDO 3
0010
0011 #define PDO_TYPE_SHIFT 30
0012 #define PDO_TYPE_MASK 0x3
0013
0014 #define PDO_TYPE(t) ((t) << PDO_TYPE_SHIFT)
0015
0016 #define PDO_VOLT_MASK 0x3ff
0017 #define PDO_CURR_MASK 0x3ff
0018 #define PDO_PWR_MASK 0x3ff
0019
0020 #define PDO_FIXED_DUAL_ROLE (1 << 29)
0021 #define PDO_FIXED_SUSPEND (1 << 28)
0022 #define PDO_FIXED_HIGHER_CAP (1 << 28)
0023 #define PDO_FIXED_EXTPOWER (1 << 27)
0024 #define PDO_FIXED_USB_COMM (1 << 26)
0025 #define PDO_FIXED_DATA_SWAP (1 << 25)
0026 #define PDO_FIXED_VOLT_SHIFT 10
0027 #define PDO_FIXED_CURR_SHIFT 0
0028
0029 #define PDO_FIXED_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_FIXED_VOLT_SHIFT)
0030 #define PDO_FIXED_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_FIXED_CURR_SHIFT)
0031
0032 #define PDO_FIXED(mv, ma, flags) \
0033 (PDO_TYPE(PDO_TYPE_FIXED) | (flags) | \
0034 PDO_FIXED_VOLT(mv) | PDO_FIXED_CURR(ma))
0035
0036 #define VSAFE5V 5000
0037
0038 #define PDO_BATT_MAX_VOLT_SHIFT 20
0039 #define PDO_BATT_MIN_VOLT_SHIFT 10
0040 #define PDO_BATT_MAX_PWR_SHIFT 0
0041
0042 #define PDO_BATT_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MIN_VOLT_SHIFT)
0043 #define PDO_BATT_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MAX_VOLT_SHIFT)
0044 #define PDO_BATT_MAX_POWER(mw) ((((mw) / 250) & PDO_PWR_MASK) << PDO_BATT_MAX_PWR_SHIFT)
0045
0046 #define PDO_BATT(min_mv, max_mv, max_mw) \
0047 (PDO_TYPE(PDO_TYPE_BATT) | PDO_BATT_MIN_VOLT(min_mv) | \
0048 PDO_BATT_MAX_VOLT(max_mv) | PDO_BATT_MAX_POWER(max_mw))
0049
0050 #define PDO_VAR_MAX_VOLT_SHIFT 20
0051 #define PDO_VAR_MIN_VOLT_SHIFT 10
0052 #define PDO_VAR_MAX_CURR_SHIFT 0
0053
0054 #define PDO_VAR_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MIN_VOLT_SHIFT)
0055 #define PDO_VAR_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MAX_VOLT_SHIFT)
0056 #define PDO_VAR_MAX_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_VAR_MAX_CURR_SHIFT)
0057
0058 #define PDO_VAR(min_mv, max_mv, max_ma) \
0059 (PDO_TYPE(PDO_TYPE_VAR) | PDO_VAR_MIN_VOLT(min_mv) | \
0060 PDO_VAR_MAX_VOLT(max_mv) | PDO_VAR_MAX_CURR(max_ma))
0061
0062 #define APDO_TYPE_PPS 0
0063
0064 #define PDO_APDO_TYPE_SHIFT 28
0065 #define PDO_APDO_TYPE_MASK 0x3
0066
0067 #define PDO_APDO_TYPE(t) ((t) << PDO_APDO_TYPE_SHIFT)
0068
0069 #define PDO_PPS_APDO_MAX_VOLT_SHIFT 17
0070 #define PDO_PPS_APDO_MIN_VOLT_SHIFT 8
0071 #define PDO_PPS_APDO_MAX_CURR_SHIFT 0
0072
0073 #define PDO_PPS_APDO_VOLT_MASK 0xff
0074 #define PDO_PPS_APDO_CURR_MASK 0x7f
0075
0076 #define PDO_PPS_APDO_MIN_VOLT(mv) \
0077 ((((mv) / 100) & PDO_PPS_APDO_VOLT_MASK) << PDO_PPS_APDO_MIN_VOLT_SHIFT)
0078 #define PDO_PPS_APDO_MAX_VOLT(mv) \
0079 ((((mv) / 100) & PDO_PPS_APDO_VOLT_MASK) << PDO_PPS_APDO_MAX_VOLT_SHIFT)
0080 #define PDO_PPS_APDO_MAX_CURR(ma) \
0081 ((((ma) / 50) & PDO_PPS_APDO_CURR_MASK) << PDO_PPS_APDO_MAX_CURR_SHIFT)
0082
0083 #define PDO_PPS_APDO(min_mv, max_mv, max_ma) \
0084 (PDO_TYPE(PDO_TYPE_APDO) | PDO_APDO_TYPE(APDO_TYPE_PPS) | \
0085 PDO_PPS_APDO_MIN_VOLT(min_mv) | PDO_PPS_APDO_MAX_VOLT(max_mv) | \
0086 PDO_PPS_APDO_MAX_CURR(max_ma))
0087
0088
0089
0090
0091
0092
0093 #define FRS_DEFAULT_POWER 1
0094 #define FRS_5V_1P5A 2
0095 #define FRS_5V_3A 3
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111 #define IDH_PTYPE_UNDEF 0
0112
0113
0114 #define IDH_PTYPE_NOT_UFP 0
0115 #define IDH_PTYPE_HUB 1
0116 #define IDH_PTYPE_PERIPH 2
0117 #define IDH_PTYPE_PSD 3
0118 #define IDH_PTYPE_AMA 5
0119
0120
0121 #define IDH_PTYPE_NOT_CABLE 0
0122 #define IDH_PTYPE_PCABLE 3
0123 #define IDH_PTYPE_ACABLE 4
0124 #define IDH_PTYPE_VPD 6
0125
0126
0127 #define IDH_PTYPE_NOT_DFP 0
0128 #define IDH_PTYPE_DFP_HUB 1
0129 #define IDH_PTYPE_DFP_HOST 2
0130 #define IDH_PTYPE_DFP_PB 3
0131
0132 #define VDO_IDH(usbh, usbd, ufp_cable, is_modal, dfp, conn, vid) \
0133 ((usbh) << 31 | (usbd) << 30 | ((ufp_cable) & 0x7) << 27 \
0134 | (is_modal) << 26 | ((dfp) & 0x7) << 23 | ((conn) & 0x3) << 21 \
0135 | ((vid) & 0xffff))
0136
0137
0138
0139
0140
0141
0142 #define VDO_CERT(xid) ((xid) & 0xffffffff)
0143
0144
0145
0146
0147
0148
0149
0150 #define VDO_PRODUCT(pid, bcd) (((pid) & 0xffff) << 16 | ((bcd) & 0xffff))
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167 #define UFP_VDO_VER1_2 2
0168
0169
0170 #define DEV_USB2_CAPABLE (1 << 0)
0171 #define DEV_USB2_BILLBOARD (1 << 1)
0172 #define DEV_USB3_CAPABLE (1 << 2)
0173 #define DEV_USB4_CAPABLE (1 << 3)
0174
0175
0176 #define UFP_RECEPTACLE 2
0177 #define UFP_CAPTIVE 3
0178
0179
0180 #define AMA_VCONN_PWR_1W 0
0181 #define AMA_VCONN_PWR_1W5 1
0182 #define AMA_VCONN_PWR_2W 2
0183 #define AMA_VCONN_PWR_3W 3
0184 #define AMA_VCONN_PWR_4W 4
0185 #define AMA_VCONN_PWR_5W 5
0186 #define AMA_VCONN_PWR_6W 6
0187
0188
0189 #define AMA_VCONN_NOT_REQ 0
0190 #define AMA_VCONN_REQ 1
0191
0192
0193 #define AMA_VBUS_REQ 0
0194 #define AMA_VBUS_NOT_REQ 1
0195
0196
0197 #define UFP_ALTMODE_NOT_SUPP 0
0198 #define UFP_ALTMODE_TBT3 (1 << 0)
0199 #define UFP_ALTMODE_RECFG (1 << 1)
0200 #define UFP_ALTMODE_NO_RECFG (1 << 2)
0201
0202
0203 #define UFP_USB2_ONLY 0
0204 #define UFP_USB32_GEN1 1
0205 #define UFP_USB32_4_GEN2 2
0206 #define UFP_USB4_GEN3 3
0207
0208 #define VDO_UFP(ver, cap, conn, vcpwr, vcr, vbr, alt, spd) \
0209 (((ver) & 0x7) << 29 | ((cap) & 0xf) << 24 | ((conn) & 0x3) << 22 \
0210 | ((vcpwr) & 0x7) << 8 | (vcr) << 7 | (vbr) << 6 | ((alt) & 0x7) << 3 \
0211 | ((spd) & 0x7))
0212
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222
0223 #define DFP_VDO_VER1_1 1
0224 #define HOST_USB2_CAPABLE (1 << 0)
0225 #define HOST_USB3_CAPABLE (1 << 1)
0226 #define HOST_USB4_CAPABLE (1 << 2)
0227 #define DFP_RECEPTACLE 2
0228 #define DFP_CAPTIVE 3
0229
0230 #define VDO_DFP(ver, cap, conn, pnum) \
0231 (((ver) & 0x7) << 29 | ((cap) & 0x7) << 24 | ((conn) & 0x3) << 22 \
0232 | ((pnum) & 0x1f))
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287
0288 #define CABLE_VDO_VER1_0 0
0289 #define CABLE_VDO_VER1_3 3
0290
0291
0292 #define CABLE_ATYPE 0
0293 #define CABLE_BTYPE 1
0294 #define CABLE_CTYPE 2
0295 #define CABLE_CAPTIVE 3
0296
0297
0298 #define CABLE_LATENCY_1M 1
0299 #define CABLE_LATENCY_2M 2
0300 #define CABLE_LATENCY_3M 3
0301 #define CABLE_LATENCY_4M 4
0302 #define CABLE_LATENCY_5M 5
0303 #define CABLE_LATENCY_6M 6
0304 #define CABLE_LATENCY_7M 7
0305 #define CABLE_LATENCY_7M_PLUS 8
0306
0307
0308 #define PCABLE_VCONN_NOT_REQ 0
0309 #define PCABLE_VCONN_REQ 1
0310 #define ACABLE_ONE_END 2
0311 #define ACABLE_BOTH_END 3
0312
0313
0314 #define CABLE_MAX_VBUS_20V 0
0315 #define CABLE_MAX_VBUS_30V 1
0316 #define CABLE_MAX_VBUS_40V 2
0317 #define CABLE_MAX_VBUS_50V 3
0318
0319
0320 #define ACABLE_SBU_SUPP 0
0321 #define ACABLE_SBU_NOT_SUPP 1
0322 #define ACABLE_SBU_PASSIVE 0
0323 #define ACABLE_SBU_ACTIVE 1
0324
0325
0326 #define CABLE_CURR_DEF 0
0327 #define CABLE_CURR_3A 1
0328 #define CABLE_CURR_5A 2
0329
0330
0331 #define CABLE_USBSS_U2_ONLY 0
0332 #define CABLE_USBSS_U31_GEN1 1
0333 #define CABLE_USBSS_U31_GEN2 2
0334
0335
0336 #define CABLE_USB2_ONLY 0
0337 #define CABLE_USB32_GEN1 1
0338 #define CABLE_USB32_4_GEN2 2
0339 #define CABLE_USB4_GEN3 3
0340
0341 #define VDO_CABLE(hw, fw, cbl, lat, term, tx1d, tx2d, rx1d, rx2d, cur, vps, sopp, usbss) \
0342 (((hw) & 0x7) << 28 | ((fw) & 0x7) << 24 | ((cbl) & 0x3) << 18 \
0343 | ((lat) & 0x7) << 13 | ((term) & 0x3) << 11 | (tx1d) << 10 \
0344 | (tx2d) << 9 | (rx1d) << 8 | (rx2d) << 7 | ((cur) & 0x3) << 5 \
0345 | (vps) << 4 | (sopp) << 3 | ((usbss) & 0x7))
0346 #define VDO_PCABLE(hw, fw, ver, conn, lat, term, vbm, cur, spd) \
0347 (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
0348 | ((conn) & 0x3) << 18 | ((lat) & 0xf) << 13 | ((term) & 0x3) << 11 \
0349 | ((vbm) & 0x3) << 9 | ((cur) & 0x3) << 5 | ((spd) & 0x7))
0350 #define VDO_ACABLE1(hw, fw, ver, conn, lat, term, vbm, sbu, sbut, cur, vbt, sopp, spd) \
0351 (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
0352 | ((conn) & 0x3) << 18 | ((lat) & 0xf) << 13 | ((term) & 0x3) << 11 \
0353 | ((vbm) & 0x3) << 9 | (sbu) << 8 | (sbut) << 7 | ((cur) & 0x3) << 5 \
0354 | (vbt) << 4 | (sopp) << 3 | ((spd) & 0x7))
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376 #define ACAB2_U3_CLD_10MW_PLUS 0
0377 #define ACAB2_U3_CLD_10MW 1
0378 #define ACAB2_U3_CLD_5MW 2
0379 #define ACAB2_U3_CLD_1MW 3
0380 #define ACAB2_U3_CLD_500UW 4
0381 #define ACAB2_U3_CLD_200UW 5
0382 #define ACAB2_U3_CLD_50UW 6
0383
0384
0385 #define ACAB2_U3U0_DIRECT 0
0386 #define ACAB2_U3U0_U3S 1
0387 #define ACAB2_PHY_COPPER 0
0388 #define ACAB2_PHY_OPTICAL 1
0389 #define ACAB2_REDRIVER 0
0390 #define ACAB2_RETIMER 1
0391 #define ACAB2_USB4_SUPP 0
0392 #define ACAB2_USB4_NOT_SUPP 1
0393 #define ACAB2_USB2_SUPP 0
0394 #define ACAB2_USB2_NOT_SUPP 1
0395 #define ACAB2_USB32_SUPP 0
0396 #define ACAB2_USB32_NOT_SUPP 1
0397 #define ACAB2_LANES_ONE 0
0398 #define ACAB2_LANES_TWO 1
0399 #define ACAB2_OPT_ISO_NO 0
0400 #define ACAB2_OPT_ISO_YES 1
0401 #define ACAB2_GEN_1 0
0402 #define ACAB2_GEN_2_PLUS 1
0403
0404 #define VDO_ACABLE2(mtemp, stemp, u3p, trans, phy, ele, u4, hops, u2, u32, lane, iso, gen) \
0405 (((mtemp) & 0xff) << 24 | ((stemp) & 0xff) << 16 | ((u3p) & 0x7) << 12 \
0406 | (trans) << 11 | (phy) << 10 | (ele) << 9 | (u4) << 8 \
0407 | ((hops) & 0x3) << 6 | (u2) << 5 | (u32) << 4 | (lane) << 3 \
0408 | (iso) << 2 | (gen))
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425 #define VDO_AMA(hw, fw, tx1d, tx2d, rx1d, rx2d, vcpwr, vcr, vbr, usbss) \
0426 (((hw) & 0x7) << 28 | ((fw) & 0x7) << 24 \
0427 | (tx1d) << 11 | (tx2d) << 10 | (rx1d) << 9 | (rx2d) << 8 \
0428 | ((vcpwr) & 0x7) << 5 | (vcr) << 4 | (vbr) << 3 \
0429 | ((usbss) & 0x7))
0430
0431 #define PD_VDO_AMA_VCONN_REQ(vdo) (((vdo) >> 4) & 1)
0432 #define PD_VDO_AMA_VBUS_REQ(vdo) (((vdo) >> 3) & 1)
0433
0434 #define AMA_USBSS_U2_ONLY 0
0435 #define AMA_USBSS_U31_GEN1 1
0436 #define AMA_USBSS_U31_GEN2 2
0437 #define AMA_USBSS_BBONLY 3
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453 #define VPD_VDO_VER1_0 0
0454 #define VPD_MAX_VBUS_20V 0
0455 #define VPD_MAX_VBUS_30V 1
0456 #define VPD_MAX_VBUS_40V 2
0457 #define VPD_MAX_VBUS_50V 3
0458 #define VPDCT_CURR_3A 0
0459 #define VPDCT_CURR_5A 1
0460 #define VPDCT_NOT_SUPP 0
0461 #define VPDCT_SUPP 1
0462
0463 #define VDO_VPD(hw, fw, ver, vbm, curr, vbi, gi, ct) \
0464 (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
0465 | ((vbm) & 0x3) << 15 | (curr) << 14 | ((vbi) & 0x3f) << 7 \
0466 | ((gi) & 0x3f) << 1 | (ct))
0467
0468 #endif