Message ID | 20240103100635.57099-1-lk@c--e.de |
---|---|
State | New |
Headers | show |
Series | [RFC] Fix stuck UCSI controller on DELL | expand |
Hi Christian, On Wed, Jan 03, 2024 at 11:06:35AM +0100, Christian A. Ehrhardt wrote: > I have a DELL Latitude 5431 where typec only works somewhat. > After the first plug/unplug event the PPM seems to be stuck and > commands end with a timeout (GET_CONNECTOR_STATUS failed (-110)). > > This patch fixes it for me but according to my reading it is in > violation of the UCSI spec. On the other hand searching through > the net it appears that many DELL models seem to have timeout problems > with UCSI. > > Do we want some kind of quirk here? There does not seem to be a quirk > framework for this part of the code, yet. Or is it ok to just send the > additional ACK in all cases and hope that the PPM will do the right > thing? We can use DMI quirks. Something like the attached diff (not tested). thanks,
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index 61b64558f96c..65098a454f63 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -53,7 +53,10 @@ static int ucsi_acknowledge_connector_change(struct ucsi *ucsi) ctrl = UCSI_ACK_CC_CI; ctrl |= UCSI_ACK_CONNECTOR_CHANGE; - return ucsi->ops->sync_write(ucsi, UCSI_CONTROL, &ctrl, sizeof(ctrl)); + if (ucsi->ops->sync_write(ucsi, UCSI_CONTROL, &ctrl, sizeof(ctrl))) + pr_err("ACK FAILED\n"); + + return ucsi_acknowledge_command(ucsi); } static int ucsi_exec_command(struct ucsi *ucsi, u64 command);