diff options
Diffstat (limited to 'drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c')
| -rw-r--r-- | drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c | 6 |
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"); |