tcpmv2: reduce zork specific auto discharge disconnect code
Removing the conditional code to find the specifics that broke waddledoo and then fix that. BUG=b:152616398 b:152444591 b:150110431 b:150913968 b:151152817 BRANCH=none TEST=verify trembyle and waddledoo Signed-off-by: Denis Brockus <dbrockus@google.com> Change-Id: Ieb88540b2298c3b999ab27ea78285f7f1c34bff6 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2121633 Reviewed-by: Denis Brockus <dbrockus@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org> Commit-Queue: Denis Brockus <dbrockus@chromium.org> Commit-Queue: Diana Z <dzigterman@chromium.org> Tested-by: Denis Brockus <dbrockus@chromium.org> Auto-Submit: Denis Brockus <dbrockus@chromium.org>
This commit is contained in:
parent
68b77f7c6c
commit
522979dc23
|
@ -125,7 +125,6 @@
|
|||
#ifndef CONFIG_USB_PD_TCPMV2
|
||||
#define CONFIG_USB_PD_TCPMV1
|
||||
#else
|
||||
#define CONFIG_ZORK_AUTO_DISCHARGE
|
||||
#define CONFIG_USB_PD_DECODE_SOP
|
||||
#define CONFIG_USB_DRP_ACC_TRYSRC
|
||||
|
||||
|
|
|
@ -1642,11 +1642,6 @@ static void tc_unattached_snk_entry(const int port)
|
|||
if (IS_ENABLED(CONFIG_BC12_DETECT_DATA_ROLE_TRIGGER))
|
||||
bc12_role_change_handler(port);
|
||||
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/* VBus should be SafeV0, turn off auto discharge disconnect */
|
||||
tcpm_enable_auto_discharge_disconnect(port, 0);
|
||||
#endif
|
||||
|
||||
if (IS_ENABLED(CONFIG_CHARGE_MANAGER))
|
||||
charge_manager_update_dualrole(port, CAP_UNKNOWN);
|
||||
|
||||
|
@ -1665,6 +1660,9 @@ static void tc_unattached_snk_entry(const int port)
|
|||
CLR_ALL_BUT_LPM_FLAGS(port);
|
||||
tc_enable_pd(port, 0);
|
||||
}
|
||||
|
||||
/* Turn on auto discharge disconnect */
|
||||
tcpm_enable_auto_discharge_disconnect(port, 1);
|
||||
}
|
||||
|
||||
static void tc_unattached_snk_run(const int port)
|
||||
|
@ -1696,8 +1694,6 @@ static void tc_unattached_snk_run(const int port)
|
|||
if (drp_state[port] == PD_DRP_TOGGLE_ON &&
|
||||
TC_CHK_FLAG(port, TC_FLAGS_AUTO_TOGGLE_SUPPORTED) &&
|
||||
cc_is_open(cc1, cc2)) {
|
||||
|
||||
#ifdef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/*
|
||||
* We are disconnected and going to DRP
|
||||
* PC.AutoDischargeDisconnect=0b
|
||||
|
@ -1707,8 +1703,6 @@ static void tc_unattached_snk_run(const int port)
|
|||
*/
|
||||
tcpm_enable_auto_discharge_disconnect(port, 0);
|
||||
tcpm_set_connection(port, TYPEC_CC_RD, 0);
|
||||
#endif
|
||||
|
||||
set_state_tc(port, TC_DRP_AUTO_TOGGLE);
|
||||
return;
|
||||
}
|
||||
|
@ -1735,15 +1729,11 @@ static void tc_unattached_snk_run(const int port)
|
|||
#ifdef CONFIG_USB_PD_TCPC_LOW_POWER
|
||||
else if (drp_state[port] == PD_DRP_FORCE_SINK ||
|
||||
drp_state[port] == PD_DRP_TOGGLE_OFF) {
|
||||
|
||||
#ifdef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/*
|
||||
* We are disconnecting without DRP.
|
||||
* PC.AutoDischargeDisconnect=0b
|
||||
*/
|
||||
tcpm_enable_auto_discharge_disconnect(port, 0);
|
||||
#endif
|
||||
|
||||
set_state_tc(port, TC_LOW_POWER_MODE);
|
||||
}
|
||||
#endif
|
||||
|
@ -1906,11 +1896,6 @@ static void tc_attached_snk_entry(const int port)
|
|||
/* Enable PD */
|
||||
if (IS_ENABLED(CONFIG_USB_PE_SM))
|
||||
tc_enable_pd(port, 1);
|
||||
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/* VBus should be powered, turn on auto discharge disconnect */
|
||||
tcpm_enable_auto_discharge_disconnect(port, 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void tc_attached_snk_run(const int port)
|
||||
|
@ -2350,11 +2335,6 @@ static void tc_unattached_src_entry(const int port)
|
|||
if (IS_ENABLED(CONFIG_BC12_DETECT_DATA_ROLE_TRIGGER))
|
||||
bc12_role_change_handler(port);
|
||||
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/* VBus should be SafeV0, turn off auto discharge disconnect */
|
||||
tcpm_enable_auto_discharge_disconnect(port, 0);
|
||||
#endif
|
||||
|
||||
if (IS_ENABLED(CONFIG_USBC_PPC)) {
|
||||
/* There is no sink connected. */
|
||||
ppc_sink_is_connected(port, 0);
|
||||
|
@ -2375,6 +2355,9 @@ static void tc_unattached_src_entry(const int port)
|
|||
}
|
||||
|
||||
tc[port].next_role_swap = get_time().val + PD_T_DRP_SRC;
|
||||
|
||||
/* Turn on auto discharge disconnect */
|
||||
tcpm_enable_auto_discharge_disconnect(port, 1);
|
||||
}
|
||||
|
||||
static void tc_unattached_src_run(const int port)
|
||||
|
@ -2423,8 +2406,6 @@ static void tc_unattached_src_run(const int port)
|
|||
else if (drp_state[port] == PD_DRP_TOGGLE_ON &&
|
||||
TC_CHK_FLAG(port, TC_FLAGS_AUTO_TOGGLE_SUPPORTED) &&
|
||||
cc_is_open(cc1, cc2)) {
|
||||
|
||||
#ifdef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/*
|
||||
* We are disconnected and going to DRP
|
||||
* PC.AutoDischargeDisconnect=0b
|
||||
|
@ -2435,8 +2416,6 @@ static void tc_unattached_src_run(const int port)
|
|||
*/
|
||||
tcpm_enable_auto_discharge_disconnect(port, 0);
|
||||
tcpm_set_connection(port, TYPEC_CC_RP, 0);
|
||||
#endif
|
||||
|
||||
set_state_tc(port, TC_DRP_AUTO_TOGGLE);
|
||||
}
|
||||
#endif
|
||||
|
@ -2444,15 +2423,11 @@ static void tc_unattached_src_run(const int port)
|
|||
#ifdef CONFIG_USB_PD_TCPC_LOW_POWER
|
||||
else if (drp_state[port] == PD_DRP_FORCE_SOURCE ||
|
||||
drp_state[port] == PD_DRP_TOGGLE_OFF) {
|
||||
|
||||
#ifdef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/*
|
||||
* We are disconnecting without DRP.
|
||||
* PC.AutoDischargeDisconnect=0b
|
||||
*/
|
||||
tcpm_enable_auto_discharge_disconnect(port, 0);
|
||||
#endif
|
||||
|
||||
set_state_tc(port, TC_LOW_POWER_MODE);
|
||||
}
|
||||
#endif
|
||||
|
@ -2632,11 +2607,6 @@ static void tc_attached_src_entry(const int port)
|
|||
if (IS_ENABLED(CONFIG_USBC_PPC))
|
||||
ppc_sink_is_connected(port, 1);
|
||||
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/* VBus should be powered, turn on auto discharge disconnect */
|
||||
tcpm_enable_auto_discharge_disconnect(port, 1);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Only notify if we're not performing a power role swap. During a
|
||||
* power role swap, the port partner is not disconnecting/connecting.
|
||||
|
@ -2874,33 +2844,23 @@ static void tc_drp_auto_toggle_run(const int port)
|
|||
set_state_tc(port, PD_DEFAULT_STATE(port));
|
||||
break;
|
||||
case DRP_TC_UNATTACHED_SNK:
|
||||
#ifdef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/*
|
||||
* New SNK connection.
|
||||
* Set RC.CC1 & RC.CC2 per decision
|
||||
* Set RC.DRP=0
|
||||
* Set TCPC_CONTROl.PlugOrientation
|
||||
* PC.AutoDischargeDisconnect=1b
|
||||
*/
|
||||
tcpm_set_connection(port, TYPEC_CC_RD, 1);
|
||||
tcpm_enable_auto_discharge_disconnect(port, 1);
|
||||
#endif
|
||||
|
||||
set_state_tc(port, TC_UNATTACHED_SNK);
|
||||
break;
|
||||
case DRP_TC_UNATTACHED_SRC:
|
||||
#ifdef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/*
|
||||
* New SRC connection.
|
||||
* Set RC.CC1 & RC.CC2 per decision
|
||||
* Set RC.DRP=0
|
||||
* Set TCPC_CONTROl.PlugOrientation
|
||||
* PC.AutoDischargeDisconnect=1b
|
||||
*/
|
||||
tcpm_set_connection(port, TYPEC_CC_RP, 1);
|
||||
tcpm_enable_auto_discharge_disconnect(port, 1);
|
||||
#endif
|
||||
|
||||
set_state_tc(port, TC_UNATTACHED_SRC);
|
||||
break;
|
||||
case DRP_TC_DRP_AUTO_TOGGLE:
|
||||
|
@ -3227,11 +3187,7 @@ static void tc_cc_rd_entry(const int port)
|
|||
* Both CC1 and CC2 pins shall be independently terminated to
|
||||
* ground through Rd.
|
||||
*/
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
tcpm_set_new_connection(port, TYPEC_CC_RD);
|
||||
#else
|
||||
tcpm_set_cc(port, TYPEC_CC_RD);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
@ -3253,11 +3209,7 @@ static void tc_cc_rp_entry(const int port)
|
|||
* up through Rp.
|
||||
*/
|
||||
tcpm_select_rp_value(port, CONFIG_USB_PD_PULLUP);
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
tcpm_set_new_connection(port, TYPEC_CC_RP);
|
||||
#else
|
||||
tcpm_set_cc(port, TYPEC_CC_RP);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -119,103 +119,6 @@ static void nct38xx_tcpc_alert(int port)
|
|||
|
||||
}
|
||||
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
|
||||
static int nct38xx_set_new_connection(int port,
|
||||
enum tcpc_cc_pull pull)
|
||||
{
|
||||
int rv;
|
||||
int role;
|
||||
|
||||
/* Get the ROLE CONTROL value */
|
||||
rv = tcpc_read(port, TCPC_REG_ROLE_CTRL, &role);
|
||||
if (rv)
|
||||
return rv;
|
||||
|
||||
if (role & TCPC_REG_ROLE_CTRL_DRP_MASK) {
|
||||
/*
|
||||
* If DRP is set, the CC pins shall stay in
|
||||
* Potential_Connect_as_Src or Potential_Connect_as_Sink
|
||||
* until directed otherwise.
|
||||
*
|
||||
* Set RC.CC1 & RC.CC2 per potential decision
|
||||
* Set RC.DRP=0
|
||||
*/
|
||||
enum tcpc_cc_pull cc1_pull, cc2_pull;
|
||||
enum tcpc_cc_voltage_status cc1, cc2;
|
||||
|
||||
rv = nct38xx_tcpm_drv.get_cc(port, &cc1, &cc2);
|
||||
if (rv)
|
||||
return rv;
|
||||
|
||||
switch (cc1) {
|
||||
case TYPEC_CC_VOLT_OPEN:
|
||||
cc1_pull = TYPEC_CC_OPEN;
|
||||
break;
|
||||
case TYPEC_CC_VOLT_RA:
|
||||
cc1_pull = TYPEC_CC_RA;
|
||||
break;
|
||||
case TYPEC_CC_VOLT_RD:
|
||||
cc1_pull = TYPEC_CC_RP;
|
||||
break;
|
||||
case TYPEC_CC_VOLT_RP_DEF:
|
||||
case TYPEC_CC_VOLT_RP_1_5:
|
||||
case TYPEC_CC_VOLT_RP_3_0:
|
||||
cc1_pull = TYPEC_CC_RD;
|
||||
break;
|
||||
default:
|
||||
return EC_ERROR_UNKNOWN;
|
||||
}
|
||||
|
||||
switch (cc2) {
|
||||
case TYPEC_CC_VOLT_OPEN:
|
||||
cc2_pull = TYPEC_CC_OPEN;
|
||||
break;
|
||||
case TYPEC_CC_VOLT_RA:
|
||||
cc2_pull = TYPEC_CC_RA;
|
||||
break;
|
||||
case TYPEC_CC_VOLT_RD:
|
||||
cc2_pull = TYPEC_CC_RP;
|
||||
break;
|
||||
case TYPEC_CC_VOLT_RP_DEF:
|
||||
case TYPEC_CC_VOLT_RP_1_5:
|
||||
case TYPEC_CC_VOLT_RP_3_0:
|
||||
cc2_pull = TYPEC_CC_RD;
|
||||
break;
|
||||
default:
|
||||
return EC_ERROR_UNKNOWN;
|
||||
}
|
||||
|
||||
/* Set the CC lines */
|
||||
rv = tcpc_write(port, TCPC_REG_ROLE_CTRL,
|
||||
TCPC_REG_ROLE_CTRL_SET(0,
|
||||
CONFIG_USB_PD_PULLUP,
|
||||
cc1_pull, cc2_pull));
|
||||
if (rv)
|
||||
return rv;
|
||||
} else {
|
||||
/*
|
||||
* DRP is not set. This would happen if DRP is not enabled or
|
||||
* was turned off and we did not have a connection. We have
|
||||
* to manually turn off that we are looking for a connection
|
||||
* and set both CC lines to the pull value.
|
||||
*/
|
||||
rv = tcpc_update8(port,
|
||||
TCPC_REG_TCPC_CTRL,
|
||||
TCPC_REG_TCPC_CTRL_EN_LOOK4CONNECTION_ALERT,
|
||||
MASK_CLR);
|
||||
if (rv)
|
||||
return rv;
|
||||
|
||||
/* Set the CC lines */
|
||||
rv = nct38xx_tcpm_drv.set_cc(port, pull);
|
||||
if (rv)
|
||||
return rv;
|
||||
}
|
||||
return EC_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
static __maybe_unused int nct3807_tcpc_drp_toggle(int port)
|
||||
{
|
||||
int rv;
|
||||
|
@ -236,7 +139,6 @@ static __maybe_unused int nct3807_tcpc_drp_toggle(int port)
|
|||
|
||||
return rv;
|
||||
}
|
||||
#endif
|
||||
|
||||
const struct tcpm_drv nct38xx_tcpm_drv = {
|
||||
.init = &nct38xx_tcpm_init,
|
||||
|
@ -260,14 +162,9 @@ const struct tcpm_drv nct38xx_tcpm_drv = {
|
|||
.tcpc_enable_auto_discharge_disconnect =
|
||||
&tcpci_tcpc_enable_auto_discharge_disconnect,
|
||||
#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
.drp_toggle = &tcpci_tcpc_drp_toggle,
|
||||
.set_new_connection = &nct38xx_set_new_connection,
|
||||
#else
|
||||
.drp_toggle = &nct3807_tcpc_drp_toggle,
|
||||
.set_connection = &tcpci_tcpc_set_connection,
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIG_USBC_PPC
|
||||
.set_snk_ctrl = &tcpci_tcpm_set_snk_ctrl,
|
||||
.set_src_ctrl = &tcpci_tcpm_set_src_ctrl,
|
||||
|
|
|
@ -380,7 +380,6 @@ int tcpci_tcpc_drp_toggle(int port)
|
|||
if (rv)
|
||||
return rv;
|
||||
|
||||
#ifdef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/* Set up to catch LOOK4CONNECTION alerts */
|
||||
rv = tcpc_update8(port,
|
||||
TCPC_REG_TCPC_CTRL,
|
||||
|
@ -388,7 +387,6 @@ int tcpci_tcpc_drp_toggle(int port)
|
|||
MASK_SET);
|
||||
if (rv)
|
||||
return rv;
|
||||
#endif
|
||||
|
||||
/* Set Look4Connection command */
|
||||
rv = tcpc_write(port, TCPC_REG_COMMAND,
|
||||
|
@ -397,7 +395,6 @@ int tcpci_tcpc_drp_toggle(int port)
|
|||
return rv;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
int tcpci_tcpc_set_connection(int port,
|
||||
enum tcpc_cc_pull pull,
|
||||
int connect)
|
||||
|
@ -512,7 +509,6 @@ int tcpci_tcpc_set_connection(int port,
|
|||
return rv;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_PD_TCPC_LOW_POWER
|
||||
int tcpci_enter_low_power_mode(int port)
|
||||
|
@ -1179,17 +1175,9 @@ int tcpci_tcpm_init(int port)
|
|||
* Alert assertion when CC_STATUS.Looking4Connection changes state.
|
||||
*/
|
||||
if (tcpc_config[port].flags & TCPC_FLAGS_TCPCI_REV2_0) {
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
int regval;
|
||||
|
||||
error = tcpc_read(port, TCPC_REG_TCPC_CTRL, ®val);
|
||||
regval |= TCPC_REG_TCPC_CTRL_EN_LOOK4CONNECTION_ALERT;
|
||||
error |= tcpc_write(port, TCPC_REG_TCPC_CTRL, regval);
|
||||
#else
|
||||
error = tcpc_update8(port, TCPC_REG_TCPC_CTRL,
|
||||
TCPC_REG_TCPC_CTRL_EN_LOOK4CONNECTION_ALERT,
|
||||
MASK_SET);
|
||||
#endif
|
||||
if (error)
|
||||
CPRINTS("C%d: Failed to init TCPC_CTRL!", port);
|
||||
}
|
||||
|
|
|
@ -222,11 +222,9 @@ int tcpci_tcpm_release(int port);
|
|||
#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
|
||||
int tcpci_set_role_ctrl(int port, int toggle, int rp, int pull);
|
||||
int tcpci_tcpc_drp_toggle(int port);
|
||||
#ifdef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
int tcpci_tcpc_set_connection(int port, enum tcpc_cc_pull pull,
|
||||
int connect);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIG_USB_PD_TCPC_LOW_POWER
|
||||
int tcpci_enter_low_power_mode(int port);
|
||||
#endif
|
||||
|
|
|
@ -178,19 +178,6 @@ static inline int tcpm_set_cc(int port, int pull)
|
|||
return tcpc_config[port].drv->set_cc(port, pull);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
static inline int tcpm_set_new_connection(int port,
|
||||
enum tcpc_cc_pull pull)
|
||||
{
|
||||
const struct tcpm_drv *tcpc = tcpc_config[port].drv;
|
||||
|
||||
if (IS_ENABLED(CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE) &&
|
||||
tcpc->set_new_connection)
|
||||
return tcpc->set_new_connection(port, pull);
|
||||
else
|
||||
return tcpc->set_cc(port, pull);
|
||||
}
|
||||
#else
|
||||
static inline int tcpm_set_connection(int port,
|
||||
enum tcpc_cc_pull pull,
|
||||
int connect)
|
||||
|
@ -202,7 +189,6 @@ static inline int tcpm_set_connection(int port,
|
|||
return tcpc->set_connection(port, pull, connect);
|
||||
return EC_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int tcpm_set_polarity(int port, enum tcpc_cc_polarity polarity)
|
||||
{
|
||||
|
|
|
@ -3662,9 +3662,6 @@
|
|||
#define CONFIG_USB_PRL_SM
|
||||
#define CONFIG_USB_PE_SM
|
||||
|
||||
/* Enables Zork Auto Discharge Disconnect Changes */
|
||||
#undef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
|
||||
/* Enables PD Console commands */
|
||||
#define CONFIG_USB_PD_CONSOLE_CMD
|
||||
|
||||
|
|
|
@ -319,24 +319,6 @@ struct tcpm_drv {
|
|||
void (*tcpc_enable_auto_discharge_disconnect)(int port,
|
||||
int enable);
|
||||
|
||||
#ifndef CONFIG_ZORK_AUTO_DISCHARGE
|
||||
/**
|
||||
* Set new connection
|
||||
* There is a new connection. May have to handle differently
|
||||
* if we were performing auto-toggle. Allow a driver to do
|
||||
* any work required to leave the unattached auto-toggle mode
|
||||
* as well as setting the CC lines. If auto-toggle is not
|
||||
* being used or was not the cause of the new connection
|
||||
* detection then set both CC lines to the passed pull.
|
||||
*
|
||||
* @param port Type-C port number
|
||||
* @param pull enum tcpc_cc_pull of CC lines
|
||||
*
|
||||
* @return EC_SUCCESS or error
|
||||
*/
|
||||
int (*set_new_connection)(int port,
|
||||
enum tcpc_cc_pull pull);
|
||||
#else
|
||||
/**
|
||||
* Set connection
|
||||
* If this is a disconnect, set the ROLE_CONTROL, otherwise
|
||||
|
@ -356,7 +338,6 @@ struct tcpm_drv {
|
|||
int (*set_connection)(int port,
|
||||
enum tcpc_cc_pull pull,
|
||||
int connect);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue