summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/servo_v4/usb_pd_policy.c14
-rw-r--r--board/servo_v4p1/usb_pd_policy.c12
2 files changed, 22 insertions, 4 deletions
diff --git a/board/servo_v4/usb_pd_policy.c b/board/servo_v4/usb_pd_policy.c
index f995bc58bb..d0983cd39a 100644
--- a/board/servo_v4/usb_pd_policy.c
+++ b/board/servo_v4/usb_pd_policy.c
@@ -426,13 +426,22 @@ int pd_tcpc_cc_ra(int port, int cc_volt, int cc_sel)
return ra;
}
+/* DUT CC readings aren't valid if we aren't applying CC pulls */
+bool cc_is_valid(void)
+{
+ if ((cc_config & CC_DETACH) || (cc_pull_stored == TYPEC_CC_OPEN) ||
+ ((cc_pull_stored == TYPEC_CC_RP) &&
+ (rp_value_stored == TYPEC_RP_RESERVED)))
+ return false;
+ return true;
+}
+
int pd_adc_read(int port, int cc)
{
int mv;
-
if (port == 0)
mv = adc_read_channel(cc ? ADC_CHG_CC2_PD : ADC_CHG_CC1_PD);
- else if (!(cc_config & CC_DETACH)) {
+ else if (cc_is_valid()) {
/*
* In servo v4 hardware logic, both CC lines are wired directly
* to DUT. When servo v4 as a snk, DUT may source Vconn to CC2
@@ -463,7 +472,6 @@ int pd_adc_read(int port, int cc)
*/
mv = 0;
}
-
return mv;
}
diff --git a/board/servo_v4p1/usb_pd_policy.c b/board/servo_v4p1/usb_pd_policy.c
index d00cc6e6b3..640adcd026 100644
--- a/board/servo_v4p1/usb_pd_policy.c
+++ b/board/servo_v4p1/usb_pd_policy.c
@@ -422,13 +422,23 @@ int pd_tcpc_cc_ra(int port, int cc_volt, int cc_sel)
return ra;
}
+/* DUT CC readings aren't valid if we aren't applying CC pulls */
+bool cc_is_valid(void)
+{
+ if ((cc_config & CC_DETACH) || (cc_pull_stored == TYPEC_CC_OPEN) ||
+ ((cc_pull_stored == TYPEC_CC_RP) &&
+ (rp_value_stored == TYPEC_RP_RESERVED)))
+ return false;
+ return true;
+}
+
int pd_adc_read(int port, int cc)
{
int mv = -1;
if (port == CHG)
mv = adc_read_channel(cc ? ADC_CHG_CC2_PD : ADC_CHG_CC1_PD);
- else if (!(cc_config & CC_DETACH)) {
+ else if (cc_is_valid()) {
/*
* In servo v4 hardware logic, both CC lines are wired directly
* to DUT. When servo v4 as a snk, DUT may source Vconn to CC2