@@ -19,6 +19,20 @@ LOG_MODULE_DECLARE(usbc_stack, CONFIG_USBC_STACK_LOG_LEVEL);
1919
2020static const struct smf_state pe_states [PE_STATE_COUNT ];
2121
22+ /**
23+ * @brief Set the ready state for sink or source.
24+ */
25+ static void pe_set_ready_state (const struct device * dev )
26+ {
27+ struct usbc_port_data * data = dev -> data ;
28+
29+ if (data -> pe -> power_role == TC_ROLE_SOURCE ) {
30+ pe_set_state (dev , PE_SRC_READY );
31+ } else {
32+ pe_set_state (dev , PE_SNK_READY );
33+ }
34+ }
35+
2236/**
2337 * @brief Handle common DPM requests
2438 *
@@ -315,7 +329,7 @@ void pe_report_error(const struct device *dev, const enum pe_error e,
315329 * Error during an Interruptible AMS.
316330 */
317331 else {
318- pe_set_state (dev , PE_SNK_READY );
332+ pe_set_ready_state (dev );
319333 }
320334}
321335
@@ -775,7 +789,7 @@ static void pe_drs_evaluate_swap_run(void *obj)
775789 policy_notify (dev , (pe -> data_role == TC_ROLE_UFP ) ? DATA_ROLE_IS_UFP
776790 : DATA_ROLE_IS_DFP );
777791 }
778- pe_set_state (dev , PE_SNK_READY );
792+ pe_set_ready_state (dev );
779793 } else if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
780794 /*
781795 * Inform Device Policy Manager that the message was
@@ -848,15 +862,15 @@ static void pe_drs_send_swap_run(void *obj)
848862 }
849863
850864 /* return to ready state */
851- pe_set_state (dev , PE_SNK_READY );
865+ pe_set_ready_state (dev );
852866 return ;
853867 } else if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
854868 /*
855869 * Inform Device Policy Manager that the message
856870 * was discarded
857871 */
858872 policy_notify (dev , MSG_DISCARDED );
859- pe_set_state (dev , PE_SNK_READY );
873+ pe_set_ready_state (dev );
860874 return ;
861875 }
862876}
@@ -912,19 +926,13 @@ void pe_get_sink_cap_run(void *obj)
912926 PD_CONVERT_BYTES_TO_PD_HEADER_COUNT (prl_rx -> emsg .len );
913927
914928 policy_set_port_partner_snk_cap (dev , pdos , num_pdos );
915- pe_set_state (dev , PE_SRC_READY );
916- #else
917- pe_set_state (dev , PE_SNK_READY );
918929#endif
930+ pe_set_ready_state (dev );
919931 return ;
920932 } else if (received_control_message (dev , header , PD_CTRL_REJECT ) ||
921933 received_control_message (dev ,
922934 header , PD_CTRL_NOT_SUPPORTED )) {
923- #ifdef CONFIG_USBC_CSM_SOURCE_ONLY
924- pe_set_state (dev , PE_SRC_READY );
925- #else
926- pe_set_state (dev , PE_SNK_READY );
927- #endif
935+ pe_set_ready_state (dev );
928936 return ;
929937 }
930938 /* Unexpected messages fall through to soft reset */
@@ -938,7 +946,7 @@ void pe_get_sink_cap_run(void *obj)
938946 */
939947 else if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
940948 policy_notify (dev , MSG_DISCARDED );
941- pe_set_state (dev , PE_SNK_READY );
949+ pe_set_ready_state (dev );
942950 return ;
943951 }
944952 }
@@ -1057,7 +1065,7 @@ static void pe_send_soft_reset_run(void *obj)
10571065 if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
10581066 /* Inform Device Policy Manager that the message was discarded */
10591067 policy_notify (dev , MSG_DISCARDED );
1060- pe_set_state (dev , PE_SNK_READY );
1068+ pe_set_ready_state (dev );
10611069 } else if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_RECEIVED )) {
10621070 /*
10631071 * The Policy Engine Shall transition to the PE_SNK_Wait_for_Capabilities
@@ -1109,7 +1117,7 @@ static void pe_send_not_supported_run(void *obj)
11091117 atomic_test_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
11101118 atomic_clear_bit (pe -> flags , PE_FLAGS_TX_COMPLETE );
11111119 atomic_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED );
1112- pe_set_state (dev , PE_SNK_READY );
1120+ pe_set_ready_state (dev );
11131121 }
11141122}
11151123
0 commit comments