0001
0002
0003
0004
0005
0006 #ifndef __LINUX_USB_PD_VDO_H
0007 #define __LINUX_USB_PD_VDO_H
0008
0009 #include "pd.h"
0010
0011
0012
0013
0014
0015
0016 #define VDO_MAX_OBJECTS 6
0017 #define VDO_MAX_SIZE (VDO_MAX_OBJECTS + 1)
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #define VDO(vid, type, ver, custom) \
0032 (((vid) << 16) | \
0033 ((type) << 15) | \
0034 ((ver) << 13) | \
0035 ((custom) & 0x7FFF))
0036
0037 #define VDO_SVDM_TYPE (1 << 15)
0038 #define VDO_SVDM_VERS(x) ((x) << 13)
0039 #define VDO_OPOS(x) ((x) << 8)
0040 #define VDO_CMDT(x) ((x) << 6)
0041 #define VDO_SVDM_VERS_MASK VDO_SVDM_VERS(0x3)
0042 #define VDO_OPOS_MASK VDO_OPOS(0x7)
0043 #define VDO_CMDT_MASK VDO_CMDT(0x3)
0044
0045 #define CMDT_INIT 0
0046 #define CMDT_RSP_ACK 1
0047 #define CMDT_RSP_NAK 2
0048 #define CMDT_RSP_BUSY 3
0049
0050
0051 #define VDO_SRC_INITIATOR (0 << 5)
0052 #define VDO_SRC_RESPONDER (1 << 5)
0053
0054 #define CMD_DISCOVER_IDENT 1
0055 #define CMD_DISCOVER_SVID 2
0056 #define CMD_DISCOVER_MODES 3
0057 #define CMD_ENTER_MODE 4
0058 #define CMD_EXIT_MODE 5
0059 #define CMD_ATTENTION 6
0060
0061 #define VDO_CMD_VENDOR(x) (((0x10 + (x)) & 0x1f))
0062
0063
0064 #define VDO_CMD_VERSION VDO_CMD_VENDOR(0)
0065 #define VDO_CMD_SEND_INFO VDO_CMD_VENDOR(1)
0066 #define VDO_CMD_READ_INFO VDO_CMD_VENDOR(2)
0067 #define VDO_CMD_REBOOT VDO_CMD_VENDOR(5)
0068 #define VDO_CMD_FLASH_ERASE VDO_CMD_VENDOR(6)
0069 #define VDO_CMD_FLASH_WRITE VDO_CMD_VENDOR(7)
0070 #define VDO_CMD_ERASE_SIG VDO_CMD_VENDOR(8)
0071 #define VDO_CMD_PING_ENABLE VDO_CMD_VENDOR(10)
0072 #define VDO_CMD_CURRENT VDO_CMD_VENDOR(11)
0073 #define VDO_CMD_FLIP VDO_CMD_VENDOR(12)
0074 #define VDO_CMD_GET_LOG VDO_CMD_VENDOR(13)
0075 #define VDO_CMD_CCD_EN VDO_CMD_VENDOR(14)
0076
0077 #define PD_VDO_VID(vdo) ((vdo) >> 16)
0078 #define PD_VDO_SVDM(vdo) (((vdo) >> 15) & 1)
0079 #define PD_VDO_SVDM_VER(vdo) (((vdo) >> 13) & 0x3)
0080 #define PD_VDO_OPOS(vdo) (((vdo) >> 8) & 0x7)
0081 #define PD_VDO_CMD(vdo) ((vdo) & 0x1f)
0082 #define PD_VDO_CMDT(vdo) (((vdo) >> 6) & 0x3)
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 #define VDO_INDEX_HDR 0
0098 #define VDO_INDEX_IDH 1
0099 #define VDO_INDEX_CSTAT 2
0100 #define VDO_INDEX_CABLE 3
0101 #define VDO_INDEX_PRODUCT 3
0102 #define VDO_INDEX_AMA 4
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118 #define IDH_PTYPE_UNDEF 0
0119
0120
0121 #define IDH_PTYPE_NOT_UFP 0
0122 #define IDH_PTYPE_HUB 1
0123 #define IDH_PTYPE_PERIPH 2
0124 #define IDH_PTYPE_PSD 3
0125 #define IDH_PTYPE_AMA 5
0126
0127
0128 #define IDH_PTYPE_NOT_CABLE 0
0129 #define IDH_PTYPE_PCABLE 3
0130 #define IDH_PTYPE_ACABLE 4
0131 #define IDH_PTYPE_VPD 6
0132
0133
0134 #define IDH_PTYPE_NOT_DFP 0
0135 #define IDH_PTYPE_DFP_HUB 1
0136 #define IDH_PTYPE_DFP_HOST 2
0137 #define IDH_PTYPE_DFP_PB 3
0138
0139
0140 #define IDH_DFP_MASK GENMASK(25, 23)
0141 #define IDH_CONN_MASK GENMASK(22, 21)
0142
0143 #define VDO_IDH(usbh, usbd, ufp_cable, is_modal, dfp, conn, vid) \
0144 ((usbh) << 31 | (usbd) << 30 | ((ufp_cable) & 0x7) << 27 \
0145 | (is_modal) << 26 | ((dfp) & 0x7) << 23 | ((conn) & 0x3) << 21 \
0146 | ((vid) & 0xffff))
0147
0148 #define PD_IDH_PTYPE(vdo) (((vdo) >> 27) & 0x7)
0149 #define PD_IDH_VID(vdo) ((vdo) & 0xffff)
0150 #define PD_IDH_MODAL_SUPP(vdo) ((vdo) & (1 << 26))
0151 #define PD_IDH_DFP_PTYPE(vdo) (((vdo) >> 23) & 0x7)
0152 #define PD_IDH_CONN_TYPE(vdo) (((vdo) >> 21) & 0x3)
0153
0154
0155
0156
0157
0158
0159 #define PD_CSTAT_XID(vdo) (vdo)
0160 #define VDO_CERT(xid) ((xid) & 0xffffffff)
0161
0162
0163
0164
0165
0166
0167
0168 #define VDO_PRODUCT(pid, bcd) (((pid) & 0xffff) << 16 | ((bcd) & 0xffff))
0169 #define PD_PRODUCT_PID(vdo) (((vdo) >> 16) & 0xffff)
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185 #define PD_VDO_UFP_DEVCAP(vdo) (((vdo) & GENMASK(27, 24)) >> 24)
0186
0187
0188 #define UFP_VDO_VER1_2 2
0189
0190
0191 #define DEV_USB2_CAPABLE BIT(0)
0192 #define DEV_USB2_BILLBOARD BIT(1)
0193 #define DEV_USB3_CAPABLE BIT(2)
0194 #define DEV_USB4_CAPABLE BIT(3)
0195
0196
0197 #define UFP_RECEPTACLE 2
0198 #define UFP_CAPTIVE 3
0199
0200
0201 #define AMA_VCONN_PWR_1W 0
0202 #define AMA_VCONN_PWR_1W5 1
0203 #define AMA_VCONN_PWR_2W 2
0204 #define AMA_VCONN_PWR_3W 3
0205 #define AMA_VCONN_PWR_4W 4
0206 #define AMA_VCONN_PWR_5W 5
0207 #define AMA_VCONN_PWR_6W 6
0208
0209
0210 #define AMA_VCONN_NOT_REQ 0
0211 #define AMA_VCONN_REQ 1
0212
0213
0214 #define AMA_VBUS_REQ 0
0215 #define AMA_VBUS_NOT_REQ 1
0216
0217
0218 #define UFP_ALTMODE_NOT_SUPP 0
0219 #define UFP_ALTMODE_TBT3 BIT(0)
0220 #define UFP_ALTMODE_RECFG BIT(1)
0221 #define UFP_ALTMODE_NO_RECFG BIT(2)
0222
0223
0224 #define UFP_USB2_ONLY 0
0225 #define UFP_USB32_GEN1 1
0226 #define UFP_USB32_4_GEN2 2
0227 #define UFP_USB4_GEN3 3
0228
0229 #define VDO_UFP(ver, cap, conn, vcpwr, vcr, vbr, alt, spd) \
0230 (((ver) & 0x7) << 29 | ((cap) & 0xf) << 24 | ((conn) & 0x3) << 22 \
0231 | ((vcpwr) & 0x7) << 8 | (vcr) << 7 | (vbr) << 6 | ((alt) & 0x7) << 3 \
0232 | ((spd) & 0x7))
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244 #define PD_VDO_DFP_HOSTCAP(vdo) (((vdo) & GENMASK(26, 24)) >> 24)
0245
0246 #define DFP_VDO_VER1_1 1
0247 #define HOST_USB2_CAPABLE BIT(0)
0248 #define HOST_USB3_CAPABLE BIT(1)
0249 #define HOST_USB4_CAPABLE BIT(2)
0250 #define DFP_RECEPTACLE 2
0251 #define DFP_CAPTIVE 3
0252
0253 #define VDO_DFP(ver, cap, conn, pnum) \
0254 (((ver) & 0x7) << 29 | ((cap) & 0x7) << 24 | ((conn) & 0x3) << 22 \
0255 | ((pnum) & 0x1f))
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
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311 #define CABLE_VDO_VER1_0 0
0312 #define CABLE_VDO_VER1_3 3
0313
0314
0315 #define CABLE_ATYPE 0
0316 #define CABLE_BTYPE 1
0317 #define CABLE_CTYPE 2
0318 #define CABLE_CAPTIVE 3
0319
0320
0321 #define CABLE_LATENCY_1M 1
0322 #define CABLE_LATENCY_2M 2
0323 #define CABLE_LATENCY_3M 3
0324 #define CABLE_LATENCY_4M 4
0325 #define CABLE_LATENCY_5M 5
0326 #define CABLE_LATENCY_6M 6
0327 #define CABLE_LATENCY_7M 7
0328 #define CABLE_LATENCY_7M_PLUS 8
0329
0330
0331 #define PCABLE_VCONN_NOT_REQ 0
0332 #define PCABLE_VCONN_REQ 1
0333 #define ACABLE_ONE_END 2
0334 #define ACABLE_BOTH_END 3
0335
0336
0337 #define CABLE_MAX_VBUS_20V 0
0338 #define CABLE_MAX_VBUS_30V 1
0339 #define CABLE_MAX_VBUS_40V 2
0340 #define CABLE_MAX_VBUS_50V 3
0341
0342
0343 #define ACABLE_SBU_SUPP 0
0344 #define ACABLE_SBU_NOT_SUPP 1
0345 #define ACABLE_SBU_PASSIVE 0
0346 #define ACABLE_SBU_ACTIVE 1
0347
0348
0349 #define CABLE_CURR_DEF 0
0350 #define CABLE_CURR_3A 1
0351 #define CABLE_CURR_5A 2
0352
0353
0354 #define CABLE_USBSS_U2_ONLY 0
0355 #define CABLE_USBSS_U31_GEN1 1
0356 #define CABLE_USBSS_U31_GEN2 2
0357
0358
0359 #define CABLE_USB2_ONLY 0
0360 #define CABLE_USB32_GEN1 1
0361 #define CABLE_USB32_4_GEN2 2
0362 #define CABLE_USB4_GEN3 3
0363
0364 #define VDO_CABLE(hw, fw, cbl, lat, term, tx1d, tx2d, rx1d, rx2d, cur, vps, sopp, usbss) \
0365 (((hw) & 0x7) << 28 | ((fw) & 0x7) << 24 | ((cbl) & 0x3) << 18 \
0366 | ((lat) & 0x7) << 13 | ((term) & 0x3) << 11 | (tx1d) << 10 \
0367 | (tx2d) << 9 | (rx1d) << 8 | (rx2d) << 7 | ((cur) & 0x3) << 5 \
0368 | (vps) << 4 | (sopp) << 3 | ((usbss) & 0x7))
0369 #define VDO_PCABLE(hw, fw, ver, conn, lat, term, vbm, cur, spd) \
0370 (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
0371 | ((conn) & 0x3) << 18 | ((lat) & 0xf) << 13 | ((term) & 0x3) << 11 \
0372 | ((vbm) & 0x3) << 9 | ((cur) & 0x3) << 5 | ((spd) & 0x7))
0373 #define VDO_ACABLE1(hw, fw, ver, conn, lat, term, vbm, sbu, sbut, cur, vbt, sopp, spd) \
0374 (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
0375 | ((conn) & 0x3) << 18 | ((lat) & 0xf) << 13 | ((term) & 0x3) << 11 \
0376 | ((vbm) & 0x3) << 9 | (sbu) << 8 | (sbut) << 7 | ((cur) & 0x3) << 5 \
0377 | (vbt) << 4 | (sopp) << 3 | ((spd) & 0x7))
0378
0379 #define VDO_TYPEC_CABLE_TYPE(vdo) (((vdo) >> 18) & 0x3)
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401 #define ACAB2_U3_CLD_10MW_PLUS 0
0402 #define ACAB2_U3_CLD_10MW 1
0403 #define ACAB2_U3_CLD_5MW 2
0404 #define ACAB2_U3_CLD_1MW 3
0405 #define ACAB2_U3_CLD_500UW 4
0406 #define ACAB2_U3_CLD_200UW 5
0407 #define ACAB2_U3_CLD_50UW 6
0408
0409
0410 #define ACAB2_U3U0_DIRECT 0
0411 #define ACAB2_U3U0_U3S 1
0412 #define ACAB2_PHY_COPPER 0
0413 #define ACAB2_PHY_OPTICAL 1
0414 #define ACAB2_REDRIVER 0
0415 #define ACAB2_RETIMER 1
0416 #define ACAB2_USB4_SUPP 0
0417 #define ACAB2_USB4_NOT_SUPP 1
0418 #define ACAB2_USB2_SUPP 0
0419 #define ACAB2_USB2_NOT_SUPP 1
0420 #define ACAB2_USB32_SUPP 0
0421 #define ACAB2_USB32_NOT_SUPP 1
0422 #define ACAB2_LANES_ONE 0
0423 #define ACAB2_LANES_TWO 1
0424 #define ACAB2_OPT_ISO_NO 0
0425 #define ACAB2_OPT_ISO_YES 1
0426 #define ACAB2_GEN_1 0
0427 #define ACAB2_GEN_2_PLUS 1
0428
0429 #define VDO_ACABLE2(mtemp, stemp, u3p, trans, phy, ele, u4, hops, u2, u32, lane, iso, gen) \
0430 (((mtemp) & 0xff) << 24 | ((stemp) & 0xff) << 16 | ((u3p) & 0x7) << 12 \
0431 | (trans) << 11 | (phy) << 10 | (ele) << 9 | (u4) << 8 \
0432 | ((hops) & 0x3) << 6 | (u2) << 5 | (u32) << 4 | (lane) << 3 \
0433 | (iso) << 2 | (gen))
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450 #define VDO_AMA(hw, fw, tx1d, tx2d, rx1d, rx2d, vcpwr, vcr, vbr, usbss) \
0451 (((hw) & 0x7) << 28 | ((fw) & 0x7) << 24 \
0452 | (tx1d) << 11 | (tx2d) << 10 | (rx1d) << 9 | (rx2d) << 8 \
0453 | ((vcpwr) & 0x7) << 5 | (vcr) << 4 | (vbr) << 3 \
0454 | ((usbss) & 0x7))
0455
0456 #define PD_VDO_AMA_VCONN_REQ(vdo) (((vdo) >> 4) & 1)
0457 #define PD_VDO_AMA_VBUS_REQ(vdo) (((vdo) >> 3) & 1)
0458
0459 #define AMA_USBSS_U2_ONLY 0
0460 #define AMA_USBSS_U31_GEN1 1
0461 #define AMA_USBSS_U31_GEN2 2
0462 #define AMA_USBSS_BBONLY 3
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478 #define VPD_VDO_VER1_0 0
0479 #define VPD_MAX_VBUS_20V 0
0480 #define VPD_MAX_VBUS_30V 1
0481 #define VPD_MAX_VBUS_40V 2
0482 #define VPD_MAX_VBUS_50V 3
0483 #define VPDCT_CURR_3A 0
0484 #define VPDCT_CURR_5A 1
0485 #define VPDCT_NOT_SUPP 0
0486 #define VPDCT_SUPP 1
0487
0488 #define VDO_VPD(hw, fw, ver, vbm, curr, vbi, gi, ct) \
0489 (((hw) & 0xf) << 28 | ((fw) & 0xf) << 24 | ((ver) & 0x7) << 21 \
0490 | ((vbm) & 0x3) << 15 | (curr) << 14 | ((vbi) & 0x3f) << 7 \
0491 | ((gi) & 0x3f) << 1 | (ct))
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501 #define VDO_SVID(svid0, svid1) (((svid0) & 0xffff) << 16 | ((svid1) & 0xffff))
0502 #define PD_VDO_SVID_SVID0(vdo) ((vdo) >> 16)
0503 #define PD_VDO_SVID_SVID1(vdo) ((vdo) & 0xffff)
0504
0505
0506 #define USB_SID_PD 0xff00
0507 #define USB_SID_DISPLAYPORT 0xff01
0508 #define USB_SID_MHL 0xff02
0509
0510
0511
0512 #define PD_T_VDM_UNSTRUCTURED 500
0513 #define PD_T_VDM_BUSY 100
0514 #define PD_T_VDM_WAIT_MODE_E 100
0515 #define PD_T_VDM_SNDR_RSP 30
0516 #define PD_T_VDM_E_MODE 25
0517 #define PD_T_VDM_RCVR_RSP 15
0518
0519 #endif