usb: typec: ucsi: resume work after EC init

A manual EC sysjump will restart the PPM and break communication with
the UCSI driver by disabling notifications in the initial PPM state.
Update cros_ec_ucsi to listen for PPM init events and treat them as a
system resume to re-establish communication with the PPM (ChromeOS EC).

Signed-off-by: Jameson Thies <jthies@google.com>
Reviewed-by: Łukasz Bartosik <ukaszb@chromium.org>
Reviewed-by: Benson Leung <bleung@chromium.org>
Link: https://lore.kernel.org/r/20250204024600.4138776-3-jthies@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Jameson Thies 2025-02-04 02:45:59 +00:00 committed by Greg Kroah-Hartman
parent dcba69711f
commit 7f7283183c

View File

@ -206,12 +206,19 @@ static int cros_ucsi_event(struct notifier_block *nb,
{
struct cros_ucsi_data *udata = container_of(nb, struct cros_ucsi_data, nb);
if (!(host_event & PD_EVENT_PPM))
return NOTIFY_OK;
if (host_event & PD_EVENT_INIT) {
/* Late init event received from ChromeOS EC. Treat this as a
* system resume to re-enable communication with the PPM.
*/
dev_dbg(udata->dev, "Late PD init received\n");
ucsi_resume(udata->ucsi);
}
dev_dbg(udata->dev, "UCSI notification received\n");
flush_work(&udata->work);
schedule_work(&udata->work);
if (host_event & PD_EVENT_PPM) {
dev_dbg(udata->dev, "UCSI notification received\n");
flush_work(&udata->work);
schedule_work(&udata->work);
}
return NOTIFY_OK;
}