summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/mfd/cros_ec.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/mfd/cros_ec.c b/drivers/mfd/cros_ec.c
index c982b81af926..d770843714ec 100644
--- a/drivers/mfd/cros_ec.c
+++ b/drivers/mfd/cros_ec.c
@@ -406,15 +406,25 @@ u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev)
static irqreturn_t ec_irq_thread(int irq, void *data)
{
struct cros_ec_device *ec_dev = data;
- int ret;
-
- if (device_may_wakeup(ec_dev->dev))
- pm_wakeup_event(ec_dev->dev, 0);
+ int ret, wake_event = 1;
- if (ec_dev->mkbp_event_supported)
+ if (ec_dev->mkbp_event_supported) {
ret = cros_ec_get_next_event(ec_dev);
- else
+ if (ec_dev->event_data.event_type == EC_MKBP_EVENT_SENSOR_FIFO) {
+ /*
+ * While we are suspending, we may still receive
+ * sensor information on the wake up interrupt line.
+ * Ignore wake up event (significant motion) until we
+ * are fully suspended.
+ */
+ wake_event = 0;
+ }
+ } else {
ret = cros_ec_get_keyboard_state_event(ec_dev);
+ }
+
+ if (device_may_wakeup(ec_dev->dev) && wake_event)
+ pm_wakeup_event(ec_dev->dev, 0);
if (ret > 0)
blocking_notifier_call_chain(&ec_dev->event_notifier,