summaryrefslogtreecommitdiff
path: root/driver/usb_mux/virtual.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/usb_mux/virtual.c')
-rw-r--r--driver/usb_mux/virtual.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/driver/usb_mux/virtual.c b/driver/usb_mux/virtual.c
index 4388bb485a..23987fd676 100644
--- a/driver/usb_mux/virtual.c
+++ b/driver/usb_mux/virtual.c
@@ -55,16 +55,10 @@ static inline void virtual_mux_update_state(int port, mux_state_t mux_state,
* TCSS Mux to allow better synchronization between them and thereby
* remain in the same state for achieving proper safe state
* terminations.
+ *
+ * Note the AP will only ACK if the mux state changed in some way.
*/
-
- /* TODO(b/186777984): Wait for an ACK for all mux state change */
-
- if ((!(previous_mux_state & USB_PD_MUX_SAFE_MODE) &&
- (mux_state & USB_PD_MUX_SAFE_MODE)) ||
- ((previous_mux_state & USB_PD_MUX_SAFE_MODE) &&
- !(mux_state & USB_PD_MUX_SAFE_MODE)) ||
- ((previous_mux_state != USB_PD_MUX_NONE) &&
- (mux_state == USB_PD_MUX_NONE)))
+ if (previous_mux_state != mux_state)
*ack_required = true;
}
@@ -112,17 +106,16 @@ static int virtual_get_mux(const struct usb_mux *me, mux_state_t *mux_state)
return EC_SUCCESS;
}
-void virtual_hpd_update(const struct usb_mux *me, mux_state_t mux_state)
+void virtual_hpd_update(const struct usb_mux *me, mux_state_t mux_state,
+ bool *ack_required)
{
int port = me->usb_port;
- bool unused;
/* Current HPD related mux status + existing USB & DP mux status */
mux_state_t new_mux_state = mux_state |
(virtual_mux_state[port] & USB_PD_MUX_USB_DP_STATE);
- /* HPD ACK isn't required for the EC to continue with its tasks */
- virtual_mux_update_state(port, new_mux_state, &unused);
+ virtual_mux_update_state(port, new_mux_state, ack_required);
}
const struct usb_mux_driver virtual_usb_mux_driver = {