diff options
author | Sam Hurst <shurst@google.com> | 2018-09-13 09:27:08 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-04-08 22:30:19 -0700 |
commit | 0fe6147a9d8d9feef5049aa6c6c4a6ad30d12b26 (patch) | |
tree | 05d4509bcfe68a248ec3fa58168f3de2536c2d9c /test/vpd_api.h | |
parent | e097feb8b2db20cd2435a483517356defa222db1 (diff) | |
download | chrome-ec-0fe6147a9d8d9feef5049aa6c6c4a6ad30d12b26.tar.gz |
chocodile_vpdmcu: Firmware for chocodile mcu
Implement Chocodile Charge-Through Vconn Powered firmware for mcu
using new Type-C/PD State machine stack.
BUG=b:115626873
BRANCH=none
TEST=manual
Charge-Through was tested on an Atlas running a DRP USB-C/PD state
machine with CTUnattached.SNK and CTAttached.SNK states.
Signed-off-by: Sam Hurst <shurst@chromium.org>
Change-Id: I847f1bcd2fc3ce41e66edd133a10c943d5e8c819
Reviewed-on: https://chromium-review.googlesource.com/1225250
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Sam Hurst <shurst@google.com>
Reviewed-by: Stefan Reinauer <reinauer@google.com>
Diffstat (limited to 'test/vpd_api.h')
-rw-r--r-- | test/vpd_api.h | 333 |
1 files changed, 333 insertions, 0 deletions
diff --git a/test/vpd_api.h b/test/vpd_api.h new file mode 100644 index 0000000000..3db4803288 --- /dev/null +++ b/test/vpd_api.h @@ -0,0 +1,333 @@ +/* Copyright 2019 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. + */ + +/* Vconn Power Device API module */ + +#ifndef __CROS_EC_VPD_API_H +#define __CROS_EC_VPD_API_H + +#include "adc.h" +#include "gpio.h" +#include "usb_pd.h" + +/* + * Type C power source charge current limits are identified by their cc + * voltage (set by selecting the proper Rd resistor). Any voltage below + * TYPE_C_SRC_DEFAULT_THRESHOLD will not be identified as a type C charger. + */ +#define TYPE_C_SRC_DEFAULT_THRESHOLD 200 /* mV */ +#define TYPE_C_SRC_1500_THRESHOLD 660 /* mV */ +#define TYPE_C_SRC_3000_THRESHOLD 1230 /* mV */ + + +enum vpd_pin { + PIN_ADC, + PIN_CMP, + PIN_GPO +}; + +enum vpd_gpo { + GPO_HZ, + GPO_HIGH, + GPO_LOW +}; + +enum vpd_pwr { + PWR_VCONN, + PWR_VBUS, +}; + +enum vpd_cc { + CT_OPEN, + CT_CC1, + CT_CC2 +}; + +enum vpd_billboard { + BB_NONE, + BB_SRC, + BB_SNK +}; + +struct mock_pin { + enum vpd_pin cfg; + int value; + int value2; +}; + +enum vpd_pwr mock_get_vconn_pwr_source(void); +enum vpd_gpo mock_get_ct_rd(void); +enum vpd_gpo mock_get_cc_rp1a5_odh(void); +enum vpd_gpo mock_get_cc_rpusb_odh(void); +enum vpd_gpo mock_get_cc_db_en_od(void); +enum vpd_cc moch_get_ct_cl_sel(void); +int mock_get_mcu_cc_en(void); +enum vpd_billboard mock_get_present_billboard(void); +int mock_get_red_led(void); +int mock_get_green_led(void); +int mock_get_vbus_pass_en(void); +int mock_set_cc_vpdmcu(int v); +void mock_set_host_vbus(int v); +void mock_set_ct_vbus(int v); +void mock_set_vconn(int v); +int mock_get_cfg_cc2_rpusb_odh(void); +int mock_set_cc2_rpusb_odh(int v); +int mock_get_cfg_cc2_rp3a0_rd_l(void); +int mock_set_cc2_rp3a0_rd_l(int v); +int mock_get_cfg_cc1_rpusb_odh(void); +int mock_set_cc1_rpusb_odh(int v); +int mock_get_cfg_cc_vpdmcu(void); +int mock_get_cc_vpdmcu(int v); +enum vpd_pin mock_get_cfg_cc_rp3a0_rd_l(void); +int mock_get_cc_rp3a0_rd_l(void); +int mock_get_cfg_cc1_rp3a0_rd_l(void); +int mock_set_cc1_rp3a0_rd_l(int v); +void mock_set_host_cc_sink_voltage(int v); +void mock_set_host_cc_source_voltage(int v); +int mock_get_ct_cc1_rpusb(void); +int mock_get_ct_cc2_rpusb(void); + +/** + * Set Charge-Through Rp or Rd on CC lines + * + * @param pull Either TYPEC_CC_RP or TYPEC_CC_RD + * @param rp_value When pull is RP, set this to + * TYPEC_RP_USB or TYPEC_RP_1A5. Ignored + * for TYPEC_CC_RD + */ +void vpd_ct_set_pull(int pull, int rp_value); + +/** + * Get the status of the Charge-Through CC lines + * + * @param cc1 Either TYPEC_CC_VOLT_OPEN, + * TYPEC_CC_VOLT_RA, + * TYPEC_CC_VOLT_RD, + * any other value is considered RP + * @param cc2 Either TYPEC_CC_VOLT_OPEN, + * TYPEC_CC_VOLT_RA, + * TYPEC_CC_VOLT_RD, + * any other value is considered RP + */ +void vpd_ct_get_cc(int *cc1, int *cc2); + +/** + * Set Host Rp or Rd on CC lines + * + * @param pull Either TYPEC_CC_RP or TYPEC_CC_RD + * @param rp_value When pull is RP, set this to + * TYPEC_RP_USB or TYPEC_RP_1A5. Ignored + * for TYPEC_CC_RD + */ +void vpd_host_set_pull(int pull, int rp_value); + +/** + * Get the status of the Host CC line + * + * @param cc Either TYPEC_CC_VOLT_SNK_DEF, TYPEC_CC_VOLT_SNK_1_5, + * TYPEC_CC_VOLT_SNK_3_0, or TYPEC_CC_RD + */ +void vpd_host_get_cc(int *cc); + +/** + * Set RX Enable flag + * + * @param en 1 for enable, 0 for disable + */ +void vpd_rx_enable(int en); + +/** + * Configure the cc_vpdmcu pin as ADC, CMP, or GPO + * + * @param cfg PIN_ADC, PIN_CMP, or PIN_GPO + * @param en When cfg is PIN_GPO, 1 sets pin high + * and 0 sets pin low. Else ignored + */ +void vpd_config_cc_vpdmcu(enum vpd_pin cfg, int en); + +/** + * Configure the cc_rp3a0_rd_l pin as ADC, CMP, or GPO + * + * @param cfg PIN_ADC, PIN_CMP, or PIN_GPO + * @param en When cfg is PIN_GPO, 1 sets pin high + * and 0 sets pin low. Else ignored + */ +void vpd_config_cc_rp3a0_rd_l(enum vpd_pin cfg, int en); + +/** + * Configure the cc1_rp3a0_rd_l pin as ADC, CMP, or GPO + * + * @param cfg PIN_ADC, PIN_CMP, or PIN_GPO + * @param en When cfg is PIN_GPO, 1 sets pin high + * and 0 sets pin low. Else ignored + */ +void vpd_config_cc1_rp3a0_rd_l(enum vpd_pin cfg, int en); + +/** + * Configure the cc2_rp3a0_rd_l pin as ADC, CMP, or GPO + * + * @param cfg PIN_ADC, PIN_CMP, or PIN_GPO + * @param en When cfg is PIN_GPO, 1 sets pin high + * and 0 sets pin low. Else ignored + */ +void vpd_config_cc2_rp3a0_rd_l(enum vpd_pin cfg, int en); + +/** + * Configure the cc1_rpusb_odh pin as ADC, CMP, or GPO + * + * @param cfg PIN_ADC, PIN_CMP, or PIN_GPO + * @param en When cfg is PIN_GPO, 1 sets pin high + * and 0 sets pin low. Else ignored + */ +void vpd_config_cc1_rpusb_odh(enum vpd_pin cfg, int en); + +/** + * Configure the cc2_rpusb_odh pin as ADC, CMP, or GPO + * + * @param cfg PIN_ADC, PIN_CMP, or PIN_GPO + * @param en When cfg is PIN_GPO, 1 sets pin high + * and 0 sets pin low. Else ignored + */ +void vpd_config_cc2_rpusb_odh(enum vpd_pin cfg, int en); + +/** + * Configure the cc_db_en_od pin to High-Impedance, low, or high + * + * @param val GPO_HZ, GPO_HIGH, GPO_LOW + */ +void vpd_cc_db_en_od(enum vpd_gpo val); + +/** + * Configure the cc_rpusb_odh pin to High-Impedance, low, or high + * + * @param val GPO_HZ, GPO_HIGH, GPO_LOW + */ +void vpd_cc_rpusb_odh(enum vpd_gpo val); + +/** + * Configure the cc_rp1a5_odh pin to High-Impedance, low, or high + * + * @param val GPO_HZ, GPO_HIGH, GPO_LOW + */ +void vpd_cc_rp1a5_odh(enum vpd_gpo val); + +/** + * Configure the cc1_cc2_db_en_l pin to High-Impedance, low, or high + * + * @param val GPO_HZ, GPO_HIGH, GPO_LOW + */ +void vpd_cc1_cc2_db_en_l(enum vpd_gpo val); + +/** + * Get status of host vbus + * + * @return 1 if host vbus is present, else 0 + */ +int vpd_is_host_vbus_present(void); + +/** + * Get status of charge-through vbus + * + * @return 1 if charge-through vbus is present, else 0 + */ +int vpd_is_ct_vbus_present(void); + +/** + * Get status of vconn + * + * @return 1 if vconn is present, else 0 + */ +int vpd_is_vconn_present(void); + +/** + * Read Host VBUS voltage. Range from 22000mV to 3000mV + * + * @return vbus voltage + */ +int vpd_read_host_vbus(void); + +/** + * Read Host CC voltage. + * + * @return cc voltage + */ +int vpd_read_cc_host(void); + +/** + * Read voltage on cc_vpdmcu pin + * + * @return cc_vpdmcu voltage + */ +int vpd_read_cc_vpdmcu(void); + +/** + * Read charge-through VBUS voltage. Range from 22000mV to 3000mV + * + * @return charge-through vbus voltage + */ +int vpd_read_ct_vbus(void); + +/** + * Read VCONN Voltage. Range from 5500mV to 3000mV + * + * @return vconn voltage + */ +int vpd_read_vconn(void); + +/** + * Turn ON/OFF Red LED. Should be off when performing power + * measurements. + * + * @param on 0 turns LED off, any other value turns it ON + */ +void vpd_red_led(int on); + +/** + * Turn ON/OFF Green LED. Should be off when performing power + * measurements. + * + * @param on 0 turns LED off, any other value turns it ON + */ +void vpd_green_led(int on); + +/** + * Connects/Disconnects the Host VBUS to the Charge-Through VBUS. + * + * @param en 0 disconnectes the VBUS, any other value connects VBUS. + */ +void vpd_vbus_pass_en(int en); + +/** + * Preset Billboard device + * + * @param bb BB_NONE no billboard presented, + * BB_SRC source connected but not in charge-through + * BB_SNK sink connected + */ +void vpd_present_billboard(enum vpd_billboard bb); + +/** + * Enables the MCU to host cc communication + * + * @param en 1 enabled, 0 disabled + */ +void vpd_mcu_cc_en(int en); + +/** + * Selects which supply to power the VPD from + * + * @param en PWR_VCONN or PWR_VBUS + */ +void vpd_vconn_pwr_sel_odl(enum vpd_pwr en); + +/** + * Controls if the Charge-Through's CC1, CC2, or neither is + * connected to Host CC + * + * @param sel CT_OPEN neither, CT_CC1 cc1, CT_CC2 cc2 + */ +void vpd_ct_cc_sel(enum vpd_cc sel); + +#endif /* __CROS_EC_VPD_API_H */ |