platform/chrome: Don't treat RTC events as wakeup sources
authorStephen Boyd <swboyd@chromium.org>
Fri, 30 Oct 2020 23:25:23 +0000 (16:25 -0700)
committerEnric Balletbo i Serra <enric.balletbo@collabora.com>
Thu, 12 Nov 2020 20:24:04 +0000 (21:24 +0100)
The EC sends an RTC host event when the RTC fires, but we don't need to
treat that as a wakeup event here. The RTC class already properly
handles activating and deactivating a wakeup source in rtc_update_irq()
by calling pm_stay_awake() at the start of processing and pm_relax()
once all expired RTC timers have been processed. This reduces one wakeup
increment but not much else. I noticed this while debugging RTC wakeups
and how they always incremented the wakeup count by two instead of one
because this is duplicated.

Signed-off-by: Stephen Boyd <swboyd@chromium.org>
Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Cc: Guenter Roeck <groeck@chromium.org>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: <linux-rtc@vger.kernel.org>
Link: https://lore.kernel.org/r/20201030232523.2654478-1-swboyd@chromium.org
drivers/platform/chrome/cros_ec_proto.c

index 0ecee8b..7c92a6e 100644 (file)
@@ -742,12 +742,16 @@ int cros_ec_get_next_event(struct cros_ec_device *ec_dev,
                 * Sensor events need to be parsed by the sensor sub-device.
                 * Defer them, and don't report the wakeup here.
                 */
-               if (event_type == EC_MKBP_EVENT_SENSOR_FIFO)
-                       *wake_event = false;
-               /* Masked host-events should not count as wake events. */
-               else if (host_event &&
-                        !(host_event & ec_dev->host_event_wake_mask))
+               if (event_type == EC_MKBP_EVENT_SENSOR_FIFO) {
                        *wake_event = false;
+               } else if (host_event) {
+                       /* rtc_update_irq() already handles wakeup events. */
+                       if (host_event & EC_HOST_EVENT_MASK(EC_HOST_EVENT_RTC))
+                               *wake_event = false;
+                       /* Masked host-events should not count as wake events. */
+                       if (!(host_event & ec_dev->host_event_wake_mask))
+                               *wake_event = false;
+               }
        }
 
        return ret;