From 080c566cc86c8e73af51945afed6cecca5b789f1 Mon Sep 17 00:00:00 2001 From: Kevin K Wong Date: Tue, 11 Oct 2016 16:03:19 -0700 Subject: [PATCH] anx74xx: update usage with its CC_STATUS register Existing get_cc function depends on set_cc function which marks a "pull" variable to indicate if anx74xx is setting Rp or Rd. However, if DRP auto toggle is used, this "pull" variable is unknown, but CC_STATUS register can differentiate between SRC and SNK, so this "pull" variable is actually not needed. BUG=none BRANCH=none TEST=verify Type-C functionality did not change on Reef. Change-Id: I6cab8d7fcee20ec6e8414b6b2591c5d975d85293 Signed-off-by: Kevin K Wong Reviewed-on: https://chromium-review.googlesource.com/396428 Reviewed-by: David Hendricks Reviewed-by: Shawn N --- driver/tcpm/anx74xx.c | 64 ++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/driver/tcpm/anx74xx.c b/driver/tcpm/anx74xx.c index 229e79a7c2..073eb92867 100644 --- a/driver/tcpm/anx74xx.c +++ b/driver/tcpm/anx74xx.c @@ -19,7 +19,6 @@ struct anx_state { int polarity; - int pull; int vconn_en; int mux_state; }; @@ -404,41 +403,32 @@ static int anx74xx_tcpm_get_cc(int port, int *cc1, int *cc2) int rv = EC_SUCCESS; int reg = 0; rv |= tcpc_read(port, ANX74XX_REG_CC_STATUS, ®); - if (!anx[port].pull) {/* get CC in sink mode */ - /* CC1 */ - if (reg & BIT_VALUE_OF_SNK_CC1_DEFAULT) - *cc1 = TYPEC_CC_VOLT_SNK_DEF; - else if (reg & BIT_VALUE_OF_SNK_CC1_1_P_5) - *cc1 = TYPEC_CC_VOLT_SNK_1_5; - else if (reg & BIT_VALUE_OF_SNK_CC1_3_P_0) - *cc1 = TYPEC_CC_VOLT_SNK_3_0; - else - *cc1 = TYPEC_CC_VOLT_OPEN; - /* CC2 */ - if (reg & BIT_VALUE_OF_SNK_CC2_DEFAULT) - *cc2 = TYPEC_CC_VOLT_SNK_DEF; - else if (reg & BIT_VALUE_OF_SNK_CC2_1_P_5) - *cc2 = TYPEC_CC_VOLT_SNK_1_5; - else if (reg & BIT_VALUE_OF_SNK_CC2_3_P_0) - *cc2 = TYPEC_CC_VOLT_SNK_3_0; - else - *cc2 = TYPEC_CC_VOLT_OPEN; - } else {/* get CC in source mode */ - /* CC1 */ - if (reg & BIT_VALUE_OF_SRC_CC1_RA) - *cc1 = TYPEC_CC_VOLT_RA; - else if (reg & BIT_VALUE_OF_SRC_CC1_RD) - *cc1 = TYPEC_CC_VOLT_RD; - else - *cc1 = TYPEC_CC_VOLT_OPEN; - /* CC2 */ - if (reg & BIT_VALUE_OF_SRC_CC2_RA) - *cc2 = TYPEC_CC_VOLT_RA; - else if (reg & BIT_VALUE_OF_SRC_CC2_RD) - *cc2 = TYPEC_CC_VOLT_RD; - else - *cc2 = TYPEC_CC_VOLT_OPEN; - } + /* CC1 */ + if (reg & BIT_VALUE_OF_SNK_CC1_DEFAULT) + *cc1 = TYPEC_CC_VOLT_SNK_DEF; + else if (reg & BIT_VALUE_OF_SNK_CC1_1_P_5) + *cc1 = TYPEC_CC_VOLT_SNK_1_5; + else if (reg & BIT_VALUE_OF_SNK_CC1_3_P_0) + *cc1 = TYPEC_CC_VOLT_SNK_3_0; + else if (reg & BIT_VALUE_OF_SRC_CC1_RA) + *cc1 = TYPEC_CC_VOLT_RA; + else if (reg & BIT_VALUE_OF_SRC_CC1_RD) + *cc1 = TYPEC_CC_VOLT_RD; + else + *cc1 = TYPEC_CC_VOLT_OPEN; + /* CC2 */ + if (reg & BIT_VALUE_OF_SNK_CC2_DEFAULT) + *cc2 = TYPEC_CC_VOLT_SNK_DEF; + else if (reg & BIT_VALUE_OF_SNK_CC2_1_P_5) + *cc2 = TYPEC_CC_VOLT_SNK_1_5; + else if (reg & BIT_VALUE_OF_SNK_CC2_3_P_0) + *cc2 = TYPEC_CC_VOLT_SNK_3_0; + else if (reg & BIT_VALUE_OF_SRC_CC2_RA) + *cc2 = TYPEC_CC_VOLT_RA; + else if (reg & BIT_VALUE_OF_SRC_CC2_RD) + *cc2 = TYPEC_CC_VOLT_RD; + else + *cc2 = TYPEC_CC_VOLT_OPEN; /* clear HPD status*/ if (!(*cc1) && !(*cc2)) { anx74xx_tcpc_clear_hpd_status(port); @@ -508,7 +498,6 @@ static int anx74xx_tcpm_set_cc(int port, int pull) return EC_ERROR_UNKNOWN; reg |= ANX74XX_REG_CC_PULL_RP; rv |= tcpc_write(port, ANX74XX_REG_ANALOG_STATUS, reg); - anx[port].pull = 1; break; case TYPEC_CC_RD: /* Enable Rd */ @@ -517,7 +506,6 @@ static int anx74xx_tcpm_set_cc(int port, int pull) return EC_ERROR_UNKNOWN; reg &= ANX74XX_REG_CC_PULL_RD; rv |= tcpc_write(port, ANX74XX_REG_ANALOG_STATUS, reg); - anx[port].pull = 0; break; default: rv = EC_ERROR_UNKNOWN;