usb-c: add PE_SRC_Disabled support.

with this fix the pd stack works with type-c devices that does not
respond to pd.

Signed-off-by: Johan Carlsson <johan.carlsson@teenage.engineering>
This commit is contained in:
Johan Carlsson 2024-10-24 11:06:29 +02:00 committed by Benjamin Cabé
commit 9b021bc8e1
4 changed files with 32 additions and 3 deletions

View file

@ -1371,6 +1371,12 @@ static const struct smf_state pe_states[PE_STATE_COUNT] = {
pe_src_ready_exit,
NULL,
NULL),
[PE_SRC_DISABLED] = SMF_CREATE_STATE(
pe_src_disabled_entry,
NULL,
NULL,
NULL,
NULL),
[PE_SRC_TRANSITION_TO_DEFAULT] = SMF_CREATE_STATE(
pe_src_transition_to_default_entry,
pe_src_transition_to_default_run,

View file

@ -83,6 +83,8 @@ enum usbc_pe_state {
PE_SRC_TRANSITION_SUPPLY,
/** PE_SRC_Ready */
PE_SRC_READY,
/** PE_SRC_Disabled */
PE_SRC_DISABLED,
/** PE_SRC_Hard_Reset */
PE_SRC_HARD_RESET,
/** PE_SRC_Hard_Reset_Received */

View file

@ -154,9 +154,12 @@ void pe_src_discovery_run(void *obj)
* 1) The SourceCapabilityTimer times out
* 2) And CapsCounter nCapsCount
*/
if (usbc_timer_expired(&pe->pd_t_typec_send_source_cap)
&& pe->caps_counter <= PD_N_CAPS_COUNT) {
pe_set_state(dev, PE_SRC_SEND_CAPABILITIES);
if (usbc_timer_expired(&pe->pd_t_typec_send_source_cap)) {
if (pe->caps_counter <= PD_N_CAPS_COUNT) {
pe_set_state(dev, PE_SRC_SEND_CAPABILITIES);
} else {
pe_set_state(dev, PE_SRC_DISABLED);
}
}
}
@ -483,6 +486,19 @@ void pe_src_ready_exit(void *obj)
}
}
/**
* @brief 8.3.3.2.7 PE_SRC_Disabled State
*/
void pe_src_disabled_entry(void *obj)
{
LOG_INF("PE_SRC_Disabled");
/*
* Unresponsive to USB Power Delivery messaging, but not to Hard Reset
* Signaling. See pe_got_hard_reset
*/
}
/**
* @brief 8.3.3.2.11 PE_SRC_Transition_to_default State
*/

View file

@ -57,6 +57,11 @@ void pe_src_ready_entry(void *obj);
void pe_src_ready_run(void *obj);
void pe_src_ready_exit(void *obj);
/**
* @brief PE_SRC_Disabled State
*/
void pe_src_disabled_entry(void *obj);
/**
* @brief PE_SRC_Transition_To_Default State
*/