diff options
author | Nick Sanders <nsanders@chromium.org> | 2018-09-25 17:49:24 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-09-27 19:44:39 -0700 |
commit | a2c0c599f3e2f458735c17e42843086cf1eff989 (patch) | |
tree | be4923295f09c61efcdf03d5e70f6a1c7ec3c75b /board/servo_v4 | |
parent | 95f05008c2b9babcdae8d9552a7e1490b07eb62d (diff) | |
download | chrome-ec-a2c0c599f3e2f458735c17e42843086cf1eff989.tar.gz |
servo_v4: update board_select_rp_value
This function sets the default Rp value, but should
not enable Rp if it's not already enabled.
BRANCH=servo
BUG=b:116630203
TEST=check CC lines after booting with/without charge through.
Change-Id: Ie9709796940cf908b9af3701d2123f16596f04e0
Signed-off-by: Nick Sanders <nsanders@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1244381
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Diffstat (limited to 'board/servo_v4')
-rw-r--r-- | board/servo_v4/usb_pd_policy.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/board/servo_v4/usb_pd_policy.c b/board/servo_v4/usb_pd_policy.c index 06462405f8..f874e4dbe9 100644 --- a/board/servo_v4/usb_pd_policy.c +++ b/board/servo_v4/usb_pd_policy.c @@ -378,10 +378,17 @@ static int board_set_rp(int rp) return EC_SUCCESS; } +/* Shadow what would be in TCPC register state. */ +static int rp_value_stored = TYPEC_RP_USB; +static int cc_pull_stored = TYPEC_CC_RD; + int pd_set_rp_rd(int port, int cc_pull, int rp_value) { int rv = EC_SUCCESS; + if (port != 1) + return EC_ERROR_UNIMPLEMENTED; + /* By default disconnect all Rp/Rd resistors from both CC lines */ /* Set Rd for CC1/CC2 to High-Z. */ gpio_set_flags(GPIO_USB_DUT_CC1_RD, GPIO_INPUT); @@ -412,12 +419,27 @@ int pd_set_rp_rd(int port, int cc_pull, int rp_value) gpio_set_flags(GPIO_USB_DUT_CC2_RD, GPIO_OUT_LOW); } + rp_value_stored = rp_value; + cc_pull_stored = cc_pull; + return rv; } int board_select_rp_value(int port, int rp) { - return pd_set_rp_rd(port, TYPEC_CC_RP, rp); + if (port != 1) + return EC_ERROR_UNIMPLEMENTED; + + /* + * Update Rp value to indicate non-pd power available. + * Do not change pull direction though. + */ + if ((rp != rp_value_stored) && (cc_pull_stored == TYPEC_CC_RP)) { + rp_value_stored = rp; + return pd_set_rp_rd(port, TYPEC_CC_RP, rp); + } + + return EC_SUCCESS; } int charge_manager_get_source_pdo(const uint32_t **src_pdo, const int port) @@ -646,7 +668,7 @@ static void do_cc(int disable_dts_new, int allow_src_new) disable_dts_mode = 0; allow_src_mode = 0; /* Remove Rp/Rd on both CC lines */ - board_select_rp_value(DUT, TYPEC_RP_RESERVED); + pd_set_rp_rd(DUT, TYPEC_CC_RP, TYPEC_RP_RESERVED); /* Some time for DUT to detach, use tErrorRecovery */ msleep(25); |