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 <kevin.k.wong@intel.com>
Reviewed-on: https://chromium-review.googlesource.com/396428
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Reviewed-by: Shawn N <shawnn@chromium.org>
This commit is contained in:
Kevin K Wong
2016-10-11 16:03:19 -07:00
committed by chrome-bot
parent 57ad82c274
commit 080c566cc8

View File

@@ -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, &reg);
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;