From 1b81aed96ffcb3bb08dfea2d37a120542ee5db9c Mon Sep 17 00:00:00 2001 From: mattis fjallstrom Date: Tue, 17 Nov 2015 17:27:16 -0800 Subject: Adding special handling for 6d-events, so that we can recognize it higher up the software stack. Change-Id: I00a3ebe3bbcf4cfeb8ff89e75c990d90d8e1acc9 --- drivers/iio/imu/st_lsm6ds3/st_lsm6ds3.h | 1 + drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_buffer.c | 14 +++++++++++++- drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c | 5 ++++- 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); -- cgit v1.2.3-70-g09d2