summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHector Martin <marcan@marcan.st>2025-09-14 12:56:15 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-09-14 16:08:21 +0200
commit04041fd7d6ec0bc5c4277711e17b43ffb45e30ba (patch)
treea72d17d2ad6b23401f5b0a65542887f3bc8a94ed
parent77ed2f4538da7356a1813e9d4e4c13de6e3d5a2a (diff)
usb: typec: tipd: Read data status in probe and cache its value
Just like for power status we also need to keep track of data status to be able to detect mode changes once we introduce de-bouncing for CD321x. Read it during probe and keep a cached copy of its value. Signed-off-by: Hector Martin <marcan@marcan.st> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Reviewed-by: Neal Gompa <neal@gompa.dev> Signed-off-by: Sven Peter <sven@kernel.org> Link: https://lore.kernel.org/r/20250914-apple-usb3-tipd-v1-10-4e99c8649024@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/typec/tipd/core.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c
index f546f4ae563a..f347e5bc6254 100644
--- a/drivers/usb/typec/tipd/core.c
+++ b/drivers/usb/typec/tipd/core.c
@@ -176,6 +176,7 @@ struct tps6598x {
int wakeup;
u32 status; /* status reg */
+ u32 data_status;
u16 pwr_status;
struct delayed_work wq_poll;
@@ -538,6 +539,7 @@ static bool tps6598x_read_data_status(struct tps6598x *tps)
dev_err(tps->dev, "failed to read data status: %d\n", ret);
return false;
}
+ tps->data_status = data_status;
if (tps->data->trace_data_status)
tps->data->trace_data_status(data_status);
@@ -1551,6 +1553,8 @@ static int tps6598x_probe(struct i2c_client *client)
if (status & TPS_STATUS_PLUG_PRESENT) {
if (!tps6598x_read_power_status(tps))
goto err_unregister_port;
+ if (!tps->data->read_data_status(tps))
+ goto err_unregister_port;
ret = tps6598x_connect(tps, status);
if (ret)
dev_err(&client->dev, "failed to register partner\n");