summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattis fjallstrom <mattis@acm.org>2015-11-17 17:27:16 -0800
committermattis fjallstrom <mattis@acm.org>2015-11-23 21:16:50 -0800
commit3c68bb7d91a4cada502bc4e0825cde694f5f6364 (patch)
treeb45920302c3c94c8b93c347a49fabaeca512549e
parent1263594ac4592804a8f49e73b42ed9c2f41644db (diff)
downloadolio-linux-3.10-3c68bb7d91a4cada502bc4e0825cde694f5f6364.tar.xz
olio-linux-3.10-3c68bb7d91a4cada502bc4e0825cde694f5f6364.zip
Adding special handling for 6d-events, so that we can recognize it higher up the software stack.
Change-Id: I00a3ebe3bbcf4cfeb8ff89e75c990d90d8e1acc9
-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 7a3b667d502..a7925638dba 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);