return 0;
 }
 
-static int cros_pchg_event(const struct charger_data *charger,
-                          unsigned long host_event)
+static int cros_pchg_event(const struct charger_data *charger)
 {
        int i;
 
        if (!(host_event & EC_MKBP_PCHG_DEVICE_EVENT))
                return NOTIFY_DONE;
 
-       return cros_pchg_event(charger, host_event);
+       return cros_pchg_event(charger);
 }
 
 static int cros_pchg_probe(struct platform_device *pdev)
        charger->ec_dev = ec_dev;
        charger->ec_device = ec_device;
 
+       platform_set_drvdata(pdev, charger);
+
        ret = cros_pchg_port_count(charger);
        if (ret <= 0) {
                /*
        return 0;
 }
 
+#ifdef CONFIG_PM_SLEEP
+static int __maybe_unused cros_pchg_resume(struct device *dev)
+{
+       struct charger_data *charger = dev_get_drvdata(dev);
+
+       /*
+        * Sync all ports on resume in case reports from EC are lost during
+        * the last suspend.
+        */
+       cros_pchg_event(charger);
+
+       return 0;
+}
+#endif
+
+static SIMPLE_DEV_PM_OPS(cros_pchg_pm_ops, NULL, cros_pchg_resume);
+
 static struct platform_driver cros_pchg_driver = {
        .driver = {
                .name = DRV_NAME,
+               .pm = &cros_pchg_pm_ops,
        },
        .probe = cros_pchg_probe
 };