From 912795eaa2fe7ab5da57cf0d836674d1b23d0983 Mon Sep 17 00:00:00 2001 From: Badhri Jagan Sridharan Date: Mon, 23 Nov 2020 17:52:27 -0800 Subject: [PATCH] ANDROID: usb: typec: tcpm: Add a helper function to port is toggling Helper function needed for fixing TD.4.7.4 and TEST.PD.PROT.SRC.10 PR_Swap while having contamiant detection enabled. tcpm_is_toggling returns true when a DRP port is in one of the toggling states. Bug: 169213252 Bug: 174094095 Signed-off-by: Badhri Jagan Sridharan Change-Id: Ie3837c3067fd91f3e9ea4afdfc1d5c7bf44659de --- drivers/usb/typec/tcpm/tcpm.c | 10 ++++++++++ include/linux/usb/tcpm.h | 1 + 2 files changed, 11 insertions(+) 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 */