summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Wilson <evan@oliodevices.com>2016-04-20 18:54:36 -0700
committerEvan Wilson <evan@oliodevices.com>2016-05-03 19:48:47 -0700
commit0cd51e38b50ac0d9265e187d936b4cd767abbe8b (patch)
treed008bb2f95fe757a7037e04ff142d0e1e6bcfa44
parent25745347e39abeedea951acd20f4b2f33897c9c0 (diff)
downloadolio-linux-3.10-0cd51e38b50ac0d9265e187d936b4cd767abbe8b.tar.xz
olio-linux-3.10-0cd51e38b50ac0d9265e187d936b4cd767abbe8b.zip
Cleaning up accel code:
* Decreasing temp wake locks * Removing lost tap assumption (because we're now setting double_tap in the md1 we don't lose lost taps) * Removing excessive log messages * sixd_ths now uses the full range (0-4) Change-Id: I001c208cc01dce0780909f2dcb4cdfca2e7199db
-rw-r--r--drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_core.c6
-rw-r--r--drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c21
2 files changed, 5 insertions, 22 deletions
diff --git a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_core.c b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_core.c
index 766ebb42da0..4ab6ba5ac18 100644
--- a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_core.c
+++ b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_core.c
@@ -1095,7 +1095,7 @@ static int st_lsm6ds3_set_sixd_ths(struct lsm6ds3_data *cdata, int sixd_ths) {
int err = 0;
dev_info(cdata->dev, "Setting 6d ths: %d", sixd_ths);
- if(sixd_ths < 0 || sixd_ths > 3) {
+ if(sixd_ths < 0 || sixd_ths > 4) {
return -EINVAL;
} else if(sixd_ths == 0) {
err = st_lsm6ds3_write_data_with_mask(cdata, ST_LSM6DS3_MD1_ADDR, ST_LSM6DS3_6D_MD1_INT_MASK, 0, true);
@@ -1104,7 +1104,7 @@ static int st_lsm6ds3_set_sixd_ths(struct lsm6ds3_data *cdata, int sixd_ths) {
if(err < 0) {
return -EIO;
}
- err = st_lsm6ds3_write_data_with_mask(cdata, ST_LSM6DS3_TAP_THS_6D_ADDR, ST_LSM6DS3_SIXD_THS_MASK, sixd_ths, true);
+ err = st_lsm6ds3_write_data_with_mask(cdata, ST_LSM6DS3_TAP_THS_6D_ADDR, ST_LSM6DS3_SIXD_THS_MASK, sixd_ths-1, true);
}
if(err < 0) {
@@ -2432,7 +2432,7 @@ int st_lsm6ds3_common_probe(struct lsm6ds3_data *cdata, int irq)
// default values
cdata->sixd_mask = 0x21;
- cdata->sixd_ths = 0x2;
+ cdata->sixd_ths = 0x1;
cdata->tap_ths = 0x8;
cdata->indio_dev[ST_INDIO_DEV_ACCEL]->name =
diff --git a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
index a97a5da517c..15eff9445f9 100644
--- a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
+++ b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
@@ -146,13 +146,11 @@ 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;
int ignore_event = 0;
cdata = container_of((struct work_struct *)data_work,
struct lsm6ds3_data, data_work);
- wake_irq = last_wakeup_reason_test(cdata->irq);
mutex_lock(&cdata->fifo_lock);
cdata->tf->read(cdata, ST_LSM6DS3_6D_SRC_ADDR, 1, &d6d_src_reg, true);
cdata->tf->read(cdata, ST_LSM6DS3_TAP_SRC_ADDR, 1, &tap_src_reg, true);
@@ -160,9 +158,6 @@ static void st_lsm6ds3_irq_management(struct work_struct *data_work)
cdata->tf->read(cdata, ST_LSM6DS3_FIFO_DATA_AVL_ADDR, 1,
&src_fifo, true);
- dev_dbg(cdata->dev, "ST irq start :src_value, 6d, tap:%x %x %x",
- src_value, d6d_src_reg, tap_src_reg);
-
if(d6d_src_reg & ST_LSM6DS3_6D_SRC_DETECTED_MASK){
#ifdef WAKE_STATS_DEBUG_INFO
update_orient_stats(d6d_src_reg, cdata->timestamp);
@@ -191,21 +186,9 @@ static void st_lsm6ds3_irq_management(struct work_struct *data_work)
dev_info(cdata->dev, "Ignoring tap");
}
}
-
- if(cdata->first_irq_from_resume && wake_irq){
-#ifdef WAKE_STATS_DEBUG_INFO
- wakeup_irq_count++;
-#endif
- if(!d6d_event && !tap_event && !ignore_event){
- dev_info(cdata->dev, "No event from first resume, assuming lost TAP");
- tap_event = 1;
- cdata->last_wakeup_source |= LSM6DS3_WAKEUP_TAP;
- dev_info(cdata->dev, "Valid Tap from sleep");
- }
- }
if(!ignore_event && (tap_event || d6d_event) && cdata->first_irq_from_resume){
- wake_lock_timeout(&cdata->tap_wlock,msecs_to_jiffies(1000));
+ wake_lock_timeout(&cdata->tap_wlock,msecs_to_jiffies(750));
#ifdef WAKE_STATS_DEBUG_INFO
wakeup_irq_stayawake_count++;
#endif
@@ -214,7 +197,7 @@ static void st_lsm6ds3_irq_management(struct work_struct *data_work)
}
}
else if(d6d_event && !ignore_event) { //negative roll
- wake_lock_timeout(&cdata->tap_wlock,msecs_to_jiffies(600));
+ wake_lock_timeout(&cdata->tap_wlock,msecs_to_jiffies(400));
#ifdef WAKE_STATS_DEBUG_INFO
wakeup_irq_keepawake_count++;
#endif