@@ -19,6 +19,20 @@ LOG_MODULE_DECLARE(usbc_stack, CONFIG_USBC_STACK_LOG_LEVEL);
19
19
20
20
static const struct smf_state pe_states [PE_STATE_COUNT ];
21
21
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
+
22
36
/**
23
37
* @brief Handle common DPM requests
24
38
*
@@ -315,7 +329,7 @@ void pe_report_error(const struct device *dev, const enum pe_error e,
315
329
* Error during an Interruptible AMS.
316
330
*/
317
331
else {
318
- pe_set_state (dev , PE_SNK_READY );
332
+ pe_set_ready_state (dev );
319
333
}
320
334
}
321
335
@@ -775,7 +789,7 @@ static void pe_drs_evaluate_swap_run(void *obj)
775
789
policy_notify (dev , (pe -> data_role == TC_ROLE_UFP ) ? DATA_ROLE_IS_UFP
776
790
: DATA_ROLE_IS_DFP );
777
791
}
778
- pe_set_state (dev , PE_SNK_READY );
792
+ pe_set_ready_state (dev );
779
793
} else if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
780
794
/*
781
795
* Inform Device Policy Manager that the message was
@@ -848,15 +862,15 @@ static void pe_drs_send_swap_run(void *obj)
848
862
}
849
863
850
864
/* return to ready state */
851
- pe_set_state (dev , PE_SNK_READY );
865
+ pe_set_ready_state (dev );
852
866
return ;
853
867
} else if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
854
868
/*
855
869
* Inform Device Policy Manager that the message
856
870
* was discarded
857
871
*/
858
872
policy_notify (dev , MSG_DISCARDED );
859
- pe_set_state (dev , PE_SNK_READY );
873
+ pe_set_ready_state (dev );
860
874
return ;
861
875
}
862
876
}
@@ -912,19 +926,13 @@ void pe_get_sink_cap_run(void *obj)
912
926
PD_CONVERT_BYTES_TO_PD_HEADER_COUNT (prl_rx -> emsg .len );
913
927
914
928
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 );
918
929
#endif
930
+ pe_set_ready_state (dev );
919
931
return ;
920
932
} else if (received_control_message (dev , header , PD_CTRL_REJECT ) ||
921
933
received_control_message (dev ,
922
934
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 );
928
936
return ;
929
937
}
930
938
/* Unexpected messages fall through to soft reset */
@@ -938,7 +946,7 @@ void pe_get_sink_cap_run(void *obj)
938
946
*/
939
947
else if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
940
948
policy_notify (dev , MSG_DISCARDED );
941
- pe_set_state (dev , PE_SNK_READY );
949
+ pe_set_ready_state (dev );
942
950
return ;
943
951
}
944
952
}
@@ -1057,7 +1065,7 @@ static void pe_send_soft_reset_run(void *obj)
1057
1065
if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
1058
1066
/* Inform Device Policy Manager that the message was discarded */
1059
1067
policy_notify (dev , MSG_DISCARDED );
1060
- pe_set_state (dev , PE_SNK_READY );
1068
+ pe_set_ready_state (dev );
1061
1069
} else if (atomic_test_and_clear_bit (pe -> flags , PE_FLAGS_MSG_RECEIVED )) {
1062
1070
/*
1063
1071
* 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)
1109
1117
atomic_test_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED )) {
1110
1118
atomic_clear_bit (pe -> flags , PE_FLAGS_TX_COMPLETE );
1111
1119
atomic_clear_bit (pe -> flags , PE_FLAGS_MSG_DISCARDED );
1112
- pe_set_state (dev , PE_SNK_READY );
1120
+ pe_set_ready_state (dev );
1113
1121
}
1114
1122
}
1115
1123
0 commit comments