The USB Communications Capable bit indicates if port
partner is capable of communication over the USB data lines
(e.g. D+/- or SS Tx/Rx). TCPM passes this information for chip specific
operations.

Signed-off-by: Badhri Jagan Sridharan <bad...@google.com>
---
 drivers/usb/typec/tcpm/tcpci.c | 9 +++++++++
 drivers/usb/typec/tcpm/tcpci.h | 6 ++++++
 2 files changed, 15 insertions(+)

diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
index f676abab044b..a27deb0b5f03 100644
--- a/drivers/usb/typec/tcpm/tcpci.c
+++ b/drivers/usb/typec/tcpm/tcpci.c
@@ -255,6 +255,14 @@ static int tcpci_set_polarity(struct tcpc_dev *tcpc,
                           TCPC_TCPC_CTRL_ORIENTATION : 0);
 }
 
+static void tcpci_set_partner_usb_comm_capable(struct tcpc_dev *tcpc, bool 
capable)
+{
+       struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
+
+       if (tcpci->data->set_partner_usb_comm_capable)
+               tcpci->data->set_partner_usb_comm_capable(tcpci, tcpci->data, 
capable);
+}
+
 static int tcpci_set_vconn(struct tcpc_dev *tcpc, bool enable)
 {
        struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
@@ -720,6 +728,7 @@ struct tcpci *tcpci_register_port(struct device *dev, 
struct tcpci_data *data)
        tcpci->tcpc.set_bist_data = tcpci_set_bist_data;
        tcpci->tcpc.enable_frs = tcpci_enable_frs;
        tcpci->tcpc.frs_sourcing_vbus = tcpci_frs_sourcing_vbus;
+       tcpci->tcpc.set_partner_usb_comm_capable = 
tcpci_set_partner_usb_comm_capable;
 
        if (tcpci->data->auto_discharge_disconnect) {
                tcpci->tcpc.enable_auto_vbus_discharge = 
tcpci_enable_auto_vbus_discharge;
diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h
index c3c7d07d9b4e..57b6e24e0a0c 100644
--- a/drivers/usb/typec/tcpm/tcpci.h
+++ b/drivers/usb/typec/tcpm/tcpci.h
@@ -161,6 +161,10 @@ struct tcpci;
  *             Optional; Enables TCPC to autonously discharge vbus on 
disconnect.
  * @vbus_vsafe0v:
  *             optional; Set when TCPC can detect whether vbus is at VSAFE0V.
+ * @set_partner_usb_comm_capable:
+ *             Optional; The USB Communications Capable bit indicates if port
+ *             partner is capable of communication over the USB data lines
+ *             (e.g. D+/- or SS Tx/Rx). Called to notify the status of the bit.
  */
 struct tcpci_data {
        struct regmap *regmap;
@@ -175,6 +179,8 @@ struct tcpci_data {
                                  enum typec_cc_status cc);
        int (*set_vbus)(struct tcpci *tcpci, struct tcpci_data *data, bool 
source, bool sink);
        void (*frs_sourcing_vbus)(struct tcpci *tcpci, struct tcpci_data *data);
+       void (*set_partner_usb_comm_capable)(struct tcpci *tcpci, struct 
tcpci_data *data,
+                                            bool capable);
 };
 
 struct tcpci *tcpci_register_port(struct device *dev, struct tcpci_data *data);
-- 
2.30.0.365.g02bc693789-goog

Reply via email to