From c080bfcd9a47e9ed49b77fa87ad4f0ae73df2d72 Mon Sep 17 00:00:00 2001 From: Sam Hurst Date: Mon, 8 Mar 2021 13:54:51 -0800 Subject: TCPMV2: Add support for (CT) Vconn Powered Devices Add support for Charge Through Vconn Powered Devices BUG=b:165934405 BRANCH=none TEST=make runtests 1) Verified that Apple VPD audio device worked. 2) With charger plugged into Chocodile_Vpdmcu, verified that a Voxel could be charged. 3) FAILED: Plugging Chocodile_Vpdmcu into Voxel first and then plugging in charger to Chocodile_Vpdmcu, Chocodile is detected as a Debug Accessory (CC1 = Rd and CC2 = Rd) and VCONN is never applied. Signed-off-by: Sam Hurst Change-Id: I977b316dc531aa33bb6a236523c8ddbbb23014d0 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2748429 Reviewed-by: Diana Z --- include/usb_pd.h | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++ include/usb_pd_vdo.h | 19 ++++++++++++++ 2 files changed, 89 insertions(+) (limited to 'include') diff --git a/include/usb_pd.h b/include/usb_pd.h index ed15149441..f1171d6583 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -1807,6 +1807,76 @@ void dfp_consume_svids(int port, enum tcpm_transmit_type type, int cnt, void dfp_consume_modes(int port, enum tcpm_transmit_type type, int cnt, uint32_t *payload); +/** + * Returns true if connected VPD supports Charge Through + * + * @param port USB-C port number + * @return TRUE if Charge Through is supported, else FALSE + */ +bool is_vpd_ct_supported(int port); + +/** + * Returns CTVPD ground impedance + * + * @param port USB-C port number + * @return Ground impedance through the VPD in 1 mOhm increments, else + * 0 if Charge Through isn't supported + */ +uint8_t get_vpd_ct_gnd_impedance(int port); + +/** + * Returns CTVPD VBUS impedance + * + * @param port USB-C port number + * @return VBUS impedance through the VPD in 2 mOhm increments, else + * 0 if Charge Through isn't supported + */ +uint8_t get_vpd_ct_vbus_impedance(int port); + +/** + * Returns CTVPD Current support + * + * @param port USB-C port number + * @return 0 - 3A capable or + * 1 - 5A capable + */ +uint8_t get_vpd_ct_current_support(int port); + +/** + * Returns CTVPD Maximum VBUS Voltage + * + * @param port USB-C port number + * @return 0 - 20V + * 1 - 30V + * 2 - 40V + * 3 - 50V + */ +uint8_t get_vpd_ct_max_vbus_voltage(int port); + +/** + * Returns VPD VDO Version + * + * @param port USB-C port number + * @return 0 for Version 1.0 + */ +uint8_t get_vpd_ct_vdo_version(int port); + +/** + * Returns VPD Firmware Version + * + * @param port USB-C port number + * @return Firmware version assigned by the VID owner + */ +uint8_t get_vpd_ct_firmware_verion(int port); + +/** + * Returns HW Firmware Version + * + * @param port USB-C port number + * @return HW version assigned by the VID owner + */ +uint8_t get_vpd_ct_hw_version(int port); + /** * Initialize alternate mode discovery info for DFP * diff --git a/include/usb_pd_vdo.h b/include/usb_pd_vdo.h index ac8e67b73e..b146fde179 100644 --- a/include/usb_pd_vdo.h +++ b/include/usb_pd_vdo.h @@ -965,6 +965,22 @@ union enter_usb_data_obj { uint32_t raw_value; }; +union vpd_vdo { + struct { + uint32_t ct_support : 1; + uint32_t gnd_impedance : 6; + uint32_t vbus_impedance : 6; + uint32_t reserved0 : 1; + uint32_t ct_current_support : 1; + uint32_t max_vbus_voltage : 2; + uint32_t reserved1 : 4; + uint32_t vdo_version : 3; + uint32_t firmware_version : 4; + uint32_t hw_version : 4; + }; + uint32_t raw_value; +}; + /* * ############################################################################ * @@ -982,6 +998,9 @@ union product_type_vdo1 { union active_cable_vdo_rev20 a_rev20; union active_cable_vdo1_rev30 a_rev30; + /* Vconn Power USB Device VDO */ + union vpd_vdo vpd; + uint32_t raw_value; }; BUILD_ASSERT(sizeof(uint32_t) == sizeof(union product_type_vdo1)); -- cgit v1.2.1