From 9e26f8a54c1fb5a1c56336c403f781ecd17e5105 Mon Sep 17 00:00:00 2001 From: Nick Sanders Date: Thu, 4 Apr 2019 15:15:25 -0700 Subject: servo_v4: disable PD entirely when in SNK. This prevents the system from negotiating power or reenabling dualrole after it's turned off in board.c. BUG=b:129882930 BRANCH=servo TEST=cc snkdts stays snk. Change-Id: I0a05eb9e8073cec7da884e071e023bcddadb130f Signed-off-by: Nick Sanders Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1555024 Reviewed-by: Ruben Rodriguez Buchillon --- board/servo_v4/usb_pd_policy.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/board/servo_v4/usb_pd_policy.c b/board/servo_v4/usb_pd_policy.c index f874e4dbe9..cb3332a017 100644 --- a/board/servo_v4/usb_pd_policy.c +++ b/board/servo_v4/usb_pd_policy.c @@ -660,6 +660,8 @@ static void print_cc_mode(void) static void do_cc(int disable_dts_new, int allow_src_new) { + int dualrole; + if ((disable_dts_new != disable_dts_mode) || (allow_src_new != allow_src_mode)) { /* Force detach */ @@ -667,7 +669,9 @@ static void do_cc(int disable_dts_new, int allow_src_new) /* Always set to 0 here so both CC lines are changed */ disable_dts_mode = 0; allow_src_mode = 0; + /* Remove Rp/Rd on both CC lines */ + pd_comm_enable(DUT, 0); pd_set_rp_rd(DUT, TYPEC_CC_RP, TYPEC_RP_RESERVED); /* Some time for DUT to detach, use tErrorRecovery */ @@ -676,14 +680,15 @@ static void do_cc(int disable_dts_new, int allow_src_new) /* Accept new dts/src value */ disable_dts_mode = disable_dts_new; allow_src_mode = allow_src_new; + /* Can we charge? */ - pd_set_dual_role(DUT, - allow_src_mode && charge_port_is_active() ? + dualrole = allow_src_mode && charge_port_is_active(); + pd_set_dual_role(DUT, dualrole ? PD_DRP_FORCE_SOURCE : PD_DRP_FORCE_SINK); /* Present Rp or Rd on CC1 and CC2 based on disable_dts_mode */ - pd_config_init(DUT, - pd_get_dual_role(DUT) == PD_DRP_FORCE_SOURCE); + pd_config_init(DUT, dualrole); + pd_comm_enable(DUT, dualrole); } print_cc_mode(); -- cgit v1.2.1