diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 16b5ab3953f3..969411e3b8df 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -3075,6 +3075,16 @@ static inline enum tcpm_state unattached_state(struct tcpm_port *port) return SNK_UNATTACHED; } +bool tcpm_is_toggling(struct tcpm_port *port) +{ + if (port->port_type == TYPEC_PORT_DRP) + return port->state == SRC_UNATTACHED || port->state == SNK_UNATTACHED || + port->state == TOGGLING; + + return false; +} +EXPORT_SYMBOL_GPL(tcpm_is_toggling); + static void tcpm_check_send_discover(struct tcpm_port *port) { if (port->data_role == TYPEC_HOST && port->send_discover && diff --git a/include/linux/usb/tcpm.h b/include/linux/usb/tcpm.h index a206db0f8ad1..6b85117c2342 100644 --- a/include/linux/usb/tcpm.h +++ b/include/linux/usb/tcpm.h @@ -166,5 +166,6 @@ void tcpm_pd_transmit_complete(struct tcpm_port *port, void tcpm_pd_hard_reset(struct tcpm_port *port); void tcpm_tcpc_reset(struct tcpm_port *port); bool tcpm_is_debouncing(struct tcpm_port *tcpm); +bool tcpm_is_toggling(struct tcpm_port *port); #endif /* __LINUX_USB_TCPM_H */