usb: pd: Add delay before sending Source Capabilities
The PD specification defines tFirstSourceCap as the time before a source must send its first Source_Capabilities message and allows this to be up to 250ms. This is advantageous for cases in which a sink partner is quickly detached (or possibly even attempting Try.SRC) just after VBUS is turned on and the unnecessary PD messaging causes the HW to fail to detect the detach condition right away. Add a delay of 200ms during the transition from PE_SRC_STARTUP to PE_SRC_SEND_CAPABILITIES. Change-Id: I13dd31d71b8b93adadb70b113cba28ce5aed6e4e Signed-off-by: Jack Pham <jackp@codeaurora.org>
This commit is contained in:
parent
0f6cf457b2
commit
ca88ca45eb
1 changed files with 15 additions and 5 deletions
|
@ -182,7 +182,7 @@ static void *usbpd_ipc_log;
|
|||
#define PS_HARD_RESET_TIME 25
|
||||
#define PS_SOURCE_ON 400
|
||||
#define PS_SOURCE_OFF 750
|
||||
#define SWAP_SOURCE_START_TIME 20
|
||||
#define FIRST_SOURCE_CAP_TIME 200
|
||||
#define VDM_BUSY_TIME 50
|
||||
#define VCONN_ON_TIME 100
|
||||
|
||||
|
@ -790,17 +790,27 @@ static void usbpd_set_state(struct usbpd *pd, enum usbpd_state next_state)
|
|||
pd->pd_phy_opened = true;
|
||||
}
|
||||
|
||||
pd->current_state = PE_SRC_SEND_CAPABILITIES;
|
||||
if (pd->in_pr_swap) {
|
||||
kick_sm(pd, SWAP_SOURCE_START_TIME);
|
||||
pd->in_pr_swap = false;
|
||||
val.intval = 0;
|
||||
power_supply_set_property(pd->usb_psy,
|
||||
POWER_SUPPLY_PROP_PR_SWAP, &val);
|
||||
break;
|
||||
}
|
||||
|
||||
/* fall-through */
|
||||
/*
|
||||
* A sink might remove its terminations (during some Type-C
|
||||
* compliance tests or a sink attempting to do Try.SRC)
|
||||
* at this point just after we enabled VBUS. Sending PD
|
||||
* messages now would delay detecting the detach beyond the
|
||||
* required timing. Instead, delay sending out the first
|
||||
* source capabilities to allow for the other side to
|
||||
* completely settle CC debounce and allow HW to detect detach
|
||||
* sooner in the meantime. PD spec allows up to
|
||||
* tFirstSourceCap (250ms).
|
||||
*/
|
||||
pd->current_state = PE_SRC_SEND_CAPABILITIES;
|
||||
kick_sm(pd, FIRST_SOURCE_CAP_TIME);
|
||||
break;
|
||||
|
||||
case PE_SRC_SEND_CAPABILITIES:
|
||||
kick_sm(pd, 0);
|
||||
|
|
Loading…
Add table
Reference in a new issue