18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef __DT_POWER_DELIVERY_H 38c2ecf20Sopenharmony_ci#define __DT_POWER_DELIVERY_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci/* Power delivery Power Data Object definitions */ 68c2ecf20Sopenharmony_ci#define PDO_TYPE_FIXED 0 78c2ecf20Sopenharmony_ci#define PDO_TYPE_BATT 1 88c2ecf20Sopenharmony_ci#define PDO_TYPE_VAR 2 98c2ecf20Sopenharmony_ci#define PDO_TYPE_APDO 3 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#define PDO_TYPE_SHIFT 30 128c2ecf20Sopenharmony_ci#define PDO_TYPE_MASK 0x3 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#define PDO_TYPE(t) ((t) << PDO_TYPE_SHIFT) 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#define PDO_VOLT_MASK 0x3ff 178c2ecf20Sopenharmony_ci#define PDO_CURR_MASK 0x3ff 188c2ecf20Sopenharmony_ci#define PDO_PWR_MASK 0x3ff 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#define PDO_FIXED_DUAL_ROLE (1 << 29) /* Power role swap supported */ 218c2ecf20Sopenharmony_ci#define PDO_FIXED_SUSPEND (1 << 28) /* USB Suspend supported (Source) */ 228c2ecf20Sopenharmony_ci#define PDO_FIXED_HIGHER_CAP (1 << 28) /* Requires more than vSafe5V (Sink) */ 238c2ecf20Sopenharmony_ci#define PDO_FIXED_EXTPOWER (1 << 27) /* Externally powered */ 248c2ecf20Sopenharmony_ci#define PDO_FIXED_USB_COMM (1 << 26) /* USB communications capable */ 258c2ecf20Sopenharmony_ci#define PDO_FIXED_DATA_SWAP (1 << 25) /* Data role swap supported */ 268c2ecf20Sopenharmony_ci#define PDO_FIXED_VOLT_SHIFT 10 /* 50mV units */ 278c2ecf20Sopenharmony_ci#define PDO_FIXED_CURR_SHIFT 0 /* 10mA units */ 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci#define PDO_FIXED_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_FIXED_VOLT_SHIFT) 308c2ecf20Sopenharmony_ci#define PDO_FIXED_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_FIXED_CURR_SHIFT) 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci#define PDO_FIXED(mv, ma, flags) \ 338c2ecf20Sopenharmony_ci (PDO_TYPE(PDO_TYPE_FIXED) | (flags) | \ 348c2ecf20Sopenharmony_ci PDO_FIXED_VOLT(mv) | PDO_FIXED_CURR(ma)) 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci#define VSAFE5V 5000 /* mv units */ 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci#define PDO_BATT_MAX_VOLT_SHIFT 20 /* 50mV units */ 398c2ecf20Sopenharmony_ci#define PDO_BATT_MIN_VOLT_SHIFT 10 /* 50mV units */ 408c2ecf20Sopenharmony_ci#define PDO_BATT_MAX_PWR_SHIFT 0 /* 250mW units */ 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci#define PDO_BATT_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MIN_VOLT_SHIFT) 438c2ecf20Sopenharmony_ci#define PDO_BATT_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_BATT_MAX_VOLT_SHIFT) 448c2ecf20Sopenharmony_ci#define PDO_BATT_MAX_POWER(mw) ((((mw) / 250) & PDO_PWR_MASK) << PDO_BATT_MAX_PWR_SHIFT) 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci#define PDO_BATT(min_mv, max_mv, max_mw) \ 478c2ecf20Sopenharmony_ci (PDO_TYPE(PDO_TYPE_BATT) | PDO_BATT_MIN_VOLT(min_mv) | \ 488c2ecf20Sopenharmony_ci PDO_BATT_MAX_VOLT(max_mv) | PDO_BATT_MAX_POWER(max_mw)) 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci#define PDO_VAR_MAX_VOLT_SHIFT 20 /* 50mV units */ 518c2ecf20Sopenharmony_ci#define PDO_VAR_MIN_VOLT_SHIFT 10 /* 50mV units */ 528c2ecf20Sopenharmony_ci#define PDO_VAR_MAX_CURR_SHIFT 0 /* 10mA units */ 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci#define PDO_VAR_MIN_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MIN_VOLT_SHIFT) 558c2ecf20Sopenharmony_ci#define PDO_VAR_MAX_VOLT(mv) ((((mv) / 50) & PDO_VOLT_MASK) << PDO_VAR_MAX_VOLT_SHIFT) 568c2ecf20Sopenharmony_ci#define PDO_VAR_MAX_CURR(ma) ((((ma) / 10) & PDO_CURR_MASK) << PDO_VAR_MAX_CURR_SHIFT) 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci#define PDO_VAR(min_mv, max_mv, max_ma) \ 598c2ecf20Sopenharmony_ci (PDO_TYPE(PDO_TYPE_VAR) | PDO_VAR_MIN_VOLT(min_mv) | \ 608c2ecf20Sopenharmony_ci PDO_VAR_MAX_VOLT(max_mv) | PDO_VAR_MAX_CURR(max_ma)) 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci#define APDO_TYPE_PPS 0 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci#define PDO_APDO_TYPE_SHIFT 28 /* Only valid value currently is 0x0 - PPS */ 658c2ecf20Sopenharmony_ci#define PDO_APDO_TYPE_MASK 0x3 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci#define PDO_APDO_TYPE(t) ((t) << PDO_APDO_TYPE_SHIFT) 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci#define PDO_PPS_APDO_MAX_VOLT_SHIFT 17 /* 100mV units */ 708c2ecf20Sopenharmony_ci#define PDO_PPS_APDO_MIN_VOLT_SHIFT 8 /* 100mV units */ 718c2ecf20Sopenharmony_ci#define PDO_PPS_APDO_MAX_CURR_SHIFT 0 /* 50mA units */ 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci#define PDO_PPS_APDO_VOLT_MASK 0xff 748c2ecf20Sopenharmony_ci#define PDO_PPS_APDO_CURR_MASK 0x7f 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci#define PDO_PPS_APDO_MIN_VOLT(mv) \ 778c2ecf20Sopenharmony_ci ((((mv) / 100) & PDO_PPS_APDO_VOLT_MASK) << PDO_PPS_APDO_MIN_VOLT_SHIFT) 788c2ecf20Sopenharmony_ci#define PDO_PPS_APDO_MAX_VOLT(mv) \ 798c2ecf20Sopenharmony_ci ((((mv) / 100) & PDO_PPS_APDO_VOLT_MASK) << PDO_PPS_APDO_MAX_VOLT_SHIFT) 808c2ecf20Sopenharmony_ci#define PDO_PPS_APDO_MAX_CURR(ma) \ 818c2ecf20Sopenharmony_ci ((((ma) / 50) & PDO_PPS_APDO_CURR_MASK) << PDO_PPS_APDO_MAX_CURR_SHIFT) 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci#define PDO_PPS_APDO(min_mv, max_mv, max_ma) \ 848c2ecf20Sopenharmony_ci (PDO_TYPE(PDO_TYPE_APDO) | PDO_APDO_TYPE(APDO_TYPE_PPS) | \ 858c2ecf20Sopenharmony_ci PDO_PPS_APDO_MIN_VOLT(min_mv) | PDO_PPS_APDO_MAX_VOLT(max_mv) | \ 868c2ecf20Sopenharmony_ci PDO_PPS_APDO_MAX_CURR(max_ma)) 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci #endif /* __DT_POWER_DELIVERY_H */ 89