summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Sanders <nsanders@chromium.org>2018-09-25 17:49:24 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2018-09-29 00:05:03 +0000
commit1eab95a838445a79364723fe48ef2b3abc4cbc90 (patch)
tree268e710979c4adc70a7d5bf9d30504999274ccb8
parent27e9ca8e64c3844bb918fc3cd602feba53057a39 (diff)
downloadchrome-ec-1eab95a838445a79364723fe48ef2b3abc4cbc90.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> (cherry picked from commit a2c0c599f3e2f458735c17e42843086cf1eff989) Reviewed-on: https://chromium-review.googlesource.com/1252446
-rw-r--r--board/servo_v4/usb_pd_policy.c26
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);