Ah, thanks for the explanation. I misread the code. To be honest we spent an embarrasing long time looking at this code. At first that Smatch was wrong and that ret could be -ETIMEDOUT and went down a whole long rabbit hole trying to debug that. :P What about if we did this instead? I can send this as a proper patch if you're okay with it. regards, dan carpenter diff --git a/drivers/usb/typec/ucsi/ucsi_acpi.c b/drivers/usb/typec/ucsi/ucsi_acpi.c index 928eacbeb21a..5251132cb35b 100644 --- a/drivers/usb/typec/ucsi/ucsi_acpi.c +++ b/drivers/usb/typec/ucsi/ucsi_acpi.c @@ -153,6 +153,9 @@ ucsi_dell_sync_write(struct ucsi *ucsi, unsigned int offset, if (ack == 0) return ret; + if (ua->dell_quirk_probed && !ua->dell_quirk_active) + return 0; + if (!ua->dell_quirk_probed) { ua->dell_quirk_probed = true; @@ -170,9 +173,6 @@ ucsi_dell_sync_write(struct ucsi *ucsi, unsigned int offset, dev_err(ua->dev, "Firmware bug: Enabling workaround\n"); } - if (!ua->dell_quirk_active) - return ret; - return ucsi_acpi_sync_write(ucsi, UCSI_CONTROL, &ack, sizeof(ack)); }