summaryrefslogtreecommitdiff
path: root/common/motion_sense.c
diff options
context:
space:
mode:
authorGwendal Grignou <gwendal@chromium.org>2021-03-22 17:30:39 -0700
committerCommit Bot <commit-bot@chromium.org>2021-03-29 19:07:38 +0000
commit4c84afb1cdb1d1da8155f1bc30ea93ecd7b8dd4b (patch)
tree21a4edcf7386e94e950acb588540f7f779b9d79e /common/motion_sense.c
parentf4b27032e1c508b693bba1f2d6572ad14d42f319 (diff)
downloadchrome-ec-4c84afb1cdb1d1da8155f1bc30ea93ecd7b8dd4b.tar.gz
common: motion_sense: Prevent on/off body from waking up device
Introduce a new flag: BYPASS_FIFO to raise an interrupt to the AP when an event is sent. It is not as strong as WAKEUP, as it does not wake up the AP. BYPASS_FIFO must be set when WAKEUP is set. It is applied to sync sensor as well as gesture/activity sensor. BUG=b:123434029 BRANCH=trogdor TEST=Compile Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Change-Id: Id5aba71e6d11ef31f7fa2c67ba2e07178d088b1b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2780834 Reviewed-by: Ching-Kang Yen <chingkang@chromium.org> Tested-by: Ching-Kang Yen <chingkang@chromium.org> Commit-Queue: Ching-Kang Yen <chingkang@chromium.org>
Diffstat (limited to 'common/motion_sense.c')
-rw-r--r--common/motion_sense.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/common/motion_sense.c b/common/motion_sense.c
index efb6552078..4dd8b6cc13 100644
--- a/common/motion_sense.c
+++ b/common/motion_sense.c
@@ -777,15 +777,14 @@ static void check_and_queue_gestures(uint32_t *event)
if (IS_ENABLED(CONFIG_GESTURE_HOST_DETECTION)) {
struct ec_response_motion_sensor_data vector;
+ vector.flags = MOTIONSENSE_SENSOR_FLAG_BYPASS_FIFO;
/*
* Send events to the FIFO
* AP is ignoring double tap event, do no wake up and no
* automatic disable.
*/
if (IS_ENABLED(CONFIG_GESTURE_SENSOR_DOUBLE_TAP_FOR_HOST))
- vector.flags = MOTIONSENSE_SENSOR_FLAG_WAKEUP;
- else
- vector.flags = 0;
+ vector.flags |= MOTIONSENSE_SENSOR_FLAG_WAKEUP;
vector.activity_data.activity =
MOTIONSENSE_ACTIVITY_DOUBLE_TAP;
vector.activity_data.state = 1 /* triggered */;
@@ -805,7 +804,8 @@ static void check_and_queue_gestures(uint32_t *event)
struct ec_response_motion_sensor_data vector;
/* Send events to the FIFO */
- vector.flags = MOTIONSENSE_SENSOR_FLAG_WAKEUP;
+ vector.flags = MOTIONSENSE_SENSOR_FLAG_WAKEUP |
+ MOTIONSENSE_SENSOR_FLAG_BYPASS_FIFO;
vector.activity_data.activity =
MOTIONSENSE_ACTIVITY_SIG_MOTION;
vector.activity_data.state = 1 /* triggered */;
@@ -951,7 +951,7 @@ void motion_sense_task(void *u)
* - we haven't done it for a while.
*/
if (IS_ENABLED(CONFIG_ACCEL_FIFO) &&
- (motion_sense_fifo_wake_up_needed() ||
+ (motion_sense_fifo_bypass_needed() ||
event & (TASK_EVENT_MOTION_ODR_CHANGE |
TASK_EVENT_MOTION_FLUSH_PENDING) ||
motion_sense_fifo_over_thres() ||
@@ -974,8 +974,10 @@ void motion_sense_task(void *u)
sensor_active == SENSOR_ACTIVE_S0) ||
motion_sense_fifo_wake_up_needed()))) {
mkbp_send_event(EC_MKBP_EVENT_SENSOR_FIFO);
- motion_sense_fifo_reset_wake_up_needed();
}
+ if (motion_sense_fifo_bypass_needed())
+ /* wakeup flag is a subset of bypass flag. */
+ motion_sense_fifo_reset_needed_flags();
}
ts_end_task = get_time();