]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
usb: typec: ucsi: resume work after EC init
authorJameson Thies <jthies@google.com>
Tue, 4 Feb 2025 02:45:59 +0000 (02:45 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Feb 2025 08:29:07 +0000 (09:29 +0100)
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>
drivers/usb/typec/ucsi/cros_ec_ucsi.c

index 744f0709a40eddeed17f23e986f60e9f985381fd..4ec1c6d223109648fc49df0d74ba1a8ab3017b7c 100644 (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;
 }