summaryrefslogtreecommitdiff
path: root/util/genvif.c
diff options
context:
space:
mode:
authorDenis Brockus <dbrockus@google.com>2020-11-25 12:55:30 -0700
committerCommit Bot <commit-bot@chromium.org>2020-11-26 18:14:29 +0000
commitb8db14be52239dae79af204fc6679e5895bc5f2f (patch)
tree6f883fe0d9ed929084b3c3529155a9547f212b35 /util/genvif.c
parent4f4ef79f123f86c5cdc3afc765c970a8f4dd45c7 (diff)
downloadchrome-ec-b8db14be52239dae79af204fc6679e5895bc5f2f.tar.gz
genvif: DR_Swap_To_UFP_Supported cleanup
BUG=b:172422651 BRANCH=none TEST=verify XML output Signed-off-by: Denis Brockus <dbrockus@google.com> Change-Id: I5216784a634d89ac1cbb47e4577762d907d8903a Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2560612 Tested-by: Denis Brockus <dbrockus@chromium.org> Reviewed-by: Denis Brockus <dbrockus@chromium.org> Commit-Queue: Denis Brockus <dbrockus@chromium.org> Auto-Submit: Denis Brockus <dbrockus@chromium.org>
Diffstat (limited to 'util/genvif.c')
-rw-r--r--util/genvif.c63
1 files changed, 42 insertions, 21 deletions
diff --git a/util/genvif.c b/util/genvif.c
index 2bd9d4e153..12d21c9261 100644
--- a/util/genvif.c
+++ b/util/genvif.c
@@ -678,6 +678,13 @@ static bool is_usb_comms_capable(void)
IS_ENABLED(CONFIG_USB_CTVPD))));
}
+static bool is_alt_mode_controller(void)
+{
+ return get_vif_bool(&vif.Component[component_index]
+ .vif_field[Type_C_Is_Alt_Mode_Controller],
+ IS_ENABLED(CONFIG_USB_PD_ALT_MODE_DFP));
+}
+
static bool does_respond_to_discov_sop_ufp(void)
{
return get_vif_bool(&vif.Component[component_index]
@@ -2770,28 +2777,42 @@ static void init_vif_component_general_pd_fields(
supports_to_dfp);
}
+ /*
+ * DR_Swap_To_UFP_Supported
+ *
+ * Set to YES if Qualifying Product can respond with an Accept to a
+ * DR_Swap request to switch from a DFP to a UFP.
+ *
+ * If Type_C_State_Machine is set to DRP and Type_C_Can_Act_As_Device
+ * is set to YES and Type_C_Can_Act_As_Host is set to NO then this
+ * field shall be set to YES.
+ *
+ * If Type_C_State_Machine is set to SNK and either
+ * Type_C_Can_Act_As_Host or Type_C_Is_Alt_Mode_Controller is set to
+ * YES, then this field shall be set to YES.
+ *
+ * If Type_C_State_Machine is set to SRC and Type_C_Can_Act_As_Device
+ * is set to YES, then this field shall be set to YES.
+ *
+ * If VIF_Product_Type is set to 1 (Cable) or PD_Port_Type is set to
+ * 5 (eMarker) then this field shall be ignored by Testers.
+ */
{
- bool supports_to_ufp = true;
-
- if (type == DRP || type == SRC)
- /*
- * DR_Swap_To_UFP_Supported requires
- * Type_C_Can_Act_As_Device to be YES
- */
- supports_to_ufp &= can_act_as_device();
+ bool supports_to_ufp;
- if (type == DRP)
- /*
- * DR_Swap_To_UFP_Supported requires
- * Type_C_Can_Act_As_Host to be NO
- */
- supports_to_ufp &= !can_act_as_host();
- else if (type == SNK)
- /*
- * DR_Swap_To_DFP_Supported requires
- * Type_C_Can_Act_As_Host to be YES
- */
- supports_to_ufp &= can_act_as_host();
+ switch (type) {
+ case SRC:
+ supports_to_ufp = can_act_as_device();
+ break;
+ case SNK:
+ supports_to_ufp = (can_act_as_host() ||
+ is_alt_mode_controller());
+ break;
+ case DRP:
+ supports_to_ufp = (can_act_as_device() &&
+ !can_act_as_host());
+ break;
+ }
set_vif_field_b(&vif_fields[DR_Swap_To_UFP_Supported],
vif_component_name[DR_Swap_To_UFP_Supported],
@@ -3010,7 +3031,7 @@ static void init_vif_component_usb_type_c_fields(
set_vif_field_b(&vif_fields[Type_C_Is_Alt_Mode_Controller],
vif_component_name[Type_C_Is_Alt_Mode_Controller],
- IS_ENABLED(CONFIG_USB_PD_ALT_MODE_DFP));
+ is_alt_mode_controller());
if (can_act_as_device()) {
set_vif_field_b(&vif_fields[Type_C_Can_Act_As_Device],