summaryrefslogtreecommitdiff
path: root/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c')
-rw-r--r--drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
index 2e7af62ed47..9fe257039bb 100644
--- a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
+++ b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
@@ -19,6 +19,7 @@
#include <linux/interrupt.h>
#include <linux/iio/events.h>
#include <linux/wakelock.h>
+#include <linux/wakeup_reason.h>
#include "st_lsm6ds3.h"
@@ -69,11 +70,14 @@ static void st_lsm6ds3_irq_management(struct work_struct *data_work)
u8 src_value = 0x00, src_fifo = 0x00;
u8 d6d_event = 0;
u8 tap_event = 0;
+ int wake_irq;
cdata = container_of((struct work_struct *)data_work,
struct lsm6ds3_data, data_work);
+ wake_irq = last_wakeup_reason_test(cdata->irq);
+
if(!wake_lock_active(&cdata->wlock))
wake_lock(&cdata->wlock);
mutex_lock(&cdata->fifo_lock);
@@ -107,7 +111,7 @@ static void st_lsm6ds3_irq_management(struct work_struct *data_work)
dev_info(cdata->dev, "Ignoring tap");
}
}
- if(cdata->first_irq_from_resume){
+ if(cdata->first_irq_from_resume && wake_irq){
dev_info(cdata->dev, "First IRQ from a RESUME");
if(!d6d_event && !tap_event){
dev_info(cdata->dev, "No event from first resume, assuming lost TAP");