summaryrefslogtreecommitdiff
path: root/common/usbc/usb_tc_drp_acc_trysrc_sm.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/usbc/usb_tc_drp_acc_trysrc_sm.c')
-rw-r--r--common/usbc/usb_tc_drp_acc_trysrc_sm.c398
1 files changed, 200 insertions, 198 deletions
diff --git a/common/usbc/usb_tc_drp_acc_trysrc_sm.c b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
index 2da6b59f0a..e68b0139db 100644
--- a/common/usbc/usb_tc_drp_acc_trysrc_sm.c
+++ b/common/usbc/usb_tc_drp_acc_trysrc_sm.c
@@ -1,8 +1,9 @@
-/* Copyright 2019 The Chromium OS Authors. All rights reserved.
+/* Copyright 2019 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
+#include "builtin/assert.h"
#include "charge_manager.h"
#include "charge_state.h"
#include "common.h"
@@ -32,30 +33,30 @@
* See Figure 4-16 in Release 1.4 of USB Type-C Spec.
*/
#ifdef CONFIG_COMMON_RUNTIME
-#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args)
-#define CPRINTS(format, args...) cprints(CC_USBPD, format, ## args)
+#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ##args)
+#define CPRINTS(format, args...) cprints(CC_USBPD, format, ##args)
#else /* CONFIG_COMMON_RUNTIME */
#define CPRINTF(format, args...)
#define CPRINTS(format, args...)
#endif
-#define CPRINTF_LX(x, format, args...) \
- do { \
- if (tc_debug_level >= x) \
- CPRINTF(format, ## args); \
+#define CPRINTF_LX(x, format, args...) \
+ do { \
+ if (tc_debug_level >= x) \
+ CPRINTF(format, ##args); \
} while (0)
-#define CPRINTF_L1(format, args...) CPRINTF_LX(1, format, ## args)
-#define CPRINTF_L2(format, args...) CPRINTF_LX(2, format, ## args)
-#define CPRINTF_L3(format, args...) CPRINTF_LX(3, format, ## args)
-
-#define CPRINTS_LX(x, format, args...) \
- do { \
- if (tc_debug_level >= x) \
- CPRINTS(format, ## args); \
+#define CPRINTF_L1(format, args...) CPRINTF_LX(1, format, ##args)
+#define CPRINTF_L2(format, args...) CPRINTF_LX(2, format, ##args)
+#define CPRINTF_L3(format, args...) CPRINTF_LX(3, format, ##args)
+
+#define CPRINTS_LX(x, format, args...) \
+ do { \
+ if (tc_debug_level >= x) \
+ CPRINTS(format, ##args); \
} while (0)
-#define CPRINTS_L1(format, args...) CPRINTS_LX(1, format, ## args)
-#define CPRINTS_L2(format, args...) CPRINTS_LX(2, format, ## args)
-#define CPRINTS_L3(format, args...) CPRINTS_LX(3, format, ## args)
+#define CPRINTS_L1(format, args...) CPRINTS_LX(1, format, ##args)
+#define CPRINTS_L2(format, args...) CPRINTS_LX(2, format, ##args)
+#define CPRINTS_L3(format, args...) CPRINTS_LX(3, format, ##args)
/*
* Define DEBUG_PRINT_FLAG_AND_EVENT_NAMES to print flag names when set and
@@ -83,57 +84,58 @@ void print_flag(int port, int set_or_clear, int flag);
/* Type-C Layer Flags */
/* Flag to note we are sourcing VCONN */
-#define TC_FLAGS_VCONN_ON BIT(0)
+#define TC_FLAGS_VCONN_ON BIT(0)
/* Flag to note port partner has Rp/Rp or Rd/Rd */
-#define TC_FLAGS_TS_DTS_PARTNER BIT(1)
+#define TC_FLAGS_TS_DTS_PARTNER BIT(1)
/* Flag to note VBus input has never been low */
-#define TC_FLAGS_VBUS_NEVER_LOW BIT(2)
+#define TC_FLAGS_VBUS_NEVER_LOW BIT(2)
/* Flag to note Low Power Mode transition is currently happening */
-#define TC_FLAGS_LPM_TRANSITION BIT(3)
+#define TC_FLAGS_LPM_TRANSITION BIT(3)
/* Flag to note Low Power Mode is currently on */
-#define TC_FLAGS_LPM_ENGAGED BIT(4)
+#define TC_FLAGS_LPM_ENGAGED BIT(4)
/* Flag to note CVTPD has been detected */
-#define TC_FLAGS_CTVPD_DETECTED BIT(5)
+#define TC_FLAGS_CTVPD_DETECTED BIT(5)
/* Flag to note request to swap to VCONN on */
-#define TC_FLAGS_REQUEST_VC_SWAP_ON BIT(6)
+#define TC_FLAGS_REQUEST_VC_SWAP_ON BIT(6)
/* Flag to note request to swap to VCONN off */
-#define TC_FLAGS_REQUEST_VC_SWAP_OFF BIT(7)
+#define TC_FLAGS_REQUEST_VC_SWAP_OFF BIT(7)
/* Flag to note request to swap VCONN is being rejected */
-#define TC_FLAGS_REJECT_VCONN_SWAP BIT(8)
+#define TC_FLAGS_REJECT_VCONN_SWAP BIT(8)
/* Flag to note request to power role swap */
-#define TC_FLAGS_REQUEST_PR_SWAP BIT(9)
+#define TC_FLAGS_REQUEST_PR_SWAP BIT(9)
/* Flag to note request to data role swap */
-#define TC_FLAGS_REQUEST_DR_SWAP BIT(10)
+#define TC_FLAGS_REQUEST_DR_SWAP BIT(10)
/* Flag to note request to power off sink */
-#define TC_FLAGS_POWER_OFF_SNK BIT(11)
+#define TC_FLAGS_POWER_OFF_SNK BIT(11)
/* Flag to note port partner is Power Delivery capable */
-#define TC_FLAGS_PARTNER_PD_CAPABLE BIT(12)
+#define TC_FLAGS_PARTNER_PD_CAPABLE BIT(12)
/* Flag to note hard reset has been requested */
-#define TC_FLAGS_HARD_RESET_REQUESTED BIT(13)
+#define TC_FLAGS_HARD_RESET_REQUESTED BIT(13)
/* Flag to note we are currently performing PR Swap */
-#define TC_FLAGS_PR_SWAP_IN_PROGRESS BIT(14)
+#define TC_FLAGS_PR_SWAP_IN_PROGRESS BIT(14)
/* Flag to note we should check for connection */
-#define TC_FLAGS_CHECK_CONNECTION BIT(15)
+#define TC_FLAGS_CHECK_CONNECTION BIT(15)
/* Flag to note request from pd_set_suspend to enter TC_DISABLED state */
-#define TC_FLAGS_REQUEST_SUSPEND BIT(16)
+#define TC_FLAGS_REQUEST_SUSPEND BIT(16)
/* Flag to note we are in TC_DISABLED state */
-#define TC_FLAGS_SUSPENDED BIT(17)
+#define TC_FLAGS_SUSPENDED BIT(17)
/* Flag to indicate the port current limit has changed */
-#define TC_FLAGS_UPDATE_CURRENT BIT(18)
+#define TC_FLAGS_UPDATE_CURRENT BIT(18)
/* Flag to indicate USB mux should be updated */
-#define TC_FLAGS_UPDATE_USB_MUX BIT(19)
+#define TC_FLAGS_UPDATE_USB_MUX BIT(19)
/* Flag for retimer firmware update */
-#define TC_FLAGS_USB_RETIMER_FW_UPDATE_RUN BIT(20)
+#define TC_FLAGS_USB_RETIMER_FW_UPDATE_RUN BIT(20)
#define TC_FLAGS_USB_RETIMER_FW_UPDATE_LTD_RUN BIT(21)
/* Flag for asynchronous call to request Error Recovery */
-#define TC_FLAGS_REQUEST_ERROR_RECOVERY BIT(22)
+#define TC_FLAGS_REQUEST_ERROR_RECOVERY BIT(22)
/* For checking flag_bit_names[] array */
-#define TC_FLAGS_COUNT 23
+#define TC_FLAGS_COUNT 23
/* On disconnect, clear most of the flags. */
-#define CLR_FLAGS_ON_DISCONNECT(port) TC_CLR_FLAG(port, \
- ~(TC_FLAGS_LPM_ENGAGED | TC_FLAGS_REQUEST_SUSPEND | TC_FLAGS_SUSPENDED))
+#define CLR_FLAGS_ON_DISCONNECT(port) \
+ TC_CLR_FLAG(port, ~(TC_FLAGS_LPM_ENGAGED | TC_FLAGS_REQUEST_SUSPEND | \
+ TC_FLAGS_SUSPENDED))
/*
* 10 ms is enough time for any TCPC transaction to complete
@@ -166,14 +168,14 @@ void print_flag(int port, int set_or_clear, int flag);
* The TypeC state machine uses this bit to disable/enable PD
* This bit corresponds to bit-0 of pd_disabled_mask
*/
-#define PD_DISABLED_NO_CONNECTION BIT(0)
+#define PD_DISABLED_NO_CONNECTION BIT(0)
/*
* Console and Host commands use this bit to override the
* PD_DISABLED_NO_CONNECTION bit that was set by the TypeC
* state machine.
* This bit corresponds to bit-1 of pd_disabled_mask
*/
-#define PD_DISABLED_BY_POLICY BIT(1)
+#define PD_DISABLED_BY_POLICY BIT(1)
/* Unreachable time in future */
#define TIMER_DISABLED 0xffffffffffffffff
@@ -250,9 +252,8 @@ extern int _GPIO_CCD_MODE_ODL;
* If we can't print or the CONFIG_USB_PD_DEBUG_LEVEL is defined to be 0
* then the DEBUG LABELS will be removed from the build.
*/
-#if defined(CONFIG_COMMON_RUNTIME) && \
- (!defined(CONFIG_USB_PD_DEBUG_LEVEL) || \
- (CONFIG_USB_PD_DEBUG_LEVEL > 0))
+#if defined(CONFIG_COMMON_RUNTIME) && (!defined(CONFIG_USB_PD_DEBUG_LEVEL) || \
+ (CONFIG_USB_PD_DEBUG_LEVEL > 0))
#define USB_PD_DEBUG_LABELS
#endif
@@ -268,9 +269,8 @@ extern int _GPIO_CCD_MODE_ODL;
*/
#define IS_ATTACHED_SNK(port) (get_state_tc(port) == TC_ATTACHED_SNK)
-
/* List of human readable state names for console debugging */
-__maybe_unused static __const_data const char * const tc_state_names[] = {
+__maybe_unused static __const_data const char *const tc_state_names[] = {
#ifdef USB_PD_DEBUG_LABELS
[TC_DISABLED] = "Disabled",
[TC_ERROR_RECOVERY] = "ErrorRecovery",
@@ -289,7 +289,7 @@ __maybe_unused static __const_data const char * const tc_state_names[] = {
[TC_LOW_POWER_MODE] = "LowPowerMode",
#endif
#ifdef CONFIG_USB_PE_SM
- [TC_CT_UNATTACHED_SNK] = "CTUnattached.SNK",
+ [TC_CT_UNATTACHED_SNK] = "CTUnattached.SNK",
[TC_CT_ATTACHED_SNK] = "CTAttached.SNK",
#endif
/* Super States */
@@ -304,14 +304,16 @@ __maybe_unused static __const_data const char * const tc_state_names[] = {
/* Debug log level - higher number == more log */
#ifdef CONFIG_USB_PD_DEBUG_LEVEL
static const enum debug_level tc_debug_level = CONFIG_USB_PD_DEBUG_LEVEL;
+#elif defined(CONFIG_USB_PD_INITIAL_DEBUG_LEVEL)
+static enum debug_level tc_debug_level = CONFIG_USB_PD_INITIAL_DEBUG_LEVEL;
#else
static enum debug_level tc_debug_level = DEBUG_LEVEL_1;
#endif
#ifdef DEBUG_PRINT_FLAG_AND_EVENT_NAMES
struct bit_name {
- int value;
- const char *name;
+ int value;
+ const char *name;
};
static struct bit_name flag_bit_names[] = {
@@ -335,11 +337,10 @@ static struct bit_name flag_bit_names[] = {
{ TC_FLAGS_SUSPENDED, "SUSPENDED" },
{ TC_FLAGS_UPDATE_CURRENT, "UPDATE_CURRENT" },
{ TC_FLAGS_UPDATE_USB_MUX, "UPDATE_USB_MUX" },
- { TC_FLAGS_USB_RETIMER_FW_UPDATE_RUN,
- "USB_RETIMER_FW_UPDATE_RUN" },
+ { TC_FLAGS_USB_RETIMER_FW_UPDATE_RUN, "USB_RETIMER_FW_UPDATE_RUN" },
{ TC_FLAGS_USB_RETIMER_FW_UPDATE_LTD_RUN,
- "USB_RETIMER_FW_UPDATE_LTD_RUN" },
- { TC_FLAGS_REQUEST_ERROR_RECOVERY, "REQUEST_ERROR_RECOCVERY"},
+ "USB_RETIMER_FW_UPDATE_LTD_RUN" },
+ { TC_FLAGS_REQUEST_ERROR_RECOVERY, "REQUEST_ERROR_RECOCVERY" },
};
BUILD_ASSERT(ARRAY_SIZE(flag_bit_names) == TC_FLAGS_COUNT);
@@ -394,8 +395,8 @@ void print_flag(int port, int set_or_clear, int flag)
#ifndef CONFIG_USB_PD_TRY_SRC
extern int TC_TRY_SRC_UNDEFINED;
extern int TC_TRY_WAIT_SNK_UNDEFINED;
-#define TC_TRY_SRC TC_TRY_SRC_UNDEFINED
-#define TC_TRY_WAIT_SNK TC_TRY_WAIT_SNK_UNDEFINED
+#define TC_TRY_SRC TC_TRY_SRC_UNDEFINED
+#define TC_TRY_WAIT_SNK TC_TRY_WAIT_SNK_UNDEFINED
#endif
static struct type_c {
@@ -444,10 +445,11 @@ static struct type_c {
} tc[CONFIG_USB_PD_PORT_MAX_COUNT];
/* Port dual-role state */
-static volatile __maybe_unused
-enum pd_dual_role_states drp_state[CONFIG_USB_PD_PORT_MAX_COUNT] = {
- [0 ... (CONFIG_USB_PD_PORT_MAX_COUNT - 1)] =
- CONFIG_USB_PD_INITIAL_DRP_STATE};
+static volatile __maybe_unused enum pd_dual_role_states
+ drp_state[CONFIG_USB_PD_PORT_MAX_COUNT] = {
+ [0 ...(CONFIG_USB_PD_PORT_MAX_COUNT - 1)] =
+ CONFIG_USB_PD_INITIAL_DRP_STATE
+ };
static void set_vconn(int port, int enable);
@@ -516,7 +518,7 @@ __overridable void pd_set_vbus_discharge(int port, int enable)
/*
* These pd_ functions are implemented in the PE layer
*/
-const uint32_t * const pd_get_src_caps(int port)
+const uint32_t *const pd_get_src_caps(int port)
{
return NULL;
}
@@ -526,7 +528,7 @@ uint8_t pd_get_src_cap_cnt(int port)
return 0;
}
-const uint32_t * const pd_get_snk_caps(int port)
+const uint32_t *const pd_get_snk_caps(int port)
{
return NULL;
}
@@ -718,7 +720,7 @@ __maybe_unused static void tc_enable_try_src(int en)
static void tc_set_modes_exit(int port)
{
if (IS_ENABLED(CONFIG_USB_PE_SM) &&
- IS_ENABLED(CONFIG_USB_PD_ALT_MODE_DFP)) {
+ IS_ENABLED(CONFIG_USB_PD_ALT_MODE_DFP)) {
pd_dfp_exit_mode(port, TCPCI_MSG_SOP, 0, 0);
pd_dfp_exit_mode(port, TCPCI_MSG_SOP_PRIME, 0, 0);
pd_dfp_exit_mode(port, TCPCI_MSG_SOP_PRIME_PRIME, 0, 0);
@@ -738,12 +740,13 @@ static void tc_detached(int port)
/* Clear any mux connection on detach */
if (IS_ENABLED(CONFIG_USBC_SS_MUX))
- usb_mux_set(port, USB_PD_MUX_NONE,
- USB_SWITCH_DISCONNECT, tc[port].polarity);
+ usb_mux_set(port, USB_PD_MUX_NONE, USB_SWITCH_DISCONNECT,
+ tc[port].polarity);
}
static inline void pd_set_dual_role_and_event(int port,
- enum pd_dual_role_states state, uint32_t event)
+ enum pd_dual_role_states state,
+ uint32_t event)
{
drp_state[port] = state;
@@ -1072,8 +1075,8 @@ static void tc_set_partner_role(int port, enum ppc_device_role role,
* to run. So build in 1ms delays, for up to 300ms, to wait for
* the suspend to actually happen.
*/
-#define SUSPEND_SLEEP_DELAY 1
-#define SUSPEND_SLEEP_RETRIES 300
+#define SUSPEND_SLEEP_DELAY 1
+#define SUSPEND_SLEEP_RETRIES 300
void pd_set_suspend(int port, int suspend)
{
@@ -1098,8 +1101,8 @@ void pd_set_suspend(int port, int suspend)
/* Sleep this task if we are not suspended */
while (pd_is_port_enabled(port)) {
if (++wait > SUSPEND_SLEEP_RETRIES) {
- CPRINTS("C%d: NOT SUSPENDED after %dms",
- port, wait * SUSPEND_SLEEP_DELAY);
+ CPRINTS("C%d: NOT SUSPENDED after %dms", port,
+ wait * SUSPEND_SLEEP_DELAY);
return;
}
msleep(SUSPEND_SLEEP_DELAY);
@@ -1177,8 +1180,8 @@ int pd_is_connected(int port)
{
return (IS_ATTACHED_SRC(port) ||
(IS_ENABLED(CONFIG_USB_PE_SM) &&
- ((get_state_tc(port) == TC_CT_UNATTACHED_SNK) ||
- (get_state_tc(port) == TC_CT_ATTACHED_SNK))) ||
+ ((get_state_tc(port) == TC_CT_UNATTACHED_SNK) ||
+ (get_state_tc(port) == TC_CT_ATTACHED_SNK))) ||
IS_ATTACHED_SNK(port));
}
@@ -1235,7 +1238,7 @@ bool pd_get_partner_unconstr_power(int port)
}
static void bc12_role_change_handler(int port, enum pd_data_role prev_data_role,
- enum pd_data_role data_role)
+ enum pd_data_role data_role)
{
int event = 0;
bool role_changed = (data_role != prev_data_role);
@@ -1290,8 +1293,7 @@ void typec_select_src_collision_rp(int port, enum tcpc_rp_value rp)
static enum tcpc_rp_value typec_get_active_select_rp(int port)
{
/* Explicit contract will use the collision Rp */
- if (IS_ENABLED(CONFIG_USB_PD_REV30) &&
- pe_is_explicit_contract(port))
+ if (IS_ENABLED(CONFIG_USB_PD_REV30) && pe_is_explicit_contract(port))
return tc[port].select_collision_rp;
return tc[port].select_current_limit_rp;
}
@@ -1412,7 +1414,7 @@ static bool tc_perform_snk_hard_reset(int port)
tc[port].ps_reset_state = PS_STATE2;
pd_timer_enable(port, TC_TIMER_TIMEOUT,
PD_T_SRC_RECOVER_MAX +
- PD_T_SRC_TURN_ON);
+ PD_T_SRC_TURN_ON);
}
if (pd_timer_is_expired(port, TC_TIMER_TIMEOUT)) {
@@ -1423,7 +1425,7 @@ static bool tc_perform_snk_hard_reset(int port)
tc[port].ps_reset_state = PS_STATE2;
pd_timer_enable(port, TC_TIMER_TIMEOUT,
PD_T_SRC_RECOVER_MAX +
- PD_T_SRC_TURN_ON);
+ PD_T_SRC_TURN_ON);
}
return false;
case PS_STATE2:
@@ -1497,8 +1499,8 @@ static void restart_tc_sm(int port, enum usb_tc_state start_state)
* Update the Rp Value. We don't need to update CC lines though as that
* happens in below set_state transition.
*/
- typec_select_src_current_limit_rp(port,
- typec_get_default_current_limit_rp(port));
+ typec_select_src_current_limit_rp(
+ port, typec_get_default_current_limit_rp(port));
/* Disable if restart failed, otherwise start in default state. */
set_state_tc(port, res ? TC_DISABLED : start_state);
@@ -1567,7 +1569,6 @@ void tc_state_init(int port)
return;
}
-
/* Allow system to set try src enable */
if (IS_ENABLED(CONFIG_USB_PD_TRY_SRC))
tc_try_src_override(TRY_SRC_NO_OVERRIDE);
@@ -1582,11 +1583,13 @@ void tc_state_init(int port)
if (chipset_in_state(CHIPSET_STATE_ANY_OFF))
pd_set_dual_role_and_event(port, PD_DRP_FORCE_SINK, 0);
else if (chipset_in_state(CHIPSET_STATE_ANY_SUSPEND))
- pd_set_dual_role_and_event(port, pd_get_drp_state_in_suspend(), 0);
+ pd_set_dual_role_and_event(port, pd_get_drp_state_in_suspend(),
+ 0);
else /* CHIPSET_STATE_ON */
pd_set_dual_role_and_event(port, pd_get_drp_state_in_s0(), 0);
#else
- pd_set_dual_role_and_event(port, board_tc_get_initial_drp_mode(port), 0);
+ pd_set_dual_role_and_event(port, board_tc_get_initial_drp_mode(port),
+ 0);
#endif
/*
@@ -1771,8 +1774,7 @@ void tc_event_check(int port, int evt)
* Notify all ports of sysjump
*/
if (evt & PD_EVENT_SYSJUMP) {
- for (i = 0; i <
- CONFIG_USB_PD_PORT_MAX_COUNT; i++)
+ for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++)
dpm_set_mode_exit_request(i);
notify_sysjump_ready();
}
@@ -1834,8 +1836,8 @@ static void sink_stop_drawing_current(int port)
if (IS_ENABLED(CONFIG_CHARGE_MANAGER)) {
typec_set_input_current_limit(port, 0, 0);
- charge_manager_set_ceil(port,
- CEIL_REQUESTOR_PD, CHARGE_CEIL_NONE);
+ charge_manager_set_ceil(port, CEIL_REQUESTOR_PD,
+ CHARGE_CEIL_NONE);
}
}
@@ -1861,9 +1863,9 @@ static void set_vconn(int port, int enable)
static void pd_update_dual_role_config(int port)
{
if (tc[port].power_role == PD_ROLE_SOURCE &&
- (drp_state[port] == PD_DRP_FORCE_SINK ||
- (drp_state[port] == PD_DRP_TOGGLE_OFF &&
- get_state_tc(port) == TC_UNATTACHED_SRC))) {
+ (drp_state[port] == PD_DRP_FORCE_SINK ||
+ (drp_state[port] == PD_DRP_TOGGLE_OFF &&
+ get_state_tc(port) == TC_UNATTACHED_SRC))) {
/*
* Change to sink if port is currently a source AND (new DRP
* state is force sink OR new DRP state is toggle off and we are
@@ -1871,7 +1873,7 @@ static void pd_update_dual_role_config(int port)
*/
set_state_tc(port, TC_UNATTACHED_SNK);
} else if (tc[port].power_role == PD_ROLE_SINK &&
- drp_state[port] == PD_DRP_FORCE_SOURCE) {
+ drp_state[port] == PD_DRP_FORCE_SOURCE) {
/*
* Change to source if port is currently a sink and the
* new DRP state is force source.
@@ -1885,10 +1887,9 @@ __maybe_unused static void handle_new_power_state(int port)
if (!IS_ENABLED(CONFIG_POWER_COMMON))
assert(0);
- if (IS_ENABLED(CONFIG_POWER_COMMON) &&
- IS_ENABLED(CONFIG_USB_PE_SM)) {
+ if (IS_ENABLED(CONFIG_POWER_COMMON) && IS_ENABLED(CONFIG_USB_PE_SM)) {
if (chipset_in_or_transitioning_to_state(
- CHIPSET_STATE_ANY_OFF)) {
+ CHIPSET_STATE_ANY_OFF)) {
/*
* The SoC will negotiate alternate mode again when it
* boots up
@@ -1905,8 +1906,7 @@ __maybe_unused static void handle_new_power_state(int port)
*/
if (IS_ENABLED(CONFIG_USB_PE_SM)) {
if (tc_is_vconn_src(port) && tc_is_attached_snk(port) &&
- !pd_check_vconn_swap(port) &&
- pd_is_battery_capable())
+ !pd_check_vconn_swap(port) && pd_is_battery_capable())
pd_dpm_request(port, DPM_REQUEST_HARD_RESET_SEND);
}
@@ -1928,7 +1928,7 @@ __maybe_unused static void handle_new_power_state(int port)
void pd_request_vconn_swap_off(int port)
{
if (get_state_tc(port) == TC_ATTACHED_SRC ||
- get_state_tc(port) == TC_ATTACHED_SNK) {
+ get_state_tc(port) == TC_ATTACHED_SNK) {
TC_SET_FLAG(port, TC_FLAGS_REQUEST_VC_SWAP_OFF);
task_wake(PD_PORT_TO_TASK_ID(port));
}
@@ -1937,7 +1937,7 @@ void pd_request_vconn_swap_off(int port)
void pd_request_vconn_swap_on(int port)
{
if (get_state_tc(port) == TC_ATTACHED_SRC ||
- get_state_tc(port) == TC_ATTACHED_SNK) {
+ get_state_tc(port) == TC_ATTACHED_SNK) {
TC_SET_FLAG(port, TC_FLAGS_REQUEST_VC_SWAP_ON);
task_wake(PD_PORT_TO_TASK_ID(port));
}
@@ -2090,14 +2090,13 @@ static void sink_power_sub_states(int port)
tc[port].typec_curr = usb_get_typec_current_limit(
tc[port].polarity, cc1, cc2);
- typec_set_input_current_limit(port,
- tc[port].typec_curr, TYPE_C_VOLTAGE);
+ typec_set_input_current_limit(port, tc[port].typec_curr,
+ TYPE_C_VOLTAGE);
charge_manager_update_dualrole(port, CAP_DEDICATED);
}
}
}
-
/*
* TYPE-C State Implementations
*/
@@ -2117,6 +2116,7 @@ static void tc_disabled_entry(const int port)
* to indicate to pd_is_port_enabled that we are now suspended.
*/
TC_SET_FLAG(port, TC_FLAGS_SUSPENDED);
+ tcpm_release(port);
}
static void tc_disabled_run(const int port)
@@ -2124,13 +2124,16 @@ static void tc_disabled_run(const int port)
/* If pd_set_suspend clears the request, go to TC_UNATTACHED_SNK/SRC. */
if (!TC_CHK_FLAG(port, TC_FLAGS_REQUEST_SUSPEND)) {
set_state_tc(port, drp_state[port] == PD_DRP_FORCE_SOURCE ?
- TC_UNATTACHED_SRC : TC_UNATTACHED_SNK);
+ TC_UNATTACHED_SRC :
+ TC_UNATTACHED_SNK);
} else {
if (IS_ENABLED(CONFIG_USBC_RETIMER_FW_UPDATE)) {
- if (TC_CHK_FLAG(port,
- TC_FLAGS_USB_RETIMER_FW_UPDATE_LTD_RUN)) {
- TC_CLR_FLAG(port,
- TC_FLAGS_USB_RETIMER_FW_UPDATE_LTD_RUN);
+ if (TC_CHK_FLAG(
+ port,
+ TC_FLAGS_USB_RETIMER_FW_UPDATE_LTD_RUN)) {
+ TC_CLR_FLAG(
+ port,
+ TC_FLAGS_USB_RETIMER_FW_UPDATE_LTD_RUN);
usb_retimer_fw_update_process_op_cb(port);
}
}
@@ -2179,7 +2182,8 @@ static void tc_error_recovery_run(const int port)
*/
if (tc[port].ctx.previous == NULL) {
set_state_tc(port, drp_state[port] == PD_DRP_FORCE_SOURCE ?
- TC_UNATTACHED_SRC : TC_UNATTACHED_SNK);
+ TC_UNATTACHED_SRC :
+ TC_UNATTACHED_SNK);
return;
}
@@ -2230,11 +2234,10 @@ static void tc_unattached_snk_entry(const int port)
*/
tcpm_debug_detach(port);
typec_select_pull(port, TYPEC_CC_RD);
- typec_select_src_current_limit_rp(port,
- typec_get_default_current_limit_rp(port));
+ typec_select_src_current_limit_rp(
+ port, typec_get_default_current_limit_rp(port));
typec_update_cc(port);
-
prev_data_role = tc[port].data_role;
tc[port].data_role = PD_ROLE_DISCONNECTED;
/*
@@ -2256,10 +2259,11 @@ static void tc_unattached_snk_entry(const int port)
pd_execute_data_swap(port, PD_ROLE_DISCONNECTED);
pd_timer_enable(port, TC_TIMER_NEXT_ROLE_SWAP, PD_T_DRP_SNK);
- if (IS_ENABLED(CONFIG_USB_PE_SM)) {
- CLR_FLAGS_ON_DISCONNECT(port);
- tc_enable_pd(port, 0);
- }
+#ifdef CONFIG_USB_PE_SM
+ CLR_FLAGS_ON_DISCONNECT(port);
+ tc_enable_pd(port, 0);
+ tc[port].ps_reset_state = PS_STATE0;
+#endif
}
static void tc_unattached_snk_run(const int port)
@@ -2383,9 +2387,9 @@ static void tc_attach_wait_snk_run(const int port)
if (new_cc_state == PD_CC_NONE &&
pd_timer_is_expired(port, TC_TIMER_PD_DEBOUNCE)) {
/* We are detached */
- if (drp_state[port] == PD_DRP_TOGGLE_OFF
- || drp_state[port] == PD_DRP_FREEZE
- || drp_state[port] == PD_DRP_FORCE_SINK)
+ if (drp_state[port] == PD_DRP_TOGGLE_OFF ||
+ drp_state[port] == PD_DRP_FREEZE ||
+ drp_state[port] == PD_DRP_FORCE_SINK)
set_state_tc(port, TC_UNATTACHED_SNK);
else
set_state_tc(port, TC_UNATTACHED_SRC);
@@ -2425,9 +2429,9 @@ static void tc_attach_wait_snk_run(const int port)
}
if (IS_ENABLED(CONFIG_USB_PE_SM) &&
- IS_ENABLED(CONFIG_USB_PD_ALT_MODE_DFP)) {
+ IS_ENABLED(CONFIG_USB_PD_ALT_MODE_DFP)) {
hook_call_deferred(&pd_usb_billboard_deferred_data,
- PD_T_AME);
+ PD_T_AME);
}
}
}
@@ -2471,7 +2475,7 @@ static void tc_attached_snk_entry(const int port)
/* Change role to sink */
tc_set_power_role(port, PD_ROLE_SINK);
tcpm_set_msg_header(port, tc[port].power_role,
- tc[port].data_role);
+ tc[port].data_role);
/*
* Maintain VCONN supply state, whether ON or OFF, and its
@@ -2490,11 +2494,10 @@ static void tc_attached_snk_entry(const int port)
hook_notify(HOOK_USB_PD_CONNECT);
if (IS_ENABLED(CONFIG_CHARGE_MANAGER)) {
- tc[port].typec_curr =
- usb_get_typec_current_limit(tc[port].polarity,
- cc1, cc2);
- typec_set_input_current_limit(port,
- tc[port].typec_curr, TYPE_C_VOLTAGE);
+ tc[port].typec_curr = usb_get_typec_current_limit(
+ tc[port].polarity, cc1, cc2);
+ typec_set_input_current_limit(port, tc[port].typec_curr,
+ TYPE_C_VOLTAGE);
/*
* Start new connections as dedicated until source caps
* are received, at which point the PE will update the
@@ -2550,8 +2553,8 @@ static bool tc_snk_check_vbus_removed(const int port)
TC_TIMER_VBUS_DEBOUNCE)) {
pd_timer_enable(port, TC_TIMER_VBUS_DEBOUNCE,
PD_T_FRS_VBUS_DEBOUNCE);
- } else if (pd_timer_is_expired(port,
- TC_TIMER_VBUS_DEBOUNCE)) {
+ } else if (pd_timer_is_expired(
+ port, TC_TIMER_VBUS_DEBOUNCE)) {
set_state_tc(port, TC_UNATTACHED_SNK);
return true;
}
@@ -2658,8 +2661,9 @@ static void tc_attached_snk_run(const int port)
/* Perform Data Role Swap */
tc_set_data_role(port,
- tc[port].data_role == PD_ROLE_UFP ?
- PD_ROLE_DFP : PD_ROLE_UFP);
+ tc[port].data_role == PD_ROLE_UFP ?
+ PD_ROLE_DFP :
+ PD_ROLE_UFP);
}
/*
@@ -2787,8 +2791,8 @@ static void tc_unattached_src_entry(const int port)
*/
tcpm_debug_detach(port);
typec_select_pull(port, TYPEC_CC_RP);
- typec_select_src_current_limit_rp(port,
- typec_get_default_current_limit_rp(port));
+ typec_select_src_current_limit_rp(
+ port, typec_get_default_current_limit_rp(port));
typec_update_cc(port);
prev_data_role = tc[port].data_role;
@@ -2806,10 +2810,11 @@ static void tc_unattached_src_entry(const int port)
if (IS_ENABLED(CONFIG_CHARGE_MANAGER))
charge_manager_update_dualrole(port, CAP_UNKNOWN);
- if (IS_ENABLED(CONFIG_USB_PE_SM)) {
- CLR_FLAGS_ON_DISCONNECT(port);
- tc_enable_pd(port, 0);
- }
+#ifdef CONFIG_USB_PE_SM
+ CLR_FLAGS_ON_DISCONNECT(port);
+ tc_enable_pd(port, 0);
+ tc[port].ps_reset_state = PS_STATE0;
+#endif
pd_timer_enable(port, TC_TIMER_NEXT_ROLE_SWAP, PD_T_DRP_SRC);
}
@@ -2983,9 +2988,8 @@ static void tc_attached_src_entry(const int port)
if (TC_CHK_FLAG(port, TC_FLAGS_PR_SWAP_IN_PROGRESS)) {
/* Change role to source */
tc_set_power_role(port, PD_ROLE_SOURCE);
- tcpm_set_msg_header(port,
- tc[port].power_role,
- tc[port].data_role);
+ tcpm_set_msg_header(port, tc[port].power_role,
+ tc[port].data_role);
/* Enable VBUS */
tc_src_power_on(port);
@@ -3040,10 +3044,9 @@ static void tc_attached_src_entry(const int port)
set_vconn(port, 0);
if (IS_ENABLED(CONFIG_USBC_SS_MUX))
- usb_mux_set(port,
- USB_PD_MUX_NONE,
- USB_SWITCH_DISCONNECT,
- tc[port].polarity);
+ usb_mux_set(port, USB_PD_MUX_NONE,
+ USB_SWITCH_DISCONNECT,
+ tc[port].polarity);
}
tc_enable_pd(port, 0);
@@ -3093,7 +3096,8 @@ static void tc_attached_src_entry(const int port)
if (IS_ENABLED(CONFIG_USBC_SS_MUX))
usb_mux_set(port, USB_PD_MUX_NONE,
- USB_SWITCH_DISCONNECT, tc[port].polarity);
+ USB_SWITCH_DISCONNECT,
+ tc[port].polarity);
}
}
@@ -3161,13 +3165,13 @@ static void tc_attached_src_run(const int port)
if (IS_ENABLED(CONFIG_USB_PD_TRY_SRC))
tryWait = is_try_src_enabled(port) &&
- !TC_CHK_FLAG(port, TC_FLAGS_TS_DTS_PARTNER);
+ !TC_CHK_FLAG(port, TC_FLAGS_TS_DTS_PARTNER);
if (drp_state[port] == PD_DRP_FORCE_SOURCE)
new_tc_state = TC_UNATTACHED_SRC;
- else if(IS_ENABLED(CONFIG_USB_PD_TRY_SRC))
- new_tc_state = tryWait ?
- TC_TRY_WAIT_SNK : TC_UNATTACHED_SNK;
+ else if (IS_ENABLED(CONFIG_USB_PD_TRY_SRC))
+ new_tc_state = tryWait ? TC_TRY_WAIT_SNK :
+ TC_UNATTACHED_SNK;
set_state_tc(port, new_tc_state);
return;
@@ -3221,8 +3225,9 @@ static void tc_attached_src_run(const int port)
/* Perform Data Role Swap */
tc_set_data_role(port,
- tc[port].data_role == PD_ROLE_DFP ?
- PD_ROLE_UFP : PD_ROLE_DFP);
+ tc[port].data_role == PD_ROLE_DFP ?
+ PD_ROLE_UFP :
+ PD_ROLE_DFP);
}
/*
@@ -3230,7 +3235,7 @@ static void tc_attached_src_run(const int port)
* UnorientedDebugAccessory.SRC shall not drive Vconn
*/
if (IS_ENABLED(CONFIG_USBC_VCONN) &&
- !TC_CHK_FLAG(port, TC_FLAGS_TS_DTS_PARTNER)) {
+ !TC_CHK_FLAG(port, TC_FLAGS_TS_DTS_PARTNER)) {
/*
* VCONN Swap Request
*/
@@ -3239,7 +3244,7 @@ static void tc_attached_src_run(const int port)
set_vconn(port, 1);
pe_vconn_swap_complete(port);
} else if (TC_CHK_FLAG(port,
- TC_FLAGS_REQUEST_VC_SWAP_OFF)) {
+ TC_FLAGS_REQUEST_VC_SWAP_OFF)) {
TC_CLR_FLAG(port, TC_FLAGS_REQUEST_VC_SWAP_OFF);
set_vconn(port, 0);
pe_vconn_swap_complete(port);
@@ -3265,8 +3270,7 @@ static void tc_attached_src_run(const int port)
* applied.
*/
if (!TC_CHK_FLAG(port, TC_FLAGS_TS_DTS_PARTNER) &&
- TC_CHK_FLAG(port, TC_FLAGS_CTVPD_DETECTED)) {
-
+ TC_CHK_FLAG(port, TC_FLAGS_CTVPD_DETECTED)) {
set_state_tc(port, TC_CT_UNATTACHED_SNK);
}
}
@@ -3274,13 +3278,13 @@ static void tc_attached_src_run(const int port)
if (TC_CHK_FLAG(port, TC_FLAGS_UPDATE_CURRENT)) {
TC_CLR_FLAG(port, TC_FLAGS_UPDATE_CURRENT);
- typec_set_source_current_limit(port,
- tc[port].select_current_limit_rp);
+ typec_set_source_current_limit(
+ port, tc[port].select_current_limit_rp);
pd_update_contract(port);
/* Update Rp if no contract is present */
if (!IS_ENABLED(CONFIG_USB_PE_SM) ||
- !pe_is_explicit_contract(port))
+ !pe_is_explicit_contract(port))
typec_update_cc(port);
}
}
@@ -3302,7 +3306,7 @@ static void tc_attached_src_exit(const int port)
* a CTVPD was not detected
*/
if (TC_CHK_FLAG(port, TC_FLAGS_VCONN_ON) &&
- !TC_CHK_FLAG(port, TC_FLAGS_CTVPD_DETECTED))
+ !TC_CHK_FLAG(port, TC_FLAGS_CTVPD_DETECTED))
set_vconn(port, 0);
}
@@ -3332,14 +3336,14 @@ static __maybe_unused void check_drp_connection(const int port)
tc[port].drp_sink_time = get_time().val;
/* Get the next toggle state */
- next_state = drp_auto_toggle_next_state(&tc[port].drp_sink_time,
- tc[port].power_role, drp_state[port], cc1, cc2,
- tcpm_auto_toggle_supported(port));
+ next_state = drp_auto_toggle_next_state(
+ &tc[port].drp_sink_time, tc[port].power_role, drp_state[port],
+ cc1, cc2, tcpm_auto_toggle_supported(port));
if (next_state == DRP_TC_DEFAULT)
- next_state = (PD_ROLE_DEFAULT(port) == PD_ROLE_SOURCE)
- ? DRP_TC_UNATTACHED_SRC
- : DRP_TC_UNATTACHED_SNK;
+ next_state = (PD_ROLE_DEFAULT(port) == PD_ROLE_SOURCE) ?
+ DRP_TC_UNATTACHED_SRC :
+ DRP_TC_UNATTACHED_SNK;
switch (next_state) {
case DRP_TC_UNATTACHED_SNK:
@@ -3491,8 +3495,8 @@ static void tc_try_src_entry(const int port)
*/
typec_select_pull(port, TYPEC_CC_RP);
- typec_select_src_current_limit_rp(port,
- typec_get_default_current_limit_rp(port));
+ typec_select_src_current_limit_rp(
+ port, typec_get_default_current_limit_rp(port));
/* Apply Rp */
typec_update_cc(port);
@@ -3507,7 +3511,7 @@ static void tc_try_src_run(const int port)
tcpm_get_cc(port, &cc1, &cc2);
if ((cc1 == TYPEC_CC_VOLT_RD && cc2 != TYPEC_CC_VOLT_RD) ||
- (cc1 != TYPEC_CC_VOLT_RD && cc2 == TYPEC_CC_VOLT_RD))
+ (cc1 != TYPEC_CC_VOLT_RD && cc2 == TYPEC_CC_VOLT_RD))
new_cc_state = PD_CC_UFP_ATTACHED;
else
new_cc_state = PD_CC_NONE;
@@ -3801,7 +3805,6 @@ static void tc_cc_rd_entry(const int port)
tcpm_set_msg_header(port, tc[port].power_role, tc[port].data_role);
}
-
/**
* Super State CC_RP
*/
@@ -3887,8 +3890,8 @@ void tc_run(const int port)
* If pd_set_suspend set TC_FLAGS_REQUEST_SUSPEND, go directly to
* TC_DISABLED.
*/
- if (get_state_tc(port) != TC_DISABLED
- && TC_CHK_FLAG(port, TC_FLAGS_REQUEST_SUSPEND)) {
+ if (get_state_tc(port) != TC_DISABLED &&
+ TC_CHK_FLAG(port, TC_FLAGS_REQUEST_SUSPEND)) {
/* Invalidate a contract, if there is one */
if (IS_ENABLED(CONFIG_USB_PE_SM))
pe_invalidate_explicit_contract(port);
@@ -3918,17 +3921,16 @@ static void pd_chipset_resume(void)
int i;
for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
- if(IS_ENABLED(CONFIG_USB_PE_SM))
+ if (IS_ENABLED(CONFIG_USB_PE_SM))
pd_resume_check_pr_swap_needed(i);
- pd_set_dual_role_and_event(i,
- pd_get_drp_state_in_s0(),
- PD_EVENT_UPDATE_DUAL_ROLE
- | PD_EVENT_POWER_STATE_CHANGE);
+ pd_set_dual_role_and_event(i, pd_get_drp_state_in_s0(),
+ PD_EVENT_UPDATE_DUAL_ROLE |
+ PD_EVENT_POWER_STATE_CHANGE);
if (tc[i].data_role == PD_ROLE_DFP) {
pd_send_alert_msg(i, ADO_EXTENDED_ALERT_EVENT |
- ADO_POWER_STATE_CHANGE);
+ ADO_POWER_STATE_CHANGE);
}
}
@@ -3941,14 +3943,13 @@ static void pd_chipset_suspend(void)
int i;
for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
- pd_set_dual_role_and_event(i,
- pd_get_drp_state_in_suspend(),
- PD_EVENT_UPDATE_DUAL_ROLE
- | PD_EVENT_POWER_STATE_CHANGE);
+ pd_set_dual_role_and_event(i, pd_get_drp_state_in_suspend(),
+ PD_EVENT_UPDATE_DUAL_ROLE |
+ PD_EVENT_POWER_STATE_CHANGE);
if (tc[i].data_role == PD_ROLE_DFP) {
pd_send_alert_msg(i, ADO_EXTENDED_ALERT_EVENT |
- ADO_POWER_STATE_CHANGE);
+ ADO_POWER_STATE_CHANGE);
}
}
@@ -3974,12 +3975,15 @@ static void pd_chipset_reset(void)
* kernel knows to consume discovery information for them.
*/
for (tx = TCPCI_MSG_SOP; tx <= TCPCI_MSG_SOP_PRIME; tx++) {
- if (pd_get_identity_discovery(i, tx) != PD_DISC_NEEDED
- && pd_get_svids_discovery(i, tx) != PD_DISC_NEEDED
- && pd_get_modes_discovery(i, tx) != PD_DISC_NEEDED)
- pd_notify_event(i, tx == TCPCI_MSG_SOP ?
- PD_STATUS_EVENT_SOP_DISC_DONE :
- PD_STATUS_EVENT_SOP_PRIME_DISC_DONE);
+ if (pd_get_identity_discovery(i, tx) !=
+ PD_DISC_NEEDED &&
+ pd_get_svids_discovery(i, tx) != PD_DISC_NEEDED &&
+ pd_get_modes_discovery(i, tx) != PD_DISC_NEEDED)
+ pd_notify_event(
+ i,
+ tx == TCPCI_MSG_SOP ?
+ PD_STATUS_EVENT_SOP_DISC_DONE :
+ PD_STATUS_EVENT_SOP_PRIME_DISC_DONE);
}
/* Exit mode so AP can enter mode again after reset */
@@ -3995,10 +3999,9 @@ static void pd_chipset_startup(void)
for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
TC_SET_FLAG(i, TC_FLAGS_UPDATE_USB_MUX);
- pd_set_dual_role_and_event(i,
- pd_get_drp_state_in_suspend(),
- PD_EVENT_UPDATE_DUAL_ROLE
- | PD_EVENT_POWER_STATE_CHANGE);
+ pd_set_dual_role_and_event(i, pd_get_drp_state_in_suspend(),
+ PD_EVENT_UPDATE_DUAL_ROLE |
+ PD_EVENT_POWER_STATE_CHANGE);
/*
* Request port discovery to restore any
* alt modes.
@@ -4010,7 +4013,7 @@ static void pd_chipset_startup(void)
if (tc[i].data_role == PD_ROLE_DFP) {
pd_send_alert_msg(i, ADO_EXTENDED_ALERT_EVENT |
- ADO_POWER_STATE_CHANGE);
+ ADO_POWER_STATE_CHANGE);
}
}
@@ -4024,14 +4027,13 @@ static void pd_chipset_shutdown(void)
for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
TC_SET_FLAG(i, TC_FLAGS_UPDATE_USB_MUX);
- pd_set_dual_role_and_event(i,
- PD_DRP_FORCE_SINK,
- PD_EVENT_UPDATE_DUAL_ROLE
- | PD_EVENT_POWER_STATE_CHANGE);
+ pd_set_dual_role_and_event(i, PD_DRP_FORCE_SINK,
+ PD_EVENT_UPDATE_DUAL_ROLE |
+ PD_EVENT_POWER_STATE_CHANGE);
if (tc[i].data_role == PD_ROLE_DFP) {
pd_send_alert_msg(i, ADO_EXTENDED_ALERT_EVENT |
- ADO_POWER_STATE_CHANGE);
+ ADO_POWER_STATE_CHANGE);
}
}