diff options
-rw-r--r-- | board/servo_v4/usb_pd_policy.c | 14 | ||||
-rw-r--r-- | board/servo_v4p1/usb_pd_policy.c | 12 |
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 |