usb_c: Properly handle Protocol Errors during DRS
From 8.3.3.4.2.1 PE_SNK_Send_Soft_Reset State, Error Recovery should be performed if a Protocol Error happens during a Data Role Swap. Signed-off-by: Sam Hurst <sbh1187@gmail.com>
This commit is contained in:
parent
c27a3a31d3
commit
24e18d46f1
1 changed files with 8 additions and 3 deletions
|
@ -680,11 +680,16 @@ void pe_drs_send_swap_run(void *obj)
|
||||||
policy_notify(dev, (pe->data_role == TC_ROLE_UFP) ? DATA_ROLE_IS_UFP
|
policy_notify(dev, (pe->data_role == TC_ROLE_UFP) ? DATA_ROLE_IS_UFP
|
||||||
: DATA_ROLE_IS_DFP);
|
: DATA_ROLE_IS_DFP);
|
||||||
} else {
|
} else {
|
||||||
/* Protocol Error */
|
/*
|
||||||
policy_notify(dev, PROTOCOL_ERROR);
|
* A Protocol Error during a Data Role Swap when the
|
||||||
pe_send_soft_reset(dev, PD_PACKET_SOP);
|
* DFP/UFP roles are changing shall directly trigger
|
||||||
|
* a Type-C Error Recovery.
|
||||||
|
*/
|
||||||
|
usbc_request(dev, REQUEST_TC_ERROR_RECOVERY);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return to ready state */
|
||||||
pe_set_state(dev, PE_SNK_READY);
|
pe_set_state(dev, PE_SNK_READY);
|
||||||
return;
|
return;
|
||||||
} else if (atomic_test_and_clear_bit(pe->flags, PE_FLAGS_MSG_DISCARDED)) {
|
} else if (atomic_test_and_clear_bit(pe->flags, PE_FLAGS_MSG_DISCARDED)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue