mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-10 17:41:54 +00:00
pd: support for dual-role port
Add support for toggling between source and sink as dual-role port. When transitioning to S0, we turn toggling on, when transitioning to S3, we turn toggling off but remain in the same PD state, and when transitioning to S5, we turn toggling off and force the PD role to a sink. Note, when toggling is off, the source disconnected state is allowed to transition to sink disconnected, but not vice versa. This means that if you go into S3 as a source, it will remain a source until the device is unplugged, at which point it will transition to a sink until the next transition to S0. The spec specifies: tDRP: 50ms - 100ms, Period a DRP shall complete a DFP to UFP and back dcDRP: 30% - 70%, Percent of time that a DRP shall advertise DFP tDRPHold: 100ms - 150ms, time to hold VBUS on after a DRP detects a UFP tDRPLock: 100ms - 150ms, time to stay in DFP after detecting loss of UFP This CL uses 40ms for time as a UFP (sink), 30ms for time as a DFP (source), and 120ms for hold and lock times. Also, if advertising as a DFP (source) and VBUS is detected, this automatically switches to a UFP (sink). BUG=chrome-os-partner:28782 BRANCH=none TEST=test on samus, make sure we are toggling between source and sink when disconnected. make sure plugging in zinger switches state machine through to sink_ready and make sure plugging in a USB switches to source_discovery. tested on a fruitpie by scoping the CC line and verifying the timing (except the hold time which I can't easily test). tested that dual role toggling is off in s3 and s5. also verified that going into s3 as a source keeps the port as a source and going into s5 switches it to a sink. Change-Id: I478634861f694164301d71359da35142ee7ebf75 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/207154 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
This commit is contained in:
committed by
chrome-internal-fetch
parent
32e4f212b1
commit
8e29d9c2e8
@@ -132,6 +132,23 @@ enum pd_errors {
|
||||
/* USB Vendor ID assigned to Google Inc. */
|
||||
#define USB_VID_GOOGLE 0x18d1
|
||||
|
||||
/* --- Protocol layer functions --- */
|
||||
|
||||
#ifdef CONFIG_USB_PD_DUAL_ROLE
|
||||
enum pd_dual_role_states {
|
||||
PD_DRP_TOGGLE_ON,
|
||||
PD_DRP_TOGGLE_OFF,
|
||||
PD_DRP_FORCE_SINK
|
||||
};
|
||||
/**
|
||||
* Set dual role state, from among enum pd_dual_role_states
|
||||
*
|
||||
* @param dr_state New state of dual-role port, selected from
|
||||
* enum pd_dual_role_states
|
||||
*/
|
||||
void pd_set_dual_role(enum pd_dual_role_states dr_state);
|
||||
#endif
|
||||
|
||||
/* --- Policy layer functions --- */
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user