summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/iio/imu/st_lsm6ds3/st_lsm6ds3.h1
-rw-r--r--drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_buffer.c14
-rw-r--r--drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c5
3 files changed, 18 insertions, 2 deletions
diff --git a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3.h b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3.h
index edc5de95b1d..afd696effc2 100644
--- a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3.h
+++ b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3.h
@@ -237,6 +237,7 @@ void st_lsm6ds3_deallocate_rings(struct lsm6ds3_data *cdata);
int st_lsm6ds3_trig_set_state(struct iio_trigger *trig, bool state);
void st_lsm6ds3_read_fifo(struct lsm6ds3_data *cdata, bool check_fifo_len, bool update_discard);
void st_lsm6ds3_push_tap_to_fifo(struct lsm6ds3_data *cdata);
+void st_lsm6ds3_push_d6d_to_fifo(struct lsm6ds3_data *cdata);
int st_lsm6ds3_set_fifo_decimators_and_threshold(struct lsm6ds3_data *cdata);
#define ST_LSM6DS3_TRIGGER_SET_STATE (&st_lsm6ds3_trig_set_state)
#else /* CONFIG_IIO_BUFFER */
diff --git a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_buffer.c b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_buffer.c
index 75d3e3aaca2..eb080d4b8f9 100644
--- a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_buffer.c
+++ b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_buffer.c
@@ -148,7 +148,7 @@ static void st_lsm6ds3_parse_fifo_data(struct lsm6ds3_data *cdata, u16 read_len)
void st_lsm6ds3_push_tap_to_fifo(struct lsm6ds3_data *cdata)
{
- int i;
+ /* int i; */
u8 fake_tap[6] = {0};
dev_info(cdata->dev, "Sending Fake tap through accel data @:%llu", cdata->accel_timestamp-1);
st_lsm6ds3_push_data_with_timestamp(
@@ -157,6 +157,18 @@ void st_lsm6ds3_push_tap_to_fifo(struct lsm6ds3_data *cdata)
cdata->accel_timestamp -1);
}
+
+void st_lsm6ds3_push_d6d_to_fifo(struct lsm6ds3_data *cdata)
+{
+ u8 d6d_signature[6] = {1};
+ dev_info(cdata->dev, "Sending 6d event through accel data @:%llu", cdata->accel_timestamp-1);
+ st_lsm6ds3_push_data_with_timestamp(
+ cdata, ST_INDIO_DEV_ACCEL,
+ d6d_signature,
+ cdata->accel_timestamp -1);
+}
+
+
void st_lsm6ds3_read_fifo(struct lsm6ds3_data *cdata, bool check_fifo_len, bool update_discard)
{
int err;
diff --git a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
index f8e768dab38..8aab9911596 100644
--- a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
+++ b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
@@ -205,6 +205,9 @@ static void st_lsm6ds3_irq_management(struct work_struct *data_work)
#ifdef WAKE_STATS_DEBUG_INFO
wakeup_irq_stayawake_count++;
#endif
+ if (d6d_event) {
+ st_lsm6ds3_push_d6d_to_fifo(cdata);
+ }
}
else if(d6d_event && !ignore_event){//negative roll
wake_lock_timeout(&cdata->tap_wlock,msecs_to_jiffies(200));
@@ -212,7 +215,7 @@ static void st_lsm6ds3_irq_management(struct work_struct *data_work)
wakeup_irq_keepawake_count++;
#endif
}
-//significant motion event processing
+ //significant motion event processing
if(tap_event){
dev_info(cdata->dev, "Sending sig mot event(tap); ready:%i",cdata->sign_motion_event_ready);
st_lsm6ds3_push_tap_to_fifo(cdata);