/* Copyright 2015 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ /* USB Power delivery port management */ #ifndef __CROS_EC_USB_PD_TCPM_H #define __CROS_EC_USB_PD_TCPM_H #ifdef __cplusplus extern "C" { #endif /* List of common error codes that can be returned */ enum ec_error_list { /* Success - no error */ EC_SUCCESS = 0, /* Unknown error */ EC_ERROR_UNKNOWN = 1, /* Function not implemented yet */ EC_ERROR_UNIMPLEMENTED = 2, /* Overflow error; too much input provided. */ EC_ERROR_OVERFLOW = 3, /* Timeout */ EC_ERROR_TIMEOUT = 4, /* Invalid argument */ EC_ERROR_INVAL = 5, /* Already in use, or not ready yet */ EC_ERROR_BUSY = 6, /* Access denied */ EC_ERROR_ACCESS_DENIED = 7, /* Failed because component does not have power */ EC_ERROR_NOT_POWERED = 8, /* Failed because component is not calibrated */ EC_ERROR_NOT_CALIBRATED = 9, /* Failed because CRC error */ EC_ERROR_CRC = 10, }; /* Flags for i2c_xfer() */ #define I2C_XFER_START (1 << 0) /* Start smbus session from idle state */ #define I2C_XFER_STOP (1 << 1) /* Terminate smbus session with stop bit */ #define I2C_XFER_SINGLE (I2C_XFER_START | I2C_XFER_STOP) /* One transaction */ /* Default retry count for transmitting */ #define PD_RETRY_COUNT 3 /* Time to wait for TCPC to complete transmit */ #define PD_T_TCPC_TX_TIMEOUT (100*MSEC_US) /* No connect voltage threshold for sources based on Rp */ #define PD_SRC_DEF_VNC_MV 1600 #define PD_SRC_1_5_VNC_MV 1600 #define PD_SRC_3_0_VNC_MV 2600 /* Rd voltage threshold for sources based on Rp */ #define PD_SRC_DEF_RD_THRESH_MV 200 #define PD_SRC_1_5_RD_THRESH_MV 400 #define PD_SRC_3_0_RD_THRESH_MV 800 /* Control Message type */ enum pd_ctrl_msg_type { /* 0 Reserved */ PD_CTRL_GOOD_CRC = 1, PD_CTRL_GOTO_MIN = 2, PD_CTRL_ACCEPT = 3, PD_CTRL_REJECT = 4, PD_CTRL_PING = 5, PD_CTRL_PS_RDY = 6, PD_CTRL_GET_SOURCE_CAP = 7, PD_CTRL_GET_SINK_CAP = 8, PD_CTRL_DR_SWAP = 9, PD_CTRL_PR_SWAP = 10, PD_CTRL_VCONN_SWAP = 11, PD_CTRL_WAIT = 12, PD_CTRL_SOFT_RESET = 13, /* 14-15 Reserved */ /* Used for REV 3.0 */ PD_CTRL_NOT_SUPPORTED = 16, PD_CTRL_GET_SOURCE_CAP_EXT = 17, PD_CTRL_GET_STATUS = 18, PD_CTRL_FR_SWAP = 19, PD_CTRL_GET_PPS_STATUS = 20, PD_CTRL_GET_COUNTRY_CODES = 21, /* 22-31 Reserved */ }; /* Extended message type for REV 3.0 */ enum pd_ext_msg_type { /* 0 Reserved */ PD_EXT_SOURCE_CAP = 1, PD_EXT_STATUS = 2, PD_EXT_GET_BATTERY_CAP = 3, PD_EXT_GET_BATTERY_STATUS = 4, PD_EXT_BATTERY_CAP = 5, PD_EXT_GET_MANUFACTURER_INFO = 6, PD_EXT_MANUFACTURER_INFO = 7, PD_EXT_SECURITY_REQUEST = 8, PD_EXT_SECURITY_RESPONSE = 9, PD_EXT_FIRMWARE_UPDATE_REQUEST = 10, PD_EXT_FIRMWARE_UPDATE_RESPONSE = 11, PD_EXT_PPS_STATUS = 12, PD_EXT_COUNTRY_INFO = 13, PD_EXT_COUNTRY_CODES = 14, /* 15-31 Reserved */ }; /* Data message type */ enum pd_data_msg_type { /* 0 Reserved */ PD_DATA_SOURCE_CAP = 1, PD_DATA_REQUEST = 2, PD_DATA_BIST = 3, PD_DATA_SINK_CAP = 4, /* 5-14 Reserved for REV 2.0 */ PD_DATA_BATTERY_STATUS = 5, PD_DATA_ALERT = 6, PD_DATA_GET_COUNTRY_INFO = 7, /* 8-14 Reserved for REV 3.0 */ PD_DATA_VENDOR_DEF = 15, }; /* build extended message header */ /* All extended messages are chunked, so set bit 15 */ #define PD_EXT_HEADER(cnum, rchk, dsize) \ ((1 << 15) | ((cnum) << 11) | \ ((rchk) << 10) | (dsize)) /* build message header */ #define PD_HEADER(type, prole, drole, id, cnt, rev, ext) \ ((type) | ((rev) << 6) | \ ((drole) << 5) | ((prole) << 8) | \ ((id) << 9) | ((cnt) << 12) | ((ext) << 15)) /* Used for processing pd header */ #define PD_HEADER_EXT(header) (((header) >> 15) & 1) #define PD_HEADER_CNT(header) (((header) >> 12) & 7) #define PD_HEADER_TYPE(header) ((header) & 0x1F) #define PD_HEADER_ID(header) (((header) >> 9) & 7) #define PD_HEADER_REV(header) (((header) >> 6) & 3) /* Used for processing pd extended header */ #define PD_EXT_HEADER_CHUNKED(header) (((header) >> 15) & 1) #define PD_EXT_HEADER_CHUNK_NUM(header) (((header) >> 11) & 0xf) #define PD_EXT_HEADER_REQ_CHUNK(header) (((header) >> 10) & 1) #define PD_EXT_HEADER_DATA_SIZE(header) ((header) & 0x1ff) #define PD_REV10 0 #define PD_REV20 1 #define PD_REV30 2 enum tcpc_cc_voltage_status { TYPEC_CC_VOLT_OPEN = 0, TYPEC_CC_VOLT_RA = 1, TYPEC_CC_VOLT_RD = 2, TYPEC_CC_VOLT_SNK_DEF = 5, TYPEC_CC_VOLT_SNK_1_5 = 6, TYPEC_CC_VOLT_SNK_3_0 = 7, }; enum tcpc_cc_pull { TYPEC_CC_RA = 0, TYPEC_CC_RP = 1, TYPEC_CC_RD = 2, TYPEC_CC_OPEN = 3, }; enum tcpc_rp_value { TYPEC_RP_USB = 0, TYPEC_RP_1A5 = 1, TYPEC_RP_3A0 = 2, TYPEC_RP_RESERVED = 3, }; enum tcpm_transmit_type { TCPC_TX_SOP = 0, TCPC_TX_SOP_PRIME = 1, TCPC_TX_SOP_PRIME_PRIME = 2, TCPC_TX_SOP_DEBUG_PRIME = 3, TCPC_TX_SOP_DEBUG_PRIME_PRIME = 4, TCPC_TX_HARD_RESET = 5, TCPC_TX_CABLE_RESET = 6, TCPC_TX_BIST_MODE_2 = 7 }; enum tcpc_transmit_complete { TCPC_TX_COMPLETE_SUCCESS = 0, TCPC_TX_COMPLETE_DISCARDED = 1, TCPC_TX_COMPLETE_FAILED = 2, }; struct tcpc_config_t { int i2c_host_port; int i2c_slave_addr; const struct tcpm_drv *drv; }; #ifdef __cplusplus } #endif #endif /* __CROS_EC_USB_PD_TCPM_H */