From: Peng Fan <[email protected]>

Check the pd-disable property in the connector node during
tcpm_post_probe(). When set, skip tcpm_port_init() and
tcpm_poll_event() so the TCPCI driver is probed (I2C accessible,
ops available) but the PD state machine does not run.

This is needed for dual-role data ports where running the state
machine during probe would disrupt an already-established USB
connection.

Signed-off-by: Peng Fan <[email protected]>
---
 drivers/usb/tcpm/tcpm.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/tcpm/tcpm.c b/drivers/usb/tcpm/tcpm.c
index 1ce46118fea..32c67b8886e 100644
--- a/drivers/usb/tcpm/tcpm.c
+++ b/drivers/usb/tcpm/tcpm.c
@@ -2306,8 +2306,15 @@ static void tcpm_poll_event(struct udevice *dev)
 
 int tcpm_post_probe(struct udevice *dev)
 {
-       int ret = tcpm_port_init(dev);
+       const struct dm_tcpm_ops *drvops = dev_get_driver_ops(dev);
+       ofnode connector;
+       int ret;
+
+       ret = drvops->get_connector_node(dev, &connector);
+       if (!ret && ofnode_read_bool(connector, "pd-disable"))
+               return 0;
 
+       ret = tcpm_port_init(dev);
        if (ret < 0) {
                dev_err(dev, "failed to tcpm port init\n");
                return ret;

-- 
2.51.0

Reply via email to