linux/include/dt-bindings/usb/pd.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __DT_POWER_DELIVERY_H
   3#define __DT_POWER_DELIVERY_H
   4
   5/* Power delivery Power Data Object definitions */
   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) /* Power role swap supported */
  21#define PDO_FIXED_SUSPEND       (1 << 28) /* USB Suspend supported (Source) */
  22#define PDO_FIXED_HIGHER_CAP    (1 << 28) /* Requires more than vSafe5V (Sink) */
  23#define PDO_FIXED_EXTPOWER      (1 << 27) /* Externally powered */
  24#define PDO_FIXED_USB_COMM      (1 << 26) /* USB communications capable */
  25#define PDO_FIXED_DATA_SWAP     (1 << 25) /* Data role swap supported */
  26#define PDO_FIXED_VOLT_SHIFT    10      /* 50mV units */
  27#define PDO_FIXED_CURR_SHIFT    0       /* 10mA units */
  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 /* mv units */
  37
  38#define PDO_BATT_MAX_VOLT_SHIFT 20      /* 50mV units */
  39#define PDO_BATT_MIN_VOLT_SHIFT 10      /* 50mV units */
  40#define PDO_BATT_MAX_PWR_SHIFT  0       /* 250mW units */
  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      /* 50mV units */
  51#define PDO_VAR_MIN_VOLT_SHIFT  10      /* 50mV units */
  52#define PDO_VAR_MAX_CURR_SHIFT  0       /* 10mA units */
  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      /* 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 */
 469