usb: typec: ucsi: yoga_c630: Remove redundant duplicate altmode handling

This reverts commit e0c48e42d8 ("usb: typec: ucsi: yoga-c630: remove
duplicate AltModes").

The yoga_c630 driver previously implemented its own duplicate altmode
detection in yoga_c630_ucsi_update_altmodes() to work around buggy EC
firmware that returns duplicate AltModes instead of empty ones.

With the introduction of the common ucsi_altmode_is_duplicate() helper
in both the standard and nvidia registration paths, duplicate detection
is now handled automatically in the core UCSI code. This makes the
yoga_c630-specific implementation added in commit e0c48e42d8 ("usb:
typec: ucsi: yoga-c630: remove duplicate AltModes") redundant.

Remove yoga_c630_ucsi_update_altmodes() and its callback to eliminate
code duplication and simplify the driver. Note that this causes the
driver to switch back from the nvidia registration path to the standard
path, which is the original behavior before commit e0c48e42d8 ("usb:
typec: ucsi: yoga-c630: remove duplicate AltModes"). Both paths now
include duplicate detection, ensuring the firmware bug is still properly
handled.

Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
Link: https://patch.msgid.link/20260713084323.287516-3-acelan.kao@canonical.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Chia-Lin Kao (AceLan) 2026-07-13 16:43:23 +08:00 committed by Greg Kroah-Hartman
parent f1aa17f72f
commit 8706409bd4

View File

@ -139,28 +139,6 @@ static int yoga_c630_ucsi_sync_control(struct ucsi *ucsi,
return ret;
}
static bool yoga_c630_ucsi_update_altmodes(struct ucsi *ucsi,
u8 recipient,
struct ucsi_altmode *orig,
struct ucsi_altmode *updated)
{
int i;
if (orig[0].svid == 0 || recipient != UCSI_RECIPIENT_SOP)
return false;
/* EC is nice and repeats altmodes again and again. Ignore copies. */
for (i = 1; i < UCSI_MAX_ALTMODES; i++) {
if (orig[i].svid == orig[0].svid) {
dev_dbg(ucsi->dev, "Found duplicate altmodes, starting from %d\n", i);
memset(&orig[i], 0, (UCSI_MAX_ALTMODES - i) * sizeof(*orig));
break;
}
}
return false;
}
static void yoga_c630_ucsi_update_connector(struct ucsi_connector *con)
{
if (con->num == 1)
@ -174,7 +152,6 @@ static const struct ucsi_operations yoga_c630_ucsi_ops = {
.read_message_in = yoga_c630_ucsi_read_message_in,
.sync_control = yoga_c630_ucsi_sync_control,
.async_control = yoga_c630_ucsi_async_control,
.update_altmodes = yoga_c630_ucsi_update_altmodes,
.update_connector = yoga_c630_ucsi_update_connector,
};