diff options
| -rw-r--r-- | drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_core.c | 6 | ||||
| -rw-r--r-- | drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c | 21 | 
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  |