[PATCH] usb: typec: ucsi: Skip CAM query when partner has no alt modes
From: Gris Ge
Date: Sat Sep 26 2026 - 22:17:16 EST
Since Thunderbolt alternate mode support was added,
`ucsi_altmode_update_active()` is called on every Connector Partner
Changed event. This made the driver send `UCSI_GET_CURRENT_CAM` to
PPMs even when the partner had no alternate modes registered. Firmware
that does not support the optional alternate mode details answered Not
Supported, which produced a spurious error on every partner change:
```
ucsi_acpi USBC000:00: GET_CURRENT_CAM command failed
```
Fixed by skipping the command when there is nothing to update.
Fixes: da87d45b1951 ("usb: typec: ucsi: Add Thunderbolt alternate mode support")
Cc: stable@xxxxxxxxxxxxxxx # v7.0+
Assisted-by: Codex:deepseek-v4.1-flash
Signed-off-by: Gris Ge <cnfourt@xxxxxxxxx>
---
drivers/usb/typec/ucsi/ucsi.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index bef3f9b71d71..71b28e4df470 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -360,6 +360,15 @@ void ucsi_altmode_update_active(struct ucsi_connector *con)
u8 cur;
int i;
+ /*
+ * Alternate mode support is optional, and the PPM is not required to
+ * support GET_CURRENT_CAM when it does not support alternate modes.
+ * There is also nothing to update when the partner has not registered
+ * any alternate modes, so don't send the command in that case.
+ */
+ if (!con->partner_altmode[0])
+ return;
+
command = UCSI_GET_CURRENT_CAM | UCSI_CONNECTOR_NUMBER(con->num);
ret = ucsi_send_command(con->ucsi, command, &cur, sizeof(cur));
if (ret < 0) {
--
2.55.0